Zum Inhalt springen

Eupinkepank

Mitglieder
  • Gesamte Inhalte

    63
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Eupinkepank

  1. Na gut.... Nehmen wir also an, in Deinem Formular steht das hier: <form action = "meinedatei.php" method="post"> ..... <select name="tag"> <option value="M">Montag</option> .... <option value="S">Sonntag</option> </select> .... [/PHP] Dann kannste in der Datei "meinedatei.php" den Wert von $_POST['tag'] aus dem Formular in Deine DB Query einbauen. Du brauchst nur naoch eine DB Query die dynamisch aus dem Formular gefüttert wird. Und das war es eigentlich.. Noch ein Tipp! Aus dem "[...]LIKE '%M%' [...]" in Deiner Query mach bitte unbedingt ein "[...] =".$_POST['tag]."' [...]", weil ein "Like" immer sehr viel an Performance kostet. Hat die Tabelle sehr viele Einträge, dann solltest Du von der Kennzeichnung der Wochertage durch Buchstaben weggehen und sie durch Zahlen ersetzen. Hier bietet sich an, die Zahlen für die Wochentage der date(); Funktion zu übernehmen.... also "0" für Sonntag bis "6" für Samstag, da ein Zugriff auf ein vernünftig indexiertes Zahlenfeld immer in "Null Zeit" passiert (Egal ob 5 Einträge in der Tabelle, oder 2 Mio!), ein Zugriff auf ein indexiertes varchar Feld allerdings sehr viel an MySQL Performance "frisst".
  2. Es gibt da eine Möglichkeit eine Email direkt in eine Datenbank zu schreiben... Ich werde am DIENSTAG mal in meinen Skripten schauen, da ich das schon mal für eine Forensoftware gemacht habe. War gar nicht soooo wild...
  3. Wir reden aneinader vorbei... Wie wählt der Bediener aus, ob Montag oder z.B. Dienstag angezeigt werden soll? Kommt das aus einem HTML Formular oder so?
  4. Fehlermeldung? Ist der externe Zugriff auf die DB freigeschaltet? mysql_pconnect(); wird da eh nicht funktionieren. Generell: Das ist eine nicht nur unsaubere, sondern auch gefährliche Lösung. Die Daten (user,pass,host) werden unverschlüsselt über das Netz übertragen und können somit von JEDEM mitgelsen werden. PHP und MySQL IMMER Localhost halten, bzw. einen extra SQL Server verwenden der aber nur vom PHP Server erreicht werden kann.
  5. Ich möchte halt gerne wissen, woher die Information kommt, ob nun "Montag" oder "Dienstag" angezeigt werden soll.
  6. Ist es nicht weitaus "geschmeidiger", sich die jeweilige DB Query dyanmisch zusammenzubauen als "switch/case" zu verwenden? Woher kommt denn die Entscheidung, ob nun "Monatag" oder "Mittwoch"? Aus einem Formular? Irgendwoher muss sie doch kommen, und dann kannste natürlich die query mit diesem Wert befüllen
  7. Auch hier: Zend Studio benutzen. Das Studio kann die .ini Dateien der Produktivumgebung einbinden und das zu debuggende Programm dann Zeile für Zeile durchlaufen und wird dann Notices, Warnings und Fatal Errors anzeigen und auch den dazugehörigen Ursprung. Natürlich erhält man auch eine Übersicht der gerade verwendeten Funktionen, Klassen und Methoden. Weiterhin kann man damit auch ein Benchmarking durchführen, was unheimlich dabei hilft den PHP Code zu verfeinern und zu beschleunigen. Auch wer die Ausgabe von 350 Euro für das Zend Studio scheut, sollte sich das Ding halt herunterladen... Es kann ja einen Monat in der Vollversion kostenlos benutzt werden.
  8. Ist generell sehr "doof" das mit JS zu machen... Was passoert, wenn ein User JS deaktiviert hat? mach es halt mit php+html.... Das ist bei sicherheitsrelevanten Dingen viel besser... Zumal du diese Fallbackebene eh schaffen musst aus o.g. Grund.
  9. In Deiner Funktion gibt es 2 "FOR" Schleifen. In beiden Schleifen ist die Bedingung ein "$i < mysql_num_fields". Das bedeutet: Bei jedem Schleifendurchlauf wird diese MySQL Operation ausgeführt. Das ist sehr schlecht. Mach halt vorher ein "$felder=mysql_num_fields($result)" und nutze dann $felder als Bedingungwert. Dann wird das schon schneller.
  10. Dann poste mal die 50 Zeilen HTML
  11. Hmmm.. Sieht für mich ganz klar nach einem Fehler im html aus. Alle Dateien die das Skript lädt sind vorhanden? (Pfadangaben prüfen!!) Es wird kein defektes Java Script geladen? Hast Du Dir schon mal ein eigenes Log erzeugt? Einfach Timestamp und alle anderen relevanten Daten in eine MySQL Tabelle eintragen und dann Zeile für Zeile aus dem html löschen bzw. auskommentieren.
  12. Hast Du Dir mal den Error Log angesehen? Ich hatte mal ein ähnliches Phänomen bei einer alten Version vom IE 5.5. Ein Bild konnte nicht geladen werden, weil der Pfad nicht stimmte. Also wurde die gesamte Seite einmalig erneut geladen. Schau mal ins log, ob da ein 404 Error auftaucht.
  13. Jo... Das mit dem Debian Etch ist schon seit Monaten so ein Hick Hack... Wir haben die Testing Version auf unseren internen Servern und sind damit 100%ig zufrieden. Der Grund warum es noch nicht "stable" ist fällt für den internen Gebrauch nicht ins Gewicht. Aber schon seit der 1. Testing Version im November war php5 dabei. Nun ist php 5.2.irgendwas dabei. Auf php6 freue ich mich richtig... zum ersten mal muss man sich über sicherheitsaspekte (Stichwort Register Globals und open Basedir usw.) keine Gedanken mehr machen, da man das nicht mehr einstellen kann. Das Lesen der seitenlangen Changelogs auf php.net hat richtig spaß gemacht.
  14. Wow!! wirklich? Die sollten aber mal Gas geben... So wie es ausschaut kommt in diesem Jahr noch php6!
  15. Scau Dir mal das hier an: PHP: move_uploaded_file - Manual Dein Uploadscript ist nicht gerade "günstig" gemacht...
  16. Na logisch können wir das... Es ist aber immer sehr schwer einem OOP Unerfahrenem die Vorteile von OOP anhand eines Mini Tuts nahezubringen... Dennoch mache ich das mal. Aufgabenstellung: Eine HTML Seite, die via OOP den Benutzer anhand von User_ID oder aber User_Name einwandfrei verfiziert. Benötigte Dinge: 1. eine effinziente Entwicklungsumgebung. Ich nutze hier das Zend Studio, da dort die Voteile sehr gut sichtbar werden. 2. Eine Person, die mir das HTML Layout erstellt 3. Eine Person, die den PHP Code in das HTML Gerüst baut 4. Eine Person, die mir mir die Klasse schreibt. Gerade bei kleinen Projekten wird das alles natürlich eine einzige Person machen, aber wir tun mal so, als ob das was riesiges wird. Als erstes legen wir im TZend Sudio ein neues Projekt an. Wir nennen das mal "forTeesSake" Bitte den Screenshot1 betrachten. Hier der monströse HTML Quellcode:) Der ist NICHT W3C Konform und auch sonst nicht doll! <table width="100%" cellpadding="0" cellspacing="5" border="0"> <tr> <td width="50%" align="right" valign="middle"></td> <td width="50%" align="left" valign="middle"></td> </tr> </table> [/PHP] Wir haben also 2 Spalten. Links soll der Nickname oder Username rein, rechts der reale Name mit Anschrift. Nun kommt der Mensch ins Spiel, der den PHP Code in das HTML Gerüst schreibt. Es wurde sich vorher drauf geeinigt, dass die Klasse, die den realen Namen hier anzeigen soll, ganz schlicht "show_user_data" heissen soll. Diese Klasse wurde bereits angelegt, allerdings hat sie bislang keinen Inhalt. Den erzeugen wir jetzt. Schau mal auf screenshot2... Dort siehst Du die Voteile vom Zend Studio... Es bietet dir innerhalb Deiner eigenen Klasse gleich eine Codevervollständigung an und zeigt Dir, welche Variablen überhaupt zur Verfügung stehen und an welcher Stelle die definiert wurden. Das ist gerade bei großen Projekten sehr hilfreich und spart Zeit... Hier mal der vorläufige Programmcode, der in der Datei "class_show_user_data.class.php" abgelegt ist: [PHP] <? class show_user_data{ /* Erstmal hier die Werte definieren, die ausserhalb der Klasse bekannt sein dürfen Diese Werte bezeichnen wir mit "public" */ public $vorname; public $nachname; public $strasse; public $hausnummer; public $plz; public $ort; public $nickname; // Nun die Methode, die uns den reellen Namen auf den Bildschirm zaubert. public function get_real_user_data($user_id,$user_name){ if($user_id>0){ // Wenn eine User_id an die Methode übergeben wurde, suchen wir anhand der ID, weil das schneller geht. // Eine DB Abfrage spare ich mir... ist ja nur ein Beispiel $this->vorname="Max"; $this->nachname="Mustermann"; $this->strasse="Musterweg"; $this->hausnummer="0815"; $this->plz="88888"; $this->ort="Musterhausen"; $this->nickname="max_0815"; } if($user_id<1 && $user_name<>''){ // Gibt es keine User ID, wird anhand des User_name gesucht. $this->vorname="Max"; $this->nachname="Mustermann"; $this->strasse="Musterweg"; $this->hausnummer="0815"; $this->plz="88888"; $this->ort="Musterhausen"; $this->nickname="max_0815"; } } } ?> So.... nun wird die Klasse genutzt um den PHP Code in das HTML Gerüst einzufügen. Jetzt hier der HTML Quellcode: <? function __autoload($class_name){ // Eine tolle Funktion von PHP die immer automatisch die richtige Klasse lädt. include("./classes/class_".$class_name.".class.php"); } // Nun erstellen wir ein neues Objekt! $benutzer= new show_user_data(); // Obekt ist noch leer... nun füllen wir es mit Leben $benutzer->get_real_user_data('18',''); // Wir haben an dieser Stelle nur die User ID.... die reicht aber! // Objekt ist nun befüllt! ?> <table width="100%" cellpadding="0" cellspacing="5" border="0"> <tr> <td width="50%" align="right" valign="middle"><?= $benutzer->nickname ?></td> <td width="50%" align="left" valign="middle"> <?= $benutzer->vorname ?> <?= $benutzer->nachname ?><br> <?= $benutzer->strasse ?> <?= $benutzer->hausnummer ?><br> <?= $benutzer->plz ?> - <?= $benutzer->ort ?><br> </td> </tr> </table> [/PHP] Somit haben wir einen übersichtlichen Quellcode. <?= ist übrigens die Kurzform von "<? echo " Jetzt werden viele sagen: Boah! Ist das umständlich! Ja... das stimmt.... Nun stelle man sich aber vor, es wäre ein monströses Projekt (Online Shop, Forum usw.)... Da ist man auf Übersichlichkeit angewiesen... Nun stelle man sich weiterhin vor, dass sich irgendwas an den Datenbankstrukturen ändert... Es muss in diesem Fall nur die Klasse, nicht aber unsere Index.php angefasst werden. Das macht es sehr einfach spätere Updates zu machen. Seht in einer Klasse einfach eine Blackbox die ihr mit Werten füllt um ein Ergebnis zu bekommen. Was in der Klasse passiert kann euch "*******egal" sein.
  17. Du willst ein Balkendiargramm mit dem Verlauf eines Kontostandes haben? Warum schiesst Du mit Kanonen auf Spatzen? Mal abgesehen von der DB Abfrage sind dass evtl. 30 Zeilen in stinknormalem PHP um die GD Lib für diese Funktion zu nutzen. Ihr wollt doch alle programmieren, oder? Dann programmiert auch!
  18. Da hst Du Recht... Trennen "auf Teufel komm raus" macht sicherlich keinen Sinn. Ist aber nun auch egal... Dem PieDie wurde geholfen und nun kann er loslegen.
  19. Das ist der einzigst vernünftige und zu 100% korrekte Beitrag zu diesem Thema
  20. Leider muss ich Dir da widersprechen... Recht hast Du lediglich, wenn Du schon beim Programmieren genau weisst, dass das fertige Produkt nie wieder angefasst wird. Musst Du allerdings mit zukünftigen Updates, oder Layoutänderungen usw. rechnen, ist es immer sehr vernünftig Design und Programm voneinander zu trennen. Gerade beim Entwickeln von großen Projekten macht das durchaus Sinn. Bei uns gehen wir da immer so vor. Einer ist zuständig für das Design und Layout, also HTML und die Grafiken. Einer ist zuständig für das Implementieren der nötigen PHP Codes in das HTML Gerüst. Einer ist zuständig für den Entwurf und die Umsetzung der Klassen, Methoden und Funktionen, die aus dem HTML Gerüst angesprochen werden. (Stichwort OOP) Es wird bei uns seit PHP5.1 alles in OOP gemacht, was auch durchaus Sinn macht und ich hier jedem nur ans Herz legen kann. Gerade die Leute aus der JavaScript Ecke werden mir da wohl recht geben Selbst hier in diesem Miniprogramm, was ja in Zukunft durchaus groß werden kann, macht es Sinn das Design vom Programm zu trennen. Wenn das dann so geschehen ist, würde ich mir das gesamte Programm erneut vornehmen und es auf OOP umstellen. Noch ein Tipp von mir: Viele von euch sind wohl gerade in der Ausbildung oder sind zumidest am Lernen von PHP. Schafft euch, um vernünftig entwickeln und debuggen zu können das Zend Studio an. Das ist mit etwas über 300 Euro wirklich sauteuer aber es erleichtert euch die Arbeit. Es gibt im Bereich Entwicklungsumgebungen für PHP viele Produkte, z.T. auch Shareware, allerdings können diese Dinger dem Zend Studio nicht im Geringsten das Wasser reichen. Man kann sich das Ding erstmal herunterladen und im vollen Funktionsumfang für 30 Tage nutzen. Zend.com dort dann aud das Zend Studio gehen.... es lohnt sich.... Alleine der Debugger ist Weltklasse!
  21. ich mach mal ganz langsam.... Du willst also die "bla.php" inkludieren? Dein Aufruf sollte nun so aussehen: (z.B. natürlich nur ) index.php?file=bla&parameter=1 Irgendwo in der Index.php kommt dann der Include auf bla.php Und in dieser bla.php wertest Du die $_GET['parameter'] aus. eine "blö.php" sollte es nicht geben... Nenne sie bitte "bloe.php" ein include("bla.php?parameter=1") ist im Grunde genommen Kokolores und somit Müll.
  22. @PieDie: Ich gehe mal davon aus, dass Du noch an den Anfängen der php Programmierung stehst... Aus diesem Grund sei Dir verziehen. Wenn Du keinerlei Abstraktionsebenen zwischen Deinem Frontend (also dem was der Benutzer in seinem Browser sieht) und Deiner Engine (also dem php Programm, welches dahinter steht) schaffst, ist das ein Angriffspunkt für jeden der Dir Böses will. wenn Du z.B. meinedomain.de?new_link=blub.php schreibst, so kann jeder von aussen Dein Programm beeinflussen. Es sei denn, Du schaffst eine Abstraktionsebene. In diesem Fall prüfst Du also, ob der Inhalt von $_GET['new_link'] überhaupt "blub.php" sein darf. Ferner.... Es mach keinen, aber auch wirkliich gar keinen Sinn, ein Programm zu inkludieren, welches nicht innerhalb der gleichen Domäne läuft. Wenn Du das dennoch brauchst, ist Dein Programm sehr schlecht durchdacht worden und Du solltest es neu schreiben bzw. abändern. Noch ganz wichtig.... Zu inkludierende Programme gehören ALLE in ein Verzeichnis, welches ausserhalb vom DOCUMENT_ROOT liegt... Also in ein Verzeichnis, welches durch den Webbrowser nie direkt erreicht werden kann. Am Wichtigsten.... zu inkludirende Programme MÜSSEN immer mit .php enden. Sollte dennoch mal ein böser Bube an diese Programme herankommen, so bekommt er nur das interpretierte HTML, nicht aber den php Quelltext. Es gibt Leute, die nenne diese Programme gerne .inc oder so.... Das ist aber sehr gefährlich.
  23. ich würde es so machen: Zwar kein neues fenster, aber dennoch ein "leerer Bildschrirm" <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Unbenanntes Dokument</title> </head> <body> <p> <? if(!isset($_POST['Submit'])){ //Formularfeld echo " <form name=form1 method=post action='" .$_SERVER['PHP_SELF'] ."'>\n"; echo "<input class= formular name=suche type=text maxlenght=255 size=20 value='".$_POST['suche']."'>\n"; echo "<input class= formular type=submit name=Submit value='Suchen'>\n"; echo "\n\n</form>"; } //Verbindung herstellen $sqldatabase = mysql_connect("localhost","Andavos","andavos") or die('<b>#'.mysql_errno().':</b> '.mysql_error()); mysql_select_db(benutzer, $sqldatabase) or die('<b>#'.mysql_errno().':</b> '.mysql_error()); //Suche starten, Ergebnise ausgeben $daten = mysql_query('SELECT * FROM `'.benutzer.'` WHERE `Benutzer`=\''.$_POST['suche'].'\'', $sqldatabase); while($row=mysql_fetch_array($daten)){ echo $row['Benutzer']; } ?> </p> </body> </html>[/PHP]
  24. Hi! Du sagst: Tabllen sind out. Das finde ich nun icht, aber egal..... Dein Layout ist eigentlich in ungfähr so, wie man es sich wünscht. Jedoch solltest Du Dir überlegen, die Auwertung (also die Engine, die entscheidet wo, was inkludiert wird) auszulagern. Nehmen wir folgendes an: Du hast eine Seite, die sich, wie ja auch in Deinem Fall, die Inhalte dynamisch zusammensucht. Welche Inhalte gibt es? (Nur Beispiele) 1. Navigation --->nennen wir $navi 2. linker Bereich --->nennen wir $leftFrame 3. mittlerer Hauptbereich --->nennen wir $mainFrame 4. rechte Bereich --->nennen wir $rightFrame 5. footer --->nennen wir $footer Nun wird z.B. diese URL aufgerufen: http://www.meinedomain.de?navi=1&left=4&mid=8&right=11 [/PHP] Zentrale Datei ist Deine Index.php Dort ist fix das Tabellendesign in HTML hinterlegt (Das hast Du ja schon). Nun ist ganz oben in der Index.php ein include auf eine Datei. Wir nennen sie "engine.php" also: [PHP] ... include("engine.php"); ... So könnte die engine.php z.B. aussehen: <? if($_GET['navi']==1){ $navi='navi_1.php'; } if($_GET['left']==4){ $leftFrame='left_4.php'; } if($_GET['mid']==8){ $mainFrame='mid_8.php'; } if($_GET['right']==11){ $rightFrame='right_11.php'; } if(!isset($_GET['footer'])){ $footer='footer.php'; } ?> [/PHP] Nun wird die index.php durchlaufen. an den Stellen wo die einzelnen Blöcke dargestellt werden sollen, kommt dann das hier: [PHP] .... include("navigation/$navi"); .... include("linker_brereich/$leftFrame"); .... include("hauptbereich/$mainFrame"); .... include("rechter_bereich/$rightFrame"); .... include("footer/$footer"); .... Was hast Du nun erreicht? 1. Niemand kann durch das blosse ansehen Deiner URLs erraten, wie der Dateiname lautet. 2. Du hast eine "saubere" index.php, die Du komplett in HTML machen kannst, lediglich die includes müssen halt in php Tags stehen. 3. Du hast eine saubere Verzeichnisstruktur und kannst auch später mal gezielt Änderungen vornehmen. 4. Du kannst jederzeit OHNE viel Aufwand Punkte hinzufügen oder entfernen. 5. Du hast durch die engine.php eine weitere Abstraktionsebene geschaffen, die es einem potentiellen Angreifer etwas schwerer macht. Wenn Du so verfährst kannst Du "register Globals" auch auf "Off" stellen. Die Register Globals sind eines der größten Sicherheitsrisiken. Bei Fragen: Einfach fragen!

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...