Mysql Query Fehler beim Formular senden, aber wo?

Hallo Leute, mal wieder ist es soweit, dass ich Anfänger einfach nicht mehr weiter weiß… :confused:
Ich saß bereits schon wieder 3 Tage daran herauszufinden wo der Fehler liegt und habe echt sehr viel ausprobiert…
Also es geht um ein Html Formular wo ein User Daten angibt, und diese dann in meiner Datenbank gespeichert werden sollen, es ist ein recht kurzes Formular, dafür habe ich das so gut es ging gekürzt…
Also ich bekomme keinen Fehler, aber das „if (isset…)“ liefert anscheinend direkt false zurück, weswegen die Daten nicht abgesendet werden, logischerweise möchte ich, dass die Daten abgesendet werden sobald man auf den Submit Button klickt.
Die Namen und Values habe ich abgeändert, also nicht erschrecken, dass die Namen sich so grauenhaft wiederholen… :eek:

Und wo wir schonmal dabei sind, habs bis jetzt nicht geschafft das Formular mit „real_string“ zu versehen, wenn da jemand n bsp hat wäre auch sehr nett o_O

Seltsam ist auch, dass es funktioniert hat als ich komplett ohne „If“ dann „mysql_query“ gearbeitet habe, wobei das Formular dann ja leere Werte übermittelt weils gleich durchrattert, bevor irgendwas eingegeben wurde, also das Formular, macht in der Datenbank so jetzt: NICHTS, leider …

[PHP]

<?php $verbindung = mysql_connect("HOST", "NAME" , "PW") or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); mysql_select_db("NAME") or die ("Datenbank konnte nicht ausgewählt werden"); ?> TITEL #menu { font-size:14px; position: absolute; float: left;.... .... ..... ..... USW. z-index:500; } #wertbox { w..... .... ..... USW. ......enter; padding:10px; } <?php echo ""; echo "
"; echo ""; echo "Kategorie Wählen"; echo "1"; echo "2"; echo "3"; echo "4"; echo "5"; echo "6"; echo ""; echo " "; $category = $_POST["category"]; if ( $category == "1" ) { .......... } else if ( $category == "2" ) { echo "
"; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; //ZEIT WIRD NICHT ANGEZEIGT #$datum = date("j.n.Y"); #$zeit = date("G:i"); $datum = date("Y-m-d H:i:s"); //ZEIT WIRD NICHT ANGEZEIGT echo "
"; echo "

ABC ÜBERSCHRIFT

"; echo "
"; echo "abc :
"; echo "
"; echo ""; echo "
"; echo "
"; echo "
"; echo "

TEXT

"; echo "
"; echo "text : "; echo ""; echo "
"; echo ""; echo "Wählen"; echo "1"; echo "2"; echo "3"; echo "a"; echo "b"; echo "c"; echo ""; echo "
"; echo "
"; echo "
"; echo "

Kategorie

"; echo "
"; echo "Wähle eine Kategorie : "; echo ""; echo "
"; echo ""; echo "Kategorie Wählen"; echo "1"; echo "2"; echo "3"; echo "4"; echo "5"; echo "6"; echo ""; echo "
"; echo "
"; echo "
"; echo "

Kategorie

"; echo "
"; echo "gib ... an : "; echo ""; echo "
"; echo ""; echo "Wählen"; echo "1"; echo "2"; echo "3"; echo "4"; echo "5"; echo "6"; echo "7"; echo "8"; echo "9"; echo "/"; echo "
"; echo "
"; echo "
"; echo "

blablabla

"; echo "
"; echo "Wähle die Anzahl der blablabla : "; echo ""; echo "
"; echo ""; echo "Wählen"; echo "0"; echo "1"; echo "2"; echo "3"; echo "4"; echo ""; echo "
"; echo "

"; echo ""; echo "
"; if ( isset($_POST["SUBMIT"]) && $_POST["SUBMIT BUTTON"] == "text" && !empty($_POST["blablabla"]) && !empty($_POST["abcdefghi"]) ) { $InsertDataSQL = "INSERT INTO `tabelle` (`1`, `.........`) VALUES ('$_POST[axyz]', ........)" mysql_query($InsertDataSQL) or die("MySQL-Error : " . mysql_error()); # } #else #{ echo "klappt ned";} } else if ( $category == "yzx" ) { ..... .... ...HTML CODE BLABLA .... ... ..
[/PHP]

Ähm, was soll denn diese echo-Orgie??? Wieso gibst du massenhaft HTML-Code per echo aus???

Richtig debuggen

  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set(‚display_errors‘, true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (…not a valid MySQL result resource…): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

Das mit dem Echo erschien mir im Quelltext relativ übersichtlich, im Gegensatz zu einem einzigen Echo mit riesigem Inhalt…
Also mit error_reporting(-1); und ini_set(display_errors) zeig er direkt an „Mysql Query was empty“, demnach sind die Werte leer, was auch logisch ist wenn er direkt das Script durchgeht, weil ja noch nichts eingetragen ist.

Wenn ich dann auf Submit klicke, sendet das Script natürlich nichts ab, und zeigt mir nun an "Notice: Undefined index: category in /PFAD/…/…/ on line 196"
Ich verstehe nicht wie es sein kann, dass „category“ undefined sein soll, würde „category“ undefiniert sein, dann würde ich doch garnicht zum weiteren Formular kommen … Weil dieses durch eine If Abfrage erst erscheint, und zwar "If ( $category == …) wobei $category natürlich die Variable für „$_POST[„category“]“ darstellt…
In PhpMyAdmin hatte ich auch schon den SQL Teil getestet, Fazit: Dieser an sich ist nicht falsch, funktionierte einwandfrei…

Ähmmmm

Überprüfe mit isset, ob eine Variable gesetzt ist. Eine Ausgabe des Post-Arrays mir var_dump liefert dir ebenfalls Informationen

Irgendwie finde ich dein Script sehr unübersichtlich. Das Einrücken wurde vernachlässigt, tonnenweise echo’s, mal hier und mal da PHP-Blöcke, CSS nicht komplett ausgelagert. Ich empfehle dir dringends, zuerst einmal eine Struktur in das Script zu bekommen, das erleichtert die Fehlersuche ungemein.

Außerdem macht es wenig Sinn, irgendeine Fehlermeldung zu posten, wenn du ein „kastriertes“ Script postest, denn dann stimmen die Zeilennummern nicht mehr

Das hast du natürlich Recht, nicht bedacht, hier ist es Zeile 82., also: „$category = $_POST[„category“];“
Wobei ich nicht glaube, dass das „der“ Fehler ist, weil die Variable zum absenden eh keine Rolle spielt…
Ich dachte ich habe vllt einen einfachen, grundlegenden Fehler bei Zeile 269:
„if ( isset($_POST[„SUBMIT“]) && $_POST[„SUBMIT BUTTON“] == „text“ && empty($_POST[„blablabla“]) && empty($_POST[„abcdefghi“]) ) { …}“

Edit: Bzw. ist der Fehler nicht schon auf die Zeile eingegrenzt, durch die Tatsache, dass die mysql_query ohne das „if (isset)“ funktioniert?

Nochmal:

Ich empfehle dir dringends, zuerst einmal eine Struktur in das Script zu bekommen, das erleichtert die Fehlersuche ungemein.

Wie bdt600 schon schrieb wirst du mit einer besseren Struktur leichter Fehler finden.

Bei diesen ganzen Echo’s würde ich die echo’s weg nehmen und einfach immer php blöcker erstellen, also wenn PHP Code vorkommt mit <?php ... ?> öffnen und schließen.

Außerdem ist es zur Zeit unmöglich dein Script zu debuggen, jedenfalls für uns. So wie ich das gesehen habe, haben ein select feld und ein inputfeld den gleichen Namen. Und die ganzen Submit Namen die in deiner If sind, kommen gar nicht drin vor.

Du hattest zwar geschrieben, dass du die Namen geändert hast, aber so bringt es leider nichts.

Natürlich hast du da Recht, wenn ich dieses Thema als Aussenstehender betrachte denke ich auch nur „Wirrwarr“ und, dass die Namen großteils garnicht vorkommen, es sei ein Wunder, dass überhaupt irgendetwas dort funktioniert :smiley: … Das ist für mich immer ein Problem, denn ich lege viel zu ungerne mein gesamtes Script mit allen Id’s und am besten noch Url’s und Datenbank Verbindungen sowie Login Datenbankbezeichnungen für jedermann im Netz offen… Entschuldigt meine übermäßige möchtegern Sicherheit bitte :confused:.
Wie man sieht bin ich Anfänger, und mir haben die Tipps von bdt600 SEHR geholfen! Denn ich habe den Fehler, der mich so lange plagte nun letzten Endes gefunden. Der Fehler bestand ganz einfach darin, dass die If Abfragen ineinander verschachtelt waren, das heißt, während die Eine noch nicht einmal einen Wert geliefert hat, wird die Andere schon in Abhängigkeit zum nicht vorhandenen Wert ausgeführt.
Funktioniert nun Alles einwandfrei, mein Projekt neigt sich dem Ende, oder eher „Anfang“ zu, denn wenn es „fertig“ ist, gilt es, das Vorhandene Script stets expandieren zu lassen und zu perfektionieren.
EDIT: Ohne diesen Thread und eure Hilfe, hätte ich noch immer, wenn ich über das Wort „Debugging“ stolperte, den Gedanken „Debugging? Was ist das? Kann man das essen? Nein? Ok dann ist es unwichtig!“ Hehe

Danke euch! :eek:

Hey, das freut mich das du den Fehler nun alleine gefunden hast. Und zu der anderen Geschichte, Login Daten braucht du natürlich nicht posten von für DB Verbindung oder so.

Du kannst zwar auch gerne alles ändern, aber dann merke dir das nächste mal, dass man es auch logisch ändern muss. Am besten geht das denn mit „Suchen & Ersetzen“ damit könntest du den Namen eines Formulars direkt ändern und würdest auch die Variablen berücksichtigen etc.