Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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>

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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.

Geschrieben

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

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

Geschrieben

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.

Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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!

Geschrieben

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.

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

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