Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Registrieren Fehlermeldung

Sigilein / 12 Antworten / Baumansicht Nickles

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

bei Antwort benachrichtigen
d-oli Sigilein „Registrieren Fehlermeldung“
Optionen

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?


&lt?php
...
   mysql_query("INSERT INTO ...");
...
?&gt

Quelle: http://ch2.php.net/mysql_insert_id


Gruss
d-oli
Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Sigilein d-oli „Hallo So wie ich das erraten konnte, geht es hier um MySQL und PHP auf Linux...“
Optionen

vielen dank für deine antwort, leider kenne ich mich damit noch nicht richtig aus. ich werd deine idee mal probieren

bei Antwort benachrichtigen
Sigilein d-oli „Hallo So wie ich das erraten konnte, geht es hier um MySQL und PHP auf Linux...“
Optionen

leider klappt das nicht. du hattest recht-ich wollte das tun was du oben geschrieben hast. könntest du mir bitte die datei machen??

bei Antwort benachrichtigen
d-oli Sigilein „leider klappt das nicht. du hattest recht-ich wollte das tun was du oben...“
Optionen
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
Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Borlander d-oli „Hallo So wie ich das erraten konnte, geht es hier um MySQL und PHP auf Linux...“
Optionen
Hä? Komisches Insert-Statement – gemäss ANSI-SQL ist das eine Mischung aus INSERT und UPDATE:
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().
bei Antwort benachrichtigen
Sigilein Nachtrag zu: „Registrieren Fehlermeldung“
Optionen

ich ja auch darum hab ich ja gefragt :-)

bei Antwort benachrichtigen
Borlander Sigilein „Registrieren Fehlermeldung“
Optionen

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

bei Antwort benachrichtigen
Borlander Sigilein „Registrieren Fehlermeldung“
Optionen

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.

bei Antwort benachrichtigen
Sigilein Borlander „Noch zwei weitere Anmerkungen: 1 Mit “
Optionen

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?

bei Antwort benachrichtigen
Sigilein Nachtrag zu: „danke für deine antwort. wie geht denn das?“
Optionen

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

bei Antwort benachrichtigen
Borlander Sigilein „hab jetzt ein bisschen rumprobiert und hab jetzt zwei dateien register.php:...“
Optionen
warum werden die in register.php eingetragenen werte nicht in register_input.php ausgegeben?
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
bei Antwort benachrichtigen
Borlander Sigilein „danke für deine antwort. wie geht denn das?“
Optionen

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.

bei Antwort benachrichtigen