jensM: eintrag in db klappt nicht

hallo und danke fuers lesen..
ich stehe grad ein bisschen auf dem schlauch.
ich will in meine datenbank die eintraege name + nachname
schreiben (db und entsprechende tabelle existieren)
aber irgendwie bewirkt mein php skript genau garnichts.
hier ist der code:

if ($_POST['submit']) {
$db = mysql_connect("127.0.0.1", "...", "...");
mysql_select_db("namederdb",$db);
$sql = "INSERT INTO nameDerTabelle (name,surname) VALUES ('{$_POST['name']}','{$_POST['surname']}')";
$result = mysql_query($sql,$db);
echo "Ihre Daten wurden abgeschickt! Vielen Dank!<br><br>";
}
else {
?>

<form method="post" action="namevondieserdatei.php">
<li>Name<br><input name="name" type="text" size="35" value="">
</li>
<li>Surname<br><input name="surname" type="text" size="35" value="">

.. in dem input field wuerde ich unter value="" den jeweilig eingegebenen wert gerne wiedergeben. wie wuerde der code dafuer aussehen? value="?? $_POST ??"
danke..
jens

  1. Halihallo jensM

    hallo und danke fuers lesen..

    jetzt schon? - Lass mich doch erst mal fertig lesen! ;-)

    ich will in meine datenbank die eintraege name + nachname
    schreiben (db und entsprechende tabelle existieren)
    aber irgendwie bewirkt mein php skript genau garnichts.

    a) wo ist die Fehlerbehandlung, falls ein Query eben nicht wie erwartet korrekt ist,
       bzw. die DB mal down ist, oder, oder? - Fehlerbehandlung implementieren!
    b) wo sind die Debugausgaben, um nachzusehen, was du der Datenbank wirklich übergiebst?

    .. in dem input field wuerde ich unter value="" den jeweilig eingegebenen wert gerne wiedergeben. wie wuerde der code dafuer aussehen? value="?? $_POST ??"

    Entweder die ganze Ausgabe über echo innerhalb <? ... ?>, oder einen <? ... ?> Block
    gleich zwischen (value="...") die Anführungszeichen.

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
  2. Hallo jens,

    if ($_POST['submit']) {

    nur zur Vorsorge: du weißt, dass der Wert des submit-Buttons nicht mitgesendet wird, wenn das Formular durch drücken der Enter-Taste abgesendet wird?

    $sql = "INSERT INTO nameDerTabelle (name,surname) VALUES ('{$_POST['name']}','{$_POST['surname']}')";

    was steht nach dieser Zeile in $sql drin?

    $result = mysql_query($sql,$db);

    was sagt mysql_error()?

    .. in dem input field wuerde ich unter value="" den jeweilig eingegebenen wert gerne wiedergeben. wie wuerde der code dafuer aussehen? value="?? $_POST ??"

    meinst du sowas wie ... value="<?php echo htmlentities($_POST['name']); ">...?

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  3. aber irgendwie bewirkt mein php skript genau garnichts.

    Der Code sieht funktionsmäßig korrekt aus, aber..

    if ($_POST['submit']) {
    $db = mysql_connect("127.0.0.1", "...", "...");

    Woher weißt Du, daß die Verbindung steht, wenn Du keine Fehlerprüfung machst?

    mysql_select_db("namederdb",$db);

    Woher weißt Du, daß die Verbindung steht, wenn Du keine Fehlerprüfung machst?

    $sql = "INSERT INTO nameDerTabelle (name,surname) VALUES ('{$_POST['name']}','{$_POST['surname']}')";

    Tu Dir selbst einen Gefallen und benutze Daten, die von "draußen" kommen, NIE NIE NIE NIE NIE NIE ohne Netz und doppelten Boden.

    In diesem Fall ist es noch nicht so schlimm, aber wenn Du zum Beispiel in einer Passwortabfrage den Nutzern erlaubst, Anführungszeichen einzugeben, können sie nach den Anführungszeichen fröhlich irgendwelchen SQL-Code à la "' or 1=1;" eingeben und somit die Passwortprüfung umgehen (setze das Beispiel in Deinen obigen SQL-Befehl ein um zu sehen, was es ungefähr funktioniert). Benutze also _immer_ mysql_escape_string().
    Für ein verwandtes Problem mit HTML, CSS und Javascript: htmlentities(), siehe unten.

    $result = mysql_query($sql,$db);
    echo "Ihre Daten wurden abgeschickt! Vielen Dank!<br><br>";

    Woher weißt Du, daß die Daten eingetragen wurden, wenn Du keine Fehlerprüfung machst?

    .. in dem input field wuerde ich unter value="" den jeweilig eingegebenen wert gerne wiedergeben. wie wuerde der code dafuer aussehen? value="?? $_POST ??"

    <form method="post" action="namevondieserdatei.php">

    echo "<form method="post" action="".$_SERVER["REQUEST_URI"]"">";

    <li>Name<br><input name="name" type="text" size="35" value="">

    echo "<li>Name<br><input name="name" type="text" size="35" value="".htmlentities($_POST["name"])."">";

    Gruß,
      soenk.e

    1. Hallo Sönke,

      <form method="post" action="namevondieserdatei.php">

      echo "<form method="post" action="".$_SERVER["REQUEST_URI"]"">";

      Wieso doppelte Anführungszeichen? Gerade beim Ausgeben von HTML-Code, in welchem attributbegrenzende doppelte Anführungszeichen vorkommen, bieten sich einfache an.

      Generell: Wieso werden oft dutzende Zeilen HTML-Code in PHP mit zehn echo-/print-Befehlen mit doppelten Anführungszeichen und \n am Ende gelöst? Ich habe schon hundertzeilige komplette HTML-Dokumente in hunderten einzelnen print-Anweisungen gesehen, von Hand Zeile für Zeile maskiert. Wieso nicht einfach ein Befehl mit einfachen Anführungszeichen oder noch besser »?>HTML-Code<?php«? PHP ist ein doch ein Präprozessor, sodass HTML-Code auch als solcher notiert werden kann und in der Regel kein PHP-String sein muss. Ein <?php echo(...); ?> oder <?php=... ?> lässt sich viel einfacher einstreuen als den kompletten Code zu maskieren und als String auszugeben.

      Kommt das daher, dass man print "<murks murks="murks">" usw. von Perl gewohnt ist? Aber selbst in Perl gibt es diese heredoc-Syntax...

      echo "<li>Name<br><input name="name" type="text" size="35" value="".htmlentities($_POST["name"])."">";

      Das ist mir immer wieder ein Rätsel, wieso manche es sich schwerer machen als nötig. Die Editierbarkeit dieses Codes ist doch vergleichsweise grausig.

      Grüße,
      Mathias

      --
      ss:¬ zu:¬ ls:¬ fo:¬ de:¬ va:¬ ch:¬ sh:¬ n4:¬ rl:¬ br:¬ js:¬ ie:¬ fl:¬ mo:¬
      Auflösung != Desktopgrösse != Browserfenstergrösse != Anzeigebereich. [psf 3.7]
  4. Hallo Jens,

    siehe Sönkes Posting...

    Und dann gewöhn Dir doch einfach an, während der Entwicklung von MySQL-APIs auch mal mysql_error() abzufragen. Das muss  an ja nicht mitten im Formular ausgeben sondern kann es erstmal in eine Variable übernehmen und dann hübsch als Statuszeile in Gelb mit rotem Hintergrund und Schleifchen ... *ggg*

    Sollte nämlich Dein User, den Du für die Connetction angeben musst, keinen Schreibzugriff auf den Table haben, gibts absolut KEINE weiteren Fehlererscheinungen, außer dass in mysql_error() ausführlich drinsteht, was Sache ist.

    Grüße

    Chris ()