Bekomme keine Daten in DB

willytyp

Mitglied
Hallo,
mich quält ein Riesenproblem:
ich hab' mit MySQL eine Datenbank angelegt (siehe Anhang)

Nun möchte ich Daten in diese DB speichern, was mir einfach nicht gelingen will.
Zum besseren Verständnis hier mal die beiden Quellcodes:
Code:
<html>
<head>

<body>
<p>Geben Sie bitte einen vollst&auml;ndigen Datensatz ein<br />
und senden Sie das Formular ab:</p>

<form action = "gesendet.php" method = "post">
   <p><input name="name" /> name</p>
   <p><input name="email" /> email</p>
   <p><input name="kommentar" /> kommentar</p>  
   <p><input type="submit" name="gesendet" />
   <input type="reset" /></p>
</form>

<p>Alle Datens&auml;tze <a href="db_tabelle.php">anzeigen</a></p>
</body>
</html>

und hier die zweite:
Code:
<html
<head>

<body>
<?php
   if (isset($_POST["gesendet"]))
   {
      $con = mysqli_connect("","root");
      mysqli_select_db($con, "gaestebuch");        /*Datenbank*/     
     
        $client_ip = $_SERVER['REMOTE_ADDR'];    /*IP ermitteln*/
        echo $client_ip;                        /*nur zum Testen*/
       
      $sql = "insert gaeste"                     /*Tabelle*/
        . "(name,email,ip,kommentar) values "    /*Spalte&uuml;berschriften*/       
        . "('" . $_POST["name"] . "', "            /*Zeichenkette mit Anfangsklammer*/       
        . "'" . $_POST["email"] . ", "            /*Zeichenkette*/
        . "'" . $_POST[$client_ip] . ", "        /*funktioniert nicht*/
        . "'" . $_POST["kommentar"] . "')";        /*Zeichenkette mit Endklammer*/

      mysqli_query($con, $sql);

      $num = mysqli_affected_rows($con);
      if ($num>0)     
      {
          echo $num;                    /*nur zum Testen*/ 
         echo "<p><font color='#00aa00'>";
         echo "Es wurde 1 Datensatz hinzugefügt";
         echo "</font></p>";
      }
      else
      {
          echo $num;                    /*nur zum Testen- hier wird -1 angezeigt*/
         echo "<p><font color='#ff0000'>";
         echo "Es ist ein Fehler aufgetreten, ";
         echo "es wurde kein Datensatz hinzugefügt";
         echo "</font></p>";
      }

      mysqli_close($con);
   }
?>

</head>
</body>
</html>

Ich bekomme stets Fehlermeldungen und Programmabsturz auf der zweiten Seite.
So hat z.B. die Variable $num den Wert -1 obwohl die DB leer ist. Das führt natürlich
zu einer Fehlermeldung. Obwohl die Zeile
$num = mysqli_affected_rows($con);
die Anzahl der Einträge liefern soll.

Die Zeile
$client_ip = $_SERVER['REMOTE_ADDR'];
soll die IP des Absenders liefern. Pustekuchen, wieder Fehlermeldung.
Natürlich weiß ich, das im Moment, beim Entwickeln stets die IP meines Rooters zurückgegeben
wird. Auch ein Flop.
Noch eine Anmerkung:
ich komme aus der VBA Programmierung. Dort kann man Quellcode Step by Step durchlaufen und den
Wert der Variablen prüfen. Damit wird die Fehlersuche um vieles einfacher. Das vermisse ich bei PHP.
Mein schlaues "Fachbuch" sagt, das es so etwas hier nicht gibt.

Freund, mein Frust kennt mittlerweile kein Limit mehr.

Ich hoffe sehr, das mir eine(r) von euch helfen kann.
Ich nehme fast an, das ihr euch an den Kopf fasst über die/den Fehler die ich unwissentlich
eingebaut habe.

LG
willytyp
 

Anhänge

  • Datenbank.jpeg
    Datenbank.jpeg
    155,1 KB · Aufrufe: 10
Hallo,

zuerst einige Anmerkungen zu deinem Code im Allgemeinen:
1. Du solltest niemals die Variable $_POST, $_GET oder allgemein Variablen ungeprüft in einem SQL-Statement verwenden. Das öffnet Tür und Tor für jeden Angreifer
2. Du verwendest keine Art von Fehlerbehandlung
3. Die offizielle Dokumentation von PHP hätte dir das Problem bereits beantwortet

Nun zu deinem Problem:
Die Funktion hat verschiedene Rückgabewerte. (false bedeutet in dem Fall, dass dein Statement nicht korrekt ausgeführt werden konnte; Quelle: http://php.net/mysqli_query)
Daher würde ich an dieser Stelle folgende Ergänzung empfehlen:
PHP:
$query_result = mysqli_query($con, $sql);
if(false === $query_result) {
    // Fehlerbehandlung
}

Fehlerbehandlung dabei wäre in diesem Fall zum Beispiel (Quelle: http://php.net/mysqli_error) (Nachstehenden Code nur beim Testen verwenden; keinesfalls produktiv!!!):
PHP:
var_dump(mysqli_error ($con));

An dieser Stelle würdest du feststellen, dass die Feldanzahl in deinem SQL-Statement nicht überein stimmt, bzw. die Syntax von deinem SQL fehlerhaft ist. Daraufhin wäre es hilfreich, sich das resultierende SQL-Statement auszugeben. Betrachtest du dann dein Statement (nur ein erster Blick von mir), wird dir auffallen, dass dir mindestens zwei einfache Anführungszeichen fehlen.

Dann zu deinem nächsten Problem:
PHP:
$_POST[$client_ip]

Mit $_POST greifst du auf Daten zu, die per Formular geschickt worden sind. Möchtest du auf eine einfache Variable zugreifen, kannst du diese einfach verwenden.
Das heißt konkret $_POST[$client_id] einfach durch $client_id ersetzen.

Wenn noch fragen offen sind, einfach nochmal nachfragen

VG
Nino
 
Hallo Nino,
zunächst einmal vielen Dank für deine Unterstützung.
Die Tipps waren gut.
Allerdings ist mir etwas unklar, du schreibst:
Die offizielle Dokumentation von PHP hätte dir das Problem bereits beantwortet
Damit kann ich leider nichts anfangen. Was ist die offizielle Dokumentation von PHP,
wo finde ich sie und wie wende ich sie an?
Oder begehe ich bei Bezeichnung, offizielle Dokumentation von PHP, einen
Denkfehler?

LG
Wilfried
 
Hallo Wilfried,

ich muss zugeben, deine Frage hat mich jetzt fast schon ein wenig geschockt. Aber ich gehe davon aus, du steht noch relativ am Anfang deiner Karriere als Softwareentwickler.

Das wichtigste für jede Sprache mit der du dich auseinander setzen möchtest ist die Dokumentation.
Speziell bei der Dokumentation von z. B. PHP findest du unter anderem eine Beschreibung aller Funktionen inkl. deren Parameter und Rückgabewerte. Bei vielen sind auch noch Beispiele zur Verwendung dabei.

Ein Tipp noch zum Suchen in der Doku von PHP

mit php.net/funktionsname (z. B. http://php.net/echo) kommst du direkt auf die Erklärung der entsprechenden Funktion.
 
Hallo Nino,
Hallo SpiceLab,

zunächst ein Dankeschön für die Hinweise.
Nino, das du über meine Frage geschockt warst, habe ich mir fast gedacht. Sorry
Ja, ich bin Anfänger was die Web-Seiten Erstellung angeht. Ich bin Quereinsteiger. Ich komme aus der VBA Excel/Access Programmierung.
Da bin ich recht gut. Das mache ich aber auch schon über 10 Jahre.
Zur Web-Seiten Erstellung bin ich durch unseren Kleingartenverein gekommen. Die wollten unbedingt wieder eine Web-Seite haben.
Die habe ich mit dem Baukastensystem von 1&1 in einer Woche fertig gehabt. Sieht schön aus.
Dann habe ich allerdings festgestellt das ich mehr wollte als das Baukastensystem her gab. Da weckte mich das Jagtfieber.
Also, das Programmieren ist mir nicht fremd, allerdings ist die Syntax umständlicher, aber ich schaffe das schon.
So, nun wisst ihr warum ich hier bin.

LG
Wilfried
 
Es ist noch kein Meister vom Himmel gefallen
Und sich wegen dem "Jagdfieber" das Ganze im Selbststudium beizubringen ist schön :)

Gerade bei PHP muss aber leider gesagt werden, dass (sehr) viel Müll im Internet zu finden ist. Da man das gerade eben als Anfänger noch nicht wirklich erkennen kann, was gut ist und was nicht, kann der Weg etwas beschwerlich sein. ... Was ich damit konkret sagen will, besser nichts einfach so von irgendwelchen Internetseiten kopieren, sondern immer kritisch hinterfragen was das eigentlich tut.
...und/oder sich ab und zu, in einem Forum wie dem hier, Kritik zu seinem Code holen :D

Damit es nicht untergeht:
Du solltest niemals die Variable $_POST, $_GET oder allgemein Variablen ungeprüft in einem SQL-Statement verwenden. Das öffnet Tür und Tor für jeden Angreifer
Das ist wichtig. Mit SQL-Injections kann man relativ einfach ziemlich viel Schaden anrichten...
Siehe Prepared Statements (mit Mysqli) oder real_escape_string.

Auch abseits von SQL müssen Eingaben geprüft werden. Eines der potentiellen Probleme ist XSS, bei dem ein Nutzer selbstgeschriebenen Javascript-Code anderen Nutzern unterschieben kann.
https://de.wikipedia.org/wiki/Cross-Site-Scripting#Funktionsweise
http://php.net/manual/de/function.htmlspecialchars.php
http://php.net/manual/de/function.strip-tags.php
 
Hallo Sheel,
vielen Dank für deinen Zuspruch.
So ungefähr habe ich mir meine Zukunft vorgestellt.
Ich bin nicht zu stolz zu fragen und Kritik, wenn sie dann angebracht ist, kann ich gut vertragen.

LG
Wilfried
 
Zurück