hallo,
ich möchte, dass die eingabefelder $usernamereg, $userpassreg und $emailreg in die datenbank users eingefügt wird. leider bringt er immer diese fehlermeldung:
Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /usr/export/www/vhosts/funnetwork/hosting/doppelsigi/Retroks/register.php on line 12
was soll ich machen?
hier die dateien zum download:
http://doppelsigi.do.funpic.de/registerundsessionhelpers.zip
vielen dank für eure hilfe im voraus
gruß sigi
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Hallo
So wie ich das erraten konnte, geht es hier um MySQL und PHP auf Linux – richtig?
Es wäre schön, wenn die potenziellen Helfer so was nicht per Detektivarbeit herausfinden müssten.
Parse error ... register.php on line 12
INSERT INTO users SET UserName='$usernamereg', UserPass=MD5('$usernamepass'),
UserMail='$emailreg'
Hä? Komisches Insert-Statement – gemäss ANSI-SQL ist das eine Mischung aus INSERT und UPDATE:
INSERT INTO table_name (column1, column2,...)
VALUES (value1, value2,....)
UPDATE table_name
SET column_name = new_value
WHERE column_name = some_value
Quelle: http://www.w3schools.com/sql/
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
Quelle: http://dev.mysql.com/doc/refman/5.1/de/insert.html
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Quelle: http://dev.mysql.com/doc/refman/5.1/de/update.html
... komisch. Und müsste da nicht auch noch ein ';' hin, am Ende des SQL-Statements?
Wolltest du folgendes tun?
INSERT INTO users( UserName, UserPass, UserMail ) VALUES( '$usernamereg', MD5('$usernamepass'), '$emailreg' );
Und müsste mit PHP nicht so etwas verwendet werden?
<?php
...
mysql_query("INSERT INTO ...");
...
?>
Quelle: http://ch2.php.net/mysql_insert_id
Gruss
d-oli
vielen dank für deine antwort, leider kenne ich mich damit noch nicht richtig aus. ich werd deine idee mal probieren
leider klappt das nicht. du hattest recht-ich wollte das tun was du oben geschrieben hast. könntest du mir bitte die datei machen??
... sorry, dafür sind meine PHP-Kenntnisse zu rudimentär. Ich denke du findest alles was du brauchst in den Links oben.
d-oli
Zumindest bei MySQL Version 5 ist es ganz offiziell erlaubt INSERT mit SET zum festlegen der Werte zu verwenden...
Und müsste da nicht auch noch ein ';' hin, am Ende des SQL-Statements?
Ist nicht erforderlich bei mysql_query().
ich ja auch darum hab ich ja gefragt :-)
Kein Wunder. Der Funktionsaufruf connect() wurde nicht wie erforderlich mit ; abgeschlossen. (Könnte man bei der Fehlermeldung expecting ',' or ';' fast schon von selbst drauf kommen)
INSERT INTO users SET UserName='$usernamereg', UserPass=MD5('$usernamepass'),
UserMail='$emailreg'
Was soll das sein? SQL-Querys mußt Du über entsprechende Funktionen (mysql_...) ausführen. Abgesehen davon ist es extrem gefährlich Variablen in SQL-Strings einzufügen ohne diese vorher zu escapen. Das gibt sonst ganz schnell, ganz böse Sicherheitslücken...
Gruß
Borlander
Noch zwei weitere Anmerkungen:
1) Mit <?php bist Du besser beraten, der Kurzzyntax ist womöglich nicht überall aktiviert.
2) Das Schließen des PHP-Bereiches ist zwar nicht zwingend erforderlich, würde es aber trotzdem machen sofern keine wirklich guten Gründe dagegen sprechen.
danke für deine antwort.
Abgesehen davon ist es extrem gefährlich Variablen in SQL-Strings einzufügen ohne diese vorher zu escapen.
wie geht denn das?
hab jetzt ein bisschen rumprobiert und hab jetzt zwei dateien
register.php:
http://doppelsigi.do.funpic.de/reg.jpg
und register_input.php:
echo $usernamereg;
echo $userpassreg;
echo $emailreg;
?>
warum werden die in register.php eingetragenen werte nicht in register_input.php ausgegeben? das heißt doch das die werte nicht übertragen werden oder? was muss ich ändern??
Dir ist aber schon klar wie das Versenden von Formularen funktioniert? Unter anderem hast Du hier die Variablen als Formular-Feldnamen eingesetzt. Da den Variablen kein Wert zugewiesen wurde hast Du im Formular einfach nur drei Felder mit leerem Name-Attribut. Gibt denen einnen konstanten Feldnamen, dann bekommst Du die Werte im Zielscript über $_POST['feldname'] bekommen. Vor der HTML-Ausgabe natürlich auch entsprechenden escapen (htmlspecialchars) sobald es produktiv eingesetzt werden soll...
Gruß
Borlander
Am besten mit der Funktion mysql_real_escape_string(...) incl Übergabe der Verbindungskennung um sicher zu gehen, daß Durch unterschiedliche Zeichensatzcodierungen keine Lücken offen bleiben. Jede Variable die im SQL-Query landet sollte vorher durch diese Funktion gefiltert/escaped werden.