[gelöst] Schreiben in MySQL DB funktioniert nicht

Hallo Community,

ich bastel heute schon sehr (zu) lange an einem Formular, mit dem Werte/Texte in eine MySql DB eingetragen werden sollen. Nur irgendwie kommt der Inhalt der TextBoxen nicht bei der DB an.
Die DB Verbindung müsste eigentlich funktioniert weil erstens keine Meldung kommt und zweitens ich noch eine Seite habe, wo die Einträge aus der DB gelesen und angezeigt werden -> werden sie auch.

Also muss es an dem “eintrag” Code liegen. Könntet ihr euch den desswegen vieleicht mal anschauen und mir weiterhelfen?

[code]<!-ErgebnisEintragen.php->

<?PHP if ($button=="OK") { include("DB.php"); mysql_query("INSERT INTO ergebnisse(gegner,spiel,mod,ergebnis,punkte)VALUES('$gegner','$spiel','$mod','$ergebnis','$punkte')"); mysql_close(); ?>

Die Daten wurden eingetragen

neuer Eintrag

zur Übersicht

<?PHP } else { ?>




<?PHP }; ?> [/code] Die Meldung, dass die Daten eingetragen wurden kommt auch nicht.

Gruß!
Maddin

Lerne bitte Debugging-Grundlagen.

peterkropff.de/tutorials/php_feh … fehler.htm

auf den ersten blick sieht man mal folgendes:

<?PHP --sollte klein geschreiben sein <?php }; ?> --nach einer klammer darf kein semikolon sein

} ?>

ausserdem scheint dein code anfällig für SQL-Injections.

und “register_globals” ist vielleicht auch noch ein gutes Stichwort für die Fehlersuche.

Danke für die schnellen Antworten.
Ich hab mit der SuFu jetzt mal nach diesem “register_globals” gesucht und habe dieses Thema dazu gefunden: http://forum.bplaced.net/viewtopic.php?f=10&t=11648&start=0&hilit=register_globals

Liegt es also daran, dass register_globals auf OFF gestellt ist? Ich konnte in dem Thema dort jetzt nicht auf die Schnelle die Lösung für mein Problem finden, welchen Code ich bei mir jetzt WIE ändern muss. Vieleicht kann es mir ja jemand nochmal kurz sagen oder ich muss das ganze Thema eben später nochmal komplett durchlesen. :neutral_face:

Stichwort $_POST

http://php.net/manual/de/security.globals.php (1. treffer bei DER KRAKE)
kurz zusammengefasst:
alle variablen die über get/post hereinkommen sollen, müssen selbst in eine variable gespeichert werden. (infos zu diesem thema gibts im inet haufenweise)
also musst du soetwas in deinen code einfügen.

<? $gegner = $_POST["gegner"]; $spiel = $_POST["spiel"]; usw... ?>

[quote=“yox”]}; ?> --nach einer klammer darf kein semikolon sein
} ?>
[/quote]

Aber natürlich darf hier ein Semikolon stehen. :wink:
Es ist nur absolut unnötig und unüblich, aber möglich.

(Also wenn sich das Semikolon auf die Klammer bezieht)

Grüße, xcube

Hab das mal überall gemacht und jetzt wird schonmal das IF-Ereignis ausgelöst (“Erfolgreich gesendet…”). Aber die Daten sind nicht in der DB eingetragen worden -.-

Hier mal mein neuer Code:

[code]<!-ErgebnisEintragen.php->

<?php $button = $_POST['button']; if ($button=="OK") { include("DB.php"); $gegner = $_POST['gegner']; $spiel = $_POST['spiel']; $mod = $_POST['mod']; $ergebnis = $_POST['ergebnis']; $punkte = $_POST['punkte']; mysql_query("INSERT INTO ergebnisse(gegner,spiel,mod,ergebnis,punkte)VALUES('$gegner','$spiel','$mod','$ergebnis','$punkte')"); mysql_close(); ?>

Die Daten wurden eingetragen

neuer Eintrag

zur Übersicht

<?php } else { ?>




<?php } ?> [/code]

PS: Das Semikolon hatte ich nur zu Testzwecken geschrieben. Hab gedacht, dass es dahin gehören könnte. So wie das “End If” in VB ^^

viewtopic.php?p=273788#p273788

Hab das Problem endlich gefunden! :smiley: :smiley: :smiley:
Es lag nich an meinem Code sondern an MySQL oder PHP oder was weis ich.
Auf jeden Fall kam irgendwas nicht mit dem Text “mod” klar. :astonished:
hab jetzt alle “mod” in “modus” umgeschriebn und siehe da, es funtzt!

Na ja, das lag schon an deinem Code …

mod ist ein reserviertes Wort, dev.mysql.com/doc/refman/5.1/en/ … words.html

Das sagste mir jetzt?
Ich hatte schon gedacht, dass es irgendwelche reservierten Wörter gibt, wusste aber nicht dass “mod” dazu gehört

Bei solchen Sachen lohnt es sich die mysql_error() Funktion zu nutzen.

Oder was ich auch oft mache ist einfach die Query nehmen, die Variablen mit irgendwelchen Werten ersetzen und ausführen - da sieht man am besten warum es nicht klappt.

Und das wäre eine Möglichkeit gegen Mysql-Injections: filter_input()