• Hallo Zusammen,


    ich bin über die Seite php-kurs.com hierrauf gestoßen. Eine wirklich interessante gut verständliche Seite. Es hapert bei mir nur momentan am Gästebuch, wo einträge in MYSQL gemacht werden sollen. Ich habe stundenlang schon rumexperimentiert, wo der Fehler liegen könnte. Ich bin der Meinung, dass ich die zusammenstellung (also die Reihenfolge) des Codes nicht gut gewählt haben könnte. Ich habe zumindest bemerkt, auch wenn ich einen Gästebucheintrag schreibe, kommt er nicht in die if Anweisung und startet quasi neu. Es folgt also kein Eintrag in MYSQL. Ich hoffe ihr könnt mal einen Blick über den kompletten Code werfen von geastebuch-eintrag.php.



    Code:




    Vielen Dank schonmal!

  • Vorwort: MySQL is überhaupt nicht mein Ding, von daher weiß ich nicht, wie viel Unsinn ich dir jetzt hier erzähle :D
    Ich versuche aber einfach mal mein Bestes :) [Offiziell kann ich es ja schließlich auch xD]

    PHP
    <span class="syntaxdefault">$db_link </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">@</span><span class="syntaxdefault">mysql_connect </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">MYSQL_HOST</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> MYSQL_BENUTZER</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> MYSQL_KENNWORT</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span>


    Meines Wissen nach heißt das doch mysql_connect und nicht @... oder? :/
    (Ich habe auch noch mal Google angeworfen und nichts von einem @ gefunden.. :/ Ansonsten kläre mich bitte auf :D Wie gesagt, soo top ist mein Wissen dort nicht :) )


    Was mir auch noch aufgefallen ist:

    PHP
    <span class="syntaxdefault">$sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" INSERT INTO gaestebuch "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" SET "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxcomment">//$sql .= " id   ='". $_POST['id'] ."', ";<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" name   ='"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'name'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxstring">"', "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" email  ='"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'email'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxstring">"', "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" url    ='"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'url'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxstring">"', "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" datum  ='"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> date</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Y-m-d H:i:s"</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxstring">"', "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" eintrag='"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'eintrag'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxstring">"' "</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span>


    Vielleicht irre ich mich ja komplett, aber sieht das normal nicht eher so aus?

    PHP
    <span class="syntaxdefault">$sql </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"INSERT INTO `gaestebuch`(`id`, `name`, `email`, `url`, `datum`, `eintrag`) <br />        VALUES (NULL, $_POST['name'], $_POST['email'], $_POST['url'], date("</span><span class="syntaxdefault">Y</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">m</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">d H</span><span class="syntaxkeyword">:</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">:</span><span class="syntaxdefault">s</span><span class="syntaxstring">"), $_POST['eintrag'])"</span><span class="syntaxkeyword">; </span><span class="syntaxdefault"></span>

    Ausgehend von dem PHP-Kurs


    hoffe konnte helfen :)
    lg
    Sarkkan


    Edit: Hatte n kleinen Fehler in meinem Code^^ Sry, wurde behoben :D

  • Vielen Dank!


    Aber schau mal hier, da hab ich ja den ganzen Code her, nur weil ich ein newbie bin, weiß ich ja nicht was es so alles gibt und kann mir da auch nur begrenzt helfen. Ich vertraue eigentlich den Codes von <!-- m --><a class="postlink" href="http://www.php-kurs.com/beispiel-gaestebuch-programmieren-in-php-und-mysql.htm">http://www.php-kurs.com/beispiel-gaeste ... -mysql.htm</a><!-- m --> da sie bisher alles richtig in den Browser ausgeworfen haben.

  • PHP
    <span class="syntaxdefault">$sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"INSERT INTO `gaestebuch`(`id`, `name`, `email`, `url`, `datum`, `eintrag`) <br />        VALUES (NULL, $_POST['name'], $_POST['email'], $_POST['url'], "</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">date</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Y-m-d H:i:s"</span><span class="syntaxkeyword">).</span><span class="syntaxstring">", $_POST['eintrag'])"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">  </span>


    Sarkkan hat Recht, es darf nicht "INSERT INTO SET" heißen, sondern obiger Befehl ist richtig.
    Noch was: Lass das exit am Ende des PHP-Teils weg, dadurch wird dein body-, und html-Tag nicht ausgegeben, glaub ich.


    Sarkkan: Das @ sorgt dafür, dass auf keinen Fall eine Fehlermeldung ausgegeben wird und, da bin ich mir aber nicht sicher, auch die Skriptausführung nicht abgebrochen wird.


    DerWaldschrat

  • Zitat von &quot;Sarkkan&quot;
    PHP
    <span class="syntaxdefault">$db_link </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">@</span><span class="syntaxdefault">mysql_connect </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">MYSQL_HOST</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> MYSQL_BENUTZER</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> MYSQL_KENNWORT</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span>


    Meines Wissen nach heißt das doch mysql_connect und nicht @... oder? :/
    (Ich habe auch noch mal Google angeworfen und nichts von einem @ gefunden.. :/ Ansonsten kläre mich bitte auf :D Wie gesagt, soo top ist mein Wissen dort nicht :) )


    Ich glaube mal im PHP-Kurs gelesen zu haben, dass das @ irgendetwas mit Fehlermeldungen zu tun hat. Also mit @ funktioniert es auf jeden Fall, also hat es auch eine dort irgendwie sinnvolle Bedeutung.


    Zitat von &quot;Sarkkan&quot;


    Was mir auch noch aufgefallen ist:

    PHP
    <span class="syntaxdefault">$sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" INSERT INTO gaestebuch "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" SET "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxcomment">//$sql .= " id   ='". $_POST['id'] ."', ";<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" name   ='"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'name'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxstring">"', "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" email  ='"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'email'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxstring">"', "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" url    ='"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'url'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxstring">"', "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" datum  ='"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> date</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Y-m-d H:i:s"</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxstring">"', "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$sql </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" eintrag='"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'eintrag'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxstring">"' "</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span>


    Vielleicht irre ich mich ja komplett, aber sieht das normal nicht eher so aus?

    PHP
    <span class="syntaxdefault">$sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"INSERT INTO `gaestebuch`(`id`, `name`, `email`, `url`, `datum`, `eintrag`) <br />        VALUES (NULL, $_POST['name'], $_POST['email'], $_POST['url'], date("</span><span class="syntaxdefault">Y</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">m</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">d H</span><span class="syntaxkeyword">:</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">:</span><span class="syntaxdefault">s</span><span class="syntaxstring">"), $_POST['eintrag'])"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span>

    Ausgehend von dem PHP-Kurs


    Ist nur eine andere - und vor allem kürzere - Schreibweise, läuft auf das gleiche hinaus. ;)
    Das:

    PHP
    <span class="syntaxdefault">$sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"INSERT INTO `gaestebuch`(`id`, `name`, `email`, `url`, `datum`, `eintrag`) <br />        VALUES (NULL, $_POST['name'], $_POST['email'], $_POST['url'], date("</span><span class="syntaxdefault">Y</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">m</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">d H</span><span class="syntaxkeyword">:</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">:</span><span class="syntaxdefault">s</span><span class="syntaxstring">"), $_POST['eintrag'])"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">  </span>


    ist das gleiche, wie:

    PHP
    <span class="syntaxdefault"><br />$sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" INSERT INTO gaestebuch<br />             SET<br />              id   = '$_POST['id'] ',<br />              name   = '$_POST['name']',<br />              email  = '$_POST['email']',<br />              url    = '$_POST['url']',<br />              datum  = '$date', <br />              eintrag='$_POST['eintrag']' "</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span>
  • Zitat von &quot;DerWaldschrat&quot;

    Sarkkan: Das @ sorgt dafür, dass auf keinen Fall eine Fehlermeldung ausgegeben wird und, da bin ich mir aber nicht sicher, auch die Skriptausführung nicht abgebrochen wird.


    DerWaldschrat


    Sollte man aber drauf verzichten, lieber am Anfang der Datei "error_reporting(0)" setzen, so spart man sich die @ und man hat einen einfachen Weg zu debuggen (Fehler zu finden), indem man die 0 durch E_ALL ersetzt: "error_reporting(E_ALL)", dies zeigt sogar Fehler an die im Normalfall verborgen werden.


    Ein weiterer Vorteil ist das man nicht ewig alle @ raussuchen muss wenn man einen Fehler aufdecken möchte.


    PHP
    <span class="syntaxdefault"><br />$sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"INSERT INTO `gaestebuch`(`id`, `name`, `email`, `url`, `datum`, `eintrag`) <br />        VALUES (NULL, $_POST['name'], $_POST['email'], $_POST['url'], "</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">date</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Y-m-d H:i:s"</span><span class="syntaxkeyword">).</span><span class="syntaxstring">", $_POST['eintrag'])"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">  <br /> </span>


    Ihr müsst den Code mal sauber aufteilen damit ihr seht was wozu gehört, so ist es besser lesbar:


    PHP
    <span class="syntaxdefault"><br />  $sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"<br />    INSERT INTO `gaestebuch` <br />    (<br />      `id`, `name`, `email`, `url`, `datum`, `eintrag`<br />    )  <br />    VALUES <br />    (<br />      NULL, $_POST['name'], $_POST['email'], $_POST['url'], "</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">date</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Y-m-d H:i:s"</span><span class="syntaxkeyword">).</span><span class="syntaxstring">", $_POST['eintrag']<br />    );"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">  <br /> </span>


    Der MySQL Befehl SET ist zwar gut und schön aber die Verwendung ist bei einem neuen Eintrag sinnlos, SET verwendet man bei Änderungen an bereits bestehenden Einträgen:


    Bitte auch am Ende des SQL Befehls das Semikolon ( ; ) nicht vergessen, es gibt zwar keine Fehlermeldung aber es gehört genau wie bei PHP dazu.


    PHP
    <span class="syntaxdefault"><br />  $sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"<br />    UPDATE  `tabellenname` <br />    SET `FELD` =  'AENDERUNG';"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span>


    Bitte hier nachschauen für mehr Infos!

  • Zitat von &quot;fubbi&quot;
    PHP
    <span class="syntaxdefault"><br />$sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"INSERT INTO `gaestebuch`(`id`, `name`, `email`, `url`, `datum`, `eintrag`) <br />        VALUES (NULL, $_POST['name'], $_POST['email'], $_POST['url'], "</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">date</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Y-m-d H:i:s"</span><span class="syntaxkeyword">).</span><span class="syntaxstring">", $_POST['eintrag'])"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">  <br /> </span>


    Ihr müsst den Code mal sauber aufteilen damit ihr seht was wozu gehört, so ist es besser lesbar:


    PHP
    <span class="syntaxdefault"><br />  $sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"<br />    INSERT INTO `gaestebuch` <br />    (<br />      `id`, `name`, `email`, `url`, `datum`, `eintrag`<br />    )  <br />    VALUES <br />    (<br />      NULL, $_POST['name'], $_POST['email'], $_POST['url'], "</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">date</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Y-m-d H:i:s"</span><span class="syntaxkeyword">).</span><span class="syntaxstring">", $_POST['eintrag']<br />    );"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">  <br /> </span>


    Also wir müssen schon mal gar nichts =/
    Und mir persönlich gefällt meine Schreibweise nun mal besser, als diese über etliche Zeilen gehende :/
    (Davon abgesehen, dass ich den Code normal eher so schreibe:

    PHP
    <span class="syntaxdefault">$sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"INSERT INTO `gaestebuch`(`id`, `name`,        `email`,         `url`,          `datum`,                 `eintrag`) <br />        VALUES                  (NULL, $_POST['name'], $_POST['email'], $_POST['url'], "</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">date</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Y-m-d H:i:s"</span><span class="syntaxkeyword">).</span><span class="syntaxstring">", $_POST['eintrag']);"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">   </span>

    (So schreibe ich z.B. bei str_replace auch meine Arrays, wenn ich dort welche verwende.)

  • Entschuldige meine ruppige Ausdrucksweise, es ging ja nicht darum das ihr das machen müsst, ich meinte eher das ihr das so machen müsst damit man genau nachvollziehen kann,


    gerade wenn man noch nicht weiß was, wo, warum steht ist es wichtig alles fein säuberlich aufzureihen damit man genau distanzieren kann was wozu gehört.

  • Wenn man den Code sauber aufteilt, findet man Fehler schneller, da die Zeile im query, wo der Fehler sitzt, bei einer Fehlermeldung mit ausgegeben wird. Da hat mans leichter, wenn man viele statt 2 Zeilen benutzt.


    Wieso ist SET sinnlos, bewirkt doch das selbe wie die andere Schreibweise und ist kürzer?

  • fubbi: Kein Ding, fühlte mich nur irgendwie angegriffen^^ Sry auch von mir :/


    Sören:

    Zitat von &quot;fubbi&quot;

    Der MySQL Befehl SET ist zwar gut und schön aber die Verwendung ist bei einem neuen Eintrag sinnlos, SET verwendet man bei Änderungen an bereits bestehenden Einträgen


    (Wobei ich gerade nur gefunden habe, dass damit z.B. das MySQL Passwort ändern kann^^ Aber ich habe von MySQL ja auch keine Ahnung <.< Sollte ich mal wieder anfangen mit :D )

  • Zitat von &quot;Sören&quot;

    Wieso ist SET sinnlos, bewirkt doch das selbe wie die andere Schreibweise und ist kürzer?


    SET ist nicht für neue EInträge gedacht, dafür gibt es den Aufbau INSERT INTO wohin VALUES was, dies ist der Standardaufbau der genutzt werden sollte, auch schon rein von der Semantik.


    Beispiel Vergleich zu PHP, man kann um von 1 bis 100 zu zählen eine while Schleife benutzen (SET), nutzt aber besser eine for Schleife (VALUES).

  • Zitat von &quot;Sören&quot;

    Na gut, einverstanden. Meine Datenbank(-en) hat aber längst nicht so viele Elemente.


    Darum geht es ja wie gesagt auch nicht, natürlich kannst du auch SET nehmen, aber in bestimmten Fällen wirst du auf Probleme stoßen, das ist wie eine Sprache, du kannst Englisch reden, dabei die falschen WÖrter nutzen, dein Gegenüber versteht dich zwar, aber richtig ist es nicht.

  • Zitat von &quot;Sören&quot;

    ist das gleiche, wie:

    Code
    <span class="syntaxdefault">ALLES AUSWÄHLEN<br /><br />$sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">" INSERT INTO gaestebuch<br />             SET /* nicht dafür gedacht - VALUE besser */<br />              id   = '$_POST['id'] ',<br />              name   = '$_POST['name']',<br />              email  = '$_POST['email']',<br />              url    = '$_POST['url']',<br />              datum  = '$date', <br />              eintrag='$_POST['eintrag']' "</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span>


    SET wird verwendet um Variablen zu überschreiben



    undhier noch


    Gruß
    peter

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!