Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Parse-Error

Empfohlene Antworten

Veröffentlicht

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>

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

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

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

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

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

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

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.

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

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.

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.

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.

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.

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

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.

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!

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.

Das Problem ist nicht behoben, du umgehst es auf kosten deiner Validierung.

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?!

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

ok, danke!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.