Zum Inhalt springen

Parse-Error


Empfohlene Beiträge

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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']));

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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";

Link zu diesem Kommentar
Auf anderen Seiten teilen

$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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ä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']));

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

:P

Thx@all.

Link zu diesem Kommentar
Auf anderen Seiten teilen

$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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...