Herr_der_Ringe Geschrieben 13. Juni 2005 Teilen Geschrieben 13. Juni 2005 Hallo. Ich bekomme beim ausführen des folgenden Codes eine Fehlermeldung. Einen Parse-Error. Die betroffene Zeile markiere ich fett. PS: Dieser Abschnitt ist einem PHP-Buch entnommen. Dort wurde es genauso gemacht!! <html> <body> <?php error_reporting(E_ALL); /************************************************************************************************** ********************* Uebergebene Variablen ********************* **************************************************************************************************/ $test_id = $_POST['test_id']; $Auto_Testfall_ID = strip_tags(trim($_POST['neu_Auto_Testfall_ID'])); $GV_Funktion_ID = strip_tags(trim($_POST['neu_GV_Funktion_ID'])); $Funktionsbeschreibung = strip_tags(trim($_POST['neu_Funktionsbeschreibung'])); $Testdatum = $_POST['neu_jahr']."-".$_POST['neu_monat']."-".$_POST['neu_tag']; $Beschreibung = strip_tags(trim($_POST['neu_Beschreibung'])); $Vorraussetzung = strip_tags(trim($_POST['neu_Vorraussetzung'])); $Sollergebnis = strip_tags(trim($_POST['neu_Sollergebnis'])); $Verweis = strip_tags(trim($_POST['neu_Verweis'])); $Reihenfolge = strip_tags(trim($_POST['neu_Reihenfolge'])); if($Auto_Testfall_ID != "" && $GV_Funktion_ID != "" && $Funktionsbeschreibung != "" && $Testdatum != "" && $Beschreibung != "" && $Vorraussetzung != "" && $Sollergebnis != "" && $Verweis != "" && $Reihenfolge != "") { $datenbank = "ppsfr_spielwiese"; $HOST = "172.18.194.11"; $USERID = "christianlaubach"; $PW = "cl"; $db_handle = @mysql_connect($HOST,$USERID,$PW) or die("Die Datenbank ist momentan nicht erreichbar"); $sql_abfrage = "UPDATE Testfall SET Auto_Testfall_ID=$Auto_Testfall_ID, $sql_abfrage. = "GV_Funktion_ID='$GV_Funktion_ID'"; $sql_abfrage. = "Funktionsbeschreibung='$Funktionsbeschreibung'"; $sql_abfrage. = "Testdatum='$Testdatum'"; $sql_abfrage. = "Beschreibung='$Beschreibung'"; $sql_abfrage. = "Vorraussetzung='$Vorraussetzung'"; $sql_abfrage. = "Sollergebnis='$Sollergebnis'"; $sql_abfrage. = "Verweis='$Verweis'"; $sql_abfrage. = "Reihenfolge='$Reihenfolge'"; $sql_abfrage. = "WHERE Auto_Testfall_ID=$test_id"; mysql_select_db($datenbank,$db_handle); $ergebnis = mysql_query($sql_abfrage); $ok_flag = mysql_affected_rows(); if($ok_flag > 0) { echo "<center>Datensatz geändert!<a href='DatenTabelle_anzeigen.php' zurück zur Anzeige</a></center>"; echo "<meta http-equiv='refresh' content='0; URL=daten_aendern_anzeige.php'>"; } else { echo "Es ist ein Fehler aufgetreten! Datensatz wurde nicht geändert!"; echo "<center><a href='JavaScript:window.history.back()'>Zurück zum Formular</a></center>"; } } else { echo "<center>Bitte geben Sie Daten für jedes Feld ein!"; echo "<a href='JavaScript:window.history.back()'>Zurück zum Formular</a></center>"; } ?> </body> </html> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 13. Juni 2005 Teilen Geschrieben 13. Juni 2005 Diese Zeile... $sql_abfrage = "UPDATE Testfall SET Auto_Testfall_ID=$Auto_Testfall_ID, muss um ein "; ergänzt werden... Also: $sql_abfrage = "UPDATE Testfall SET Auto_Testfall_ID=$Auto_Testfall_ID,"; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Herr_der_Ringe Geschrieben 13. Juni 2005 Autor Teilen Geschrieben 13. Juni 2005 Ok, hätte wohl gleich schreiben müssen, dass ich das längst gemacht/probiert habe. Fehlermeldung bleibt die gleich. Hier ist diese mal: Parse error: parse error in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 32 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Herr_der_Ringe Geschrieben 13. Juni 2005 Autor Teilen Geschrieben 13. Juni 2005 Habe jetzt mal hinter $sql_abfrage den "." weggenommen. Dann zeigt er mir einen fehler für die nächste zeile. wenn ich überall die "." wegnehme, heisst es, diese Zeilen wären nicht richtig deklariert: $test_id = $_POST['test_id']; $Auto_Testfall_ID = strip_tags(trim($_POST['neu_Auto_Testfall_ID'])); $GV_Funktion_ID = strip_tags(trim($_POST['neu_GV_Funktion_ID'])); $Funktionsbeschreibung = strip_tags(trim($_POST['neu_Funktionsbeschreibung'])); $Testdatum = $_POST['neu_jahr']."-".$_POST['neu_monat']."-".$_POST['neu_tag']; $Beschreibung = strip_tags(trim($_POST['neu_Beschreibung'])); $Vorraussetzung = strip_tags(trim($_POST['neu_Vorraussetzung'])); $Sollergebnis = strip_tags(trim($_POST['neu_Sollergebnis'])); $Verweis = strip_tags(trim($_POST['neu_Verweis'])); $Reihenfolge = strip_tags(trim($_POST['neu_Reihenfolge'])); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 13. Juni 2005 Teilen Geschrieben 13. Juni 2005 Idealerweise sollte der Punkt bei dem Gleicheitszeichen stehen, und nicht am Variablennamen würde ich jetzt spontan behaupten Edit: Die SQL-Statement's werden so auch nicht funktionieren...sicher dass Du das richtig abgetippt hast? Zum Thread: Vielleicht schiebt uns ja mal jemand in Webprogrammierung Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Herr_der_Ringe Geschrieben 13. Juni 2005 Autor Teilen Geschrieben 13. Juni 2005 Hier nochmal dieser Teil, exakt aus dem Buch! (PS: Vlt. ist aussenrum etwas falsch? Aber er zeigt mir halt diese eine Zeile an. ich denke, es hat schon was mit dem punkt zu tun, aber auch das wegnehmen des leerzeichens , sodass ".=" da steht, macht keinen unterschied! $sql_abfrage = "UPDATE Testfall SET Auto_Testfall_ID=$Auto_Testfall_ID, $sql_abfrage .= "GV_Funktion_ID='$GV_Funktion_ID'"; $sql_abfrage .= "Funktionsbeschreibung='$Funktionsbeschreibung'"; $sql_abfrage .= "Testdatum='$Testdatum'"; $sql_abfrage .= "Beschreibung='$Beschreibung'"; $sql_abfrage .= "Vorraussetzung='$Vorraussetzung'"; $sql_abfrage .= "Sollergebnis='$Sollergebnis'"; $sql_abfrage .= "Verweis='$Verweis'"; $sql_abfrage .= "Reihenfolge='$Reihenfolge'"; $sql_abfrage .= "WHERE Auto_Testfall_ID=$test_id"; Das ist halt die mit meinen Daten! Jetzt die Version aus dem Buch: $sql_abfrage = "UPDATE filmdaten SET film_bestand=$film_bestand, $sql_abfrage .= "film_titel='$film_titel'"; $sql_abfrage .= ",film_regie='$film_regie',film_hauptrolle='$film_hauptrolle',"; $sql_abfrage .= "film_verleih='$film_verleih';film_laenge=$film_laenge, $sql_abfrage .= "film_preis=$film_preis"; $sql_abfrage .= ",film_traeger='$film_traeger',film_datum='$film_datum' "; $sql_abfrage .= "WHERE film_lfdnr=$film_id"; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 13. Juni 2005 Teilen Geschrieben 13. Juni 2005 $sql_abfrage = "UPDATE Testfall SET Auto_Testfall_ID=$Auto_Testfall_ID, $sql_abfrage .= "GV_Funktion_ID='$GV_Funktion_ID'"; $sql_abfrage .= "Funktionsbeschreibung='$Funktionsbeschreibung'"; $sql_abfrage .= "Testdatum='$Testdatum'"; $sql_abfrage .= "Beschreibung='$Beschreibung'"; $sql_abfrage .= "Vorraussetzung='$Vorraussetzung'"; $sql_abfrage .= "Sollergebnis='$Sollergebnis'"; $sql_abfrage .= "Verweis='$Verweis'"; $sql_abfrage .= "Reihenfolge='$Reihenfolge'"; $sql_abfrage .= "WHERE Auto_Testfall_ID=$test_id"; Das ist halt die mit meinen Daten! Jetzt die Version aus dem Buch: $sql_abfrage = "UPDATE filmdaten SET film_bestand=$film_bestand, $sql_abfrage .= "film_titel='$film_titel'"; $sql_abfrage .= ",film_regie='$film_regie',film_hauptrolle='$film_hauptrolle',"; $sql_abfrage .= "film_verleih='$film_verleih';film_laenge=$film_laenge, $sql_abfrage .= "film_preis=$film_preis"; $sql_abfrage .= ",film_traeger='$film_traeger',film_datum='$film_datum' "; $sql_abfrage .= "WHERE film_lfdnr=$film_id"; Wenn ich mir die beiden Codings durchlese dürften beide noch immer nicht funktionieren, da jeweils in der ersten Zeile am Ende "; fehlt. Des weiteren meine ich, dass nur die zweite SQL-Anweisung richtig zusammengesetzt wird. Allerdings fehl auch hier in der vierten Zeile wieder das "; am Ende. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 13. Juni 2005 Teilen Geschrieben 13. Juni 2005 Also diese Abfrage ist auf jeden Fall vom parsen her jetzt sauber. $sql_abfrage = "UPDATE Testfall SET Auto_Testfall_ID=$Auto_Testfall_ID,"; $sql_abfrage .= "GV_Funktion_ID='$GV_Funktion_ID', "; $sql_abfrage .= "Funktionsbeschreibung='$Funktionsbeschreibung', "; $sql_abfrage .= "Testdatum='$Testdatum', "; $sql_abfrage .= "Beschreibung='$Beschreibung', "; $sql_abfrage .= "Vorraussetzung='$Vorraussetzung', "; $sql_abfrage .= "Sollergebnis='$Sollergebnis', "; $sql_abfrage .= "Verweis='$Verweis', "; $sql_abfrage .= "Reihenfolge='$Reihenfolge' "; $sql_abfrage .= "WHERE Auto_Testfall_ID=$test_id";[/PHP] Der Punkt gehört wie schon geschrieben direkt vor das gleich Zeichen, und jede Anweisung wird mit einem Semikolon abgeschlossen. Bei der Update Anweisung ist folgender Syntax zu verwenden: [PHP] UPDATE tabelle SET spaltenName = neuerWert, ... WHERE bedingungen Soll heißen das die Werte die verändert werden sollen mit Komma voneinander getrannt werden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Herr_der_Ringe Geschrieben 14. Juni 2005 Autor Teilen Geschrieben 14. Juni 2005 ähm, ja, die Fehler sind weg.. allerdings, sagt er mir jetzt, ich hätte in diesen Zeilen einen "undefined index": $test_id = $_POST['test_id']; $Auto_Testfall_ID = strip_tags(trim($_POST['neu_Auto_Testfall_ID'])); $GV_Funktion_ID = strip_tags(trim($_POST['neu_GV_Funktion_ID'])); $Funktionsbeschreibung = strip_tags(trim($_POST['neu_Funktionsbeschreibung'])); $Testdatum = $_POST['neu_jahr']."-".$_POST['neu_monat']."-".$_POST['neu_tag']; $Beschreibung = strip_tags(trim($_POST['neu_Beschreibung'])); $Vorraussetzung = strip_tags(trim($_POST['neu_Vorraussetzung'])); $Sollergebnis = strip_tags(trim($_POST['neu_Sollergebnis'])); $Verweis = strip_tags(trim($_POST['neu_Verweis'])); $Reihenfolge = strip_tags(trim($_POST['neu_Reihenfolge'])); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 14. Juni 2005 Teilen Geschrieben 14. Juni 2005 allerdings, sagt er mir jetzt, ich hätte in diesen Zeilen einen "undefined index": Sag mal, sollen wir dir jetzt deinen Code verbessern? In dem Teil, den du gepostet hast, kann ich auf dem ersten Blick keinen Fehler erkennen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Herr_der_Ringe Geschrieben 14. Juni 2005 Autor Teilen Geschrieben 14. Juni 2005 1. Ich auch nicht-.- 2. Wenn du ihn nicht verbessern willst, dann lass es doch?! Ich freue mich über Hilfe, aber wenn ich jnd. damit aufn Keks gehe, dann soll ers doch lassen?! Hab nunmal nicht SOVIEL Ahnung davon. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 14. Juni 2005 Teilen Geschrieben 14. Juni 2005 Wenn Du uns die ganze Fehlermeldung gepostet hättest, stände dort bestimmt ein "Notice" oder "Warning" weil Du auf das Array $_POST mit einem Schlüssel zugreifen willst, der nicht als Parameter übergeben wurde. (Beispiel: $_POST['schlüssel']; es gibt aber kein Formularelement auf Deinem Formular mit dem Namen "schlüssel") An deiner Stelle würde ich jetzt die Ausgabe von Notice in der PHP-Konfiguration zum Error-Reporting ausschalten... (php.ini!) Oder Du fragst vorher ab, ob die Schlüssel, über die Du auf das Array zugreifen willst existieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 14. Juni 2005 Teilen Geschrieben 14. Juni 2005 Wenn du in Zeile 4 das error_reporting(E_ALL); Auskommentierst dann bekommst du keine "Notice" mehr. Diese beziehen sich auf das "auspacken" des $_POST Arrays. Denn beim einfachen Aufrufen der Seite ist in diesem Array nichts drin. Wenn du aber diese Datei als Ziel in einem Formular angeben hast, würde nach dem senden, in dem Array was drin stehen was dann "ausgepackt" werden kann. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Herr_der_Ringe Geschrieben 14. Juni 2005 Autor Teilen Geschrieben 14. Juni 2005 Doch bekomme ein "Notice" trotz dessen, dass das error_reporting(E_ALL); rausgenommen wurde. Und zwar folgendes: Notice: Undefined index: test_id in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 9 Notice: Undefined index: Auto_Testfall_ID in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 10 Notice: Undefined index: GV_Funktion_ID in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 11 Notice: Undefined index: Funktionsbeschreibung in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 12 Notice: Undefined index: jahr in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 13 Notice: Undefined index: monat in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 13 Notice: Undefined index: tag in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 13 Notice: Undefined index: Beschreibung in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 14 Notice: Undefined index: Vorraussetzung in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 15 Notice: Undefined index: Sollergebnis in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 16 Notice: Undefined index: Verweis in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 17 Notice: Undefined index: Reihenfolge in c:\apache\htdocs\test-datenbank\daten_aendern_speichern.php on line 18 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 14. Juni 2005 Teilen Geschrieben 14. Juni 2005 Na aber es steht doch da das es ein "Notice" Notiz ist also nicht weiter schlimm. Auf Produktiven Systemen wird meist das error reporting aus gestellt. So das solche Meldungen meist nicht auftauchen. Wie ich schon geschrieben habe kommt sowas zustande wenn das Array leer ist bzw wenn du auf Elemente zugreifst die nicht enthalten sind. Also wenn du die Formularfelder auf der Seite vorher ausfüllst und dann an diese Datei per Post übergibst dann sollte es gehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 14. Juni 2005 Teilen Geschrieben 14. Juni 2005 Dann ist global seitens der php.ini anscheinend ein Error-Reporting von E_ALL konfiguriert. Versuche mal Zeile 4 durch diese zu ersetzen: error_reporting(E_ALL ^ E_NOTICE); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Herr_der_Ringe Geschrieben 15. Juni 2005 Autor Teilen Geschrieben 15. Juni 2005 ich vermute jetzt mal spontan, es gibt verschieden aufgebaute php.ini - dateien. aber was sinn machen würde, wäre die zeile : error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT meinst du, diese zeile soll ich durch deine ersetzen? PS: schonmal danke für eure tips! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 15. Juni 2005 Teilen Geschrieben 15. Juni 2005 Nein, diese Zeilt ist korrekt in der php.ini... Ich meinte Zeile 4 vom Quellcode Deines Ursprungsposts.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Herr_der_Ringe Geschrieben 15. Juni 2005 Autor Teilen Geschrieben 15. Juni 2005 JUHUU. Es klappt:D Das lag allerdings nicht am error_reporting, nach dieser änderung hat es weiterhin nicht funktioniert. Aber, hier seht ihr meine IF-Bedingung: if($Auto_Testfall_ID != "" && $GV_Funktion_ID != "" && $Funktionsbeschreibung != "" && $Testdatum != "" && $Beschreibung != "" && $Vorraussetzung != "" && $Sollergebnis != "" && $Verweis != "" && $Reihenfolge != "") Für meine Begriffe war es so, dass dann in jedem Feld etwas stehen muss. Von wegen. In jedem Feld muss was geändert werden-.- Jedenfalls hab ich alle "&&" durch"||" geändert. Jetzt funzts. Thx@all. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 15. Juni 2005 Teilen Geschrieben 15. Juni 2005 Das Problem ist nicht behoben, du umgehst es auf kosten deiner Validierung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 15. Juni 2005 Teilen Geschrieben 15. Juni 2005 Das Problem ist nicht behoben, du umgehst es auf kosten deiner Validierung. ... und riskierst so etwas: Datenbanksicherheit bei Strings Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Herr_der_Ringe Geschrieben 15. Juni 2005 Autor Teilen Geschrieben 15. Juni 2005 Hm, ich denke, dass es nicht grade ein Prog ist, bei dem hacker-gefahr besteht. EDIT: Oder könnt ihr mir sagen, wie ichs sonst machen soll?! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Monty82 Geschrieben 15. Juni 2005 Teilen Geschrieben 15. Juni 2005 $Auto_Testfall_ID = strip_tags(trim($_POST['neu_Auto_Testfall_ID'])); $GV_Funktion_ID = strip_tags(trim($_POST['neu_GV_Funktion_ID'])); $Funktionsbeschreibung = strip_tags(trim($_POST['neu_Funktionsbeschreibung'])); $Testdatum = $_POST['neu_jahr']."-".$_POST['neu_monat']."-".$_POST['neu_tag']; $Beschreibung = strip_tags(trim($_POST['neu_Beschreibung'])); $Vorraussetzung = strip_tags(trim($_POST['neu_Vorraussetzung'])); $Sollergebnis = strip_tags(trim($_POST['neu_Sollergebnis'])); $Verweis = strip_tags(trim($_POST['neu_Verweis'])); $Reihenfolge = strip_tags(trim($_POST['neu_Reihenfolge'])); Hier zusätzlich noch mysql_escape_string() einbauen: z.B.: $Beschreibung = mysql_escape_string(strip_tags(trim($_POST['neu_Beschreibung']))); und im weiteren Verlauf auf jeden Fall abfragen, ob $Auto_Testfall_ID ein Integer-Wert ist, bevor das SQL-Statement abgeschickt wird, da dieser Wert unmaskiert im Statement verwendet wird... Und das Workarounden Deiner Pflichtfeld-Validierung in der IF-Abfrage würde ich auch nochmal überdenken... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Herr_der_Ringe Geschrieben 15. Juni 2005 Autor Teilen Geschrieben 15. Juni 2005 ok, danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.