Parse error: syntax error, unexpected T_VARIABLE
Ingo
- php
0 rauchi1 Vinzenz Mai5 Christian Seiler0 Der Martin
Hi, ich habe ein kleines problem wo ich nicht weiter komme:
Ich erhalte folgende Fehlermeldung:
Parse error: syntax error, unexpected T_VARIABLE in /xxx/xxx/xxxx/xxxx/insert.php on line 3
Hier ist der komplette Code der Datei:
<?php include("config.php");
$eintrag = 'INSERT INTO websites(webseite, url, beschreibung)
VALUES('$_GET["webseite"]', '$_GET["url"]', '$_GET["beschreibung"]')'
Eintragen = mysql_query($eintrag);
?>
Hallo!
Parse error: syntax error, unexpected T_VARIABLE in /xxx/xxx/xxxx/xxxx/insert.php on line 3
Das bedeutet, dass eine Variable vorkommt wo sie nicht vorkommen soll, ist aber nicht der einzige Fehler.
$eintrag = 'INSERT INTO websites(webseite, url, beschreibung)
VALUES('$_GET["webseite"]', '$_GET["url"]', '$_GET["beschreibung"]')'
Die Verknüpfung von Strings erfolgt in PHP durch einen Punkt ".", sowas finde ich bei dir hier nirgends, auch den Strichpunkt am Ende scheinst du nicht zu brauchen.
Eintragen = mysql_query($eintrag);
In PHP beginnen Varibalen üblicherweise mit dem Dollarzeichen ($Eintragen = ...).
Ich glaube du musst dich erst einmal mit den Grundsätzen von PHP vertraut machen, benutze dafür die Suchmaschine deiner Wahl.
mfg
Hallo,
Parse error: syntax error, unexpected T_VARIABLE in /xxx/xxx/xxxx/xxxx/insert.php on line 3
$eintrag = 'INSERT INTO websites(webseite, url, beschreibung)
^
| hier benutzt Du einfache Anführungszeichen, um
Deine Zeichenkette einzuleiten
VALUES('$\_GET["webseite"]', '$\_GET["url"]', '$\_GET["beschreibung"]')'
^
| und hier ebenfalls einfache Anführungszeichen
| für die Zeichenkettenwerte in der
| SQL-Anweisung
Denke daran: Innerhalb einfacher Anführungszeichen erfolgt keine Variablenauswertung seitens PHP.
Ich vermisse zudem die kontextgerechte Aufbereitung der Eingabewerte (Werte des $_GET-Arrays) für den SQL-Kontext. Somit bist Du anfällig für SQL-Injektion. Diese Werte gehören in Deinem Fall mit mysql_real_escape_string. behandelt. Falls die Magic Quotes eingeschaltet sein sollten und Du diese nicht deaktivieren kannst, solltest Du ihre Auswirkung zu Skriptbeginn rückgängig machen, wie in Beispiel #2 gezeigt.
Freundliche Grüße
Vinzenz
Hallo,
<?php include("config.php");
$eintrag = 'INSERT INTO websites(webseite, url, beschreibung)
VALUES('$_GET["webseite"]', '$_GET["url"]', '$_GET["beschreibung"]')'
Eintragen = mysql_query($eintrag);
?>
Zuerst einmal: Damit das überhaupt funktioniert, muss Dir klar sein, wann welches Zeichen welche Art von String begrenzt.
Was Du haben willst, ist ein SQL-Statement, das im Ende z.B. so aussieht:
INSERT INTO websites (website, url, beschreibung) VALUES ('test-seite', 'http://example.com/', 'Test-Eintrag')
Das Problem: Du schreibst kein SQL selbst. Sondern Du schreibst PHP, d.h. Du musst das ganze in einen PHP-String verpacken. Dann hast Du jedoch das Problem, dass wenn Du in PHP auch ' als Stringbegrenzer wählst, dass das ' im SQL-Statement den PHP-String beendet.
Du hast jetzt zwei Möglichkeiten:
1. Du nimmst den anderen Stringbegrenzer in PHP, nämlich ":
$eintrag = "INSERT INTO websites (website, url, beschreibung) VALUES ('test-seite', 'http://example.com/', 'Test-Eintrag')";
2. Du maskierst die SQL-', damit die den PHP-String nicht beenden:
$eintrag = 'INSERT INTO websites (website, url, beschreibung) VALUES (\'test-seite\', \'http://example.com/\', \'Test-Eintrag\')';
Dann kannst Du zumindest mal ein festes SQL-Statement zusammenbauen. Das Problem: Du willst das in PHP dynamisch erstellen auf Grund der Parameter, die Du übergeben bekommen hast. Um das zu bewerkstelligen, musst Du einen String aus verschiedenen Teilen zusammensetzen. In PHP funktioniert das mit dem Punkt, z.B. so:
$string = 'Hallo ' . 'Welt!';
Die Variable $string enthält dann den Text "Hallo Welt!". Das ganze geht auch mit Variablen:
$welt = "Welt";
$string = 'Hallo ' . $welt . '!';
Auf Dein Beispiel übertragen wäre das dann (ACHTUNG: NICHT VERWENDEN, ENTHÄLT NOCH SICHERHEITSLÜCKEN):
$eintrag = "INSERT INTO websites (website, url, beschreibung) VALUES ('" . $_GET['website'] . "', '" . $_GET['url'] . "', '" . $_GET['beschreibung'] . "')";
Das würde zwra schon funktionieren, ist aber problematisch. Warum? Weil Du Dir damit eine riesige Sicherheitslücke einbaust. Der Grund ist nämlich, dass $_GET['beschreibung'] selbst ein ' enthalten könnte. Stell Dir vor, jemand würde für $_GET['beschreibung'] z.B. "It's fun" eingeben, dann würde der in PHP zusammengesetzte SQL-Befehl so aussehen:
INSERT INTO websites (website, url, beschreibung) VALUES ('fun', 'http://fun.example.com/', 'It's fun')
Wie Du siehst, ist das kein gültiges SQL mehr. In dem Fall wäre das noch harmlos, aber jemand könnte durchaus andere Dinge hereinschmuggeln durch die ', was dann dazu führt, dass jemand Dein SQL-Statement beliebig (!) modifizeren kann.
Wie kann man das verhinden? Nunja, die einfachste Möglichkeit ist, den Inhalt der von außen kommenden Variable so zu maskieren, dass er in SQL unschädlich ist. Dafür gibt's in PHP für MySQL bereits eine vorgefertige Funktion, die heißt mysql_real_escape_string. Baut man die ein, sieht das ganze so aus:
$eintrag = "INSERT INTO websites (website, url, beschreibung) VALUES ('" . mysql_real_escape_string ($_GET['website']) . "', '" . mysql_real_escape_string ($_GET['url']) . "', '" . mysql_real_escape_string ($_GET['beschreibung']) . "')";
Damit stellst Du sicher, dass niemand Dein SQL-Statement manipulieren kann und somit hast Du in dieser Hinsicht keine Sicherheitslücke.
Deine Frage zeigt jedoch, dass Du selbst von einigen PHP-Basics nicht genügend Ahnung hast, dass ich Dir *dringend* raten würde, das Quakenet PHP-Tutorial durchzuarbeiten - dort wird auch der MySQL-Zugriff erläutert.
Viele Grüße,
Christian
Hallo,
Parse error: syntax error, unexpected T_VARIABLE in /xxx/xxx/xxxx/xxxx/insert.php on line 3
<?php include("config.php");
$eintrag = 'INSERT INTO websites(webseite, url, beschreibung) VALUES('$_GET ...
^--- Hier beginnt dein String
^--- und hier endet er.
Du notierst also einen String und direkt daran anschließend, ohne Operator, Klammer oder ähnliches, eine Variable. Das ist die Stelle, an der PHP "eine Variable nicht erwartet".
Zu den restlichen Fehlern gab's ja schon Hinweise.
So long,
Martin