MySQL und PHP Problem

Hallo Leute,

Ich habe ein Problem, und zwar fange ich gerade erst an mich mit mySQL zu beschäftigen (PHP schon länger).
Und jetzt tritt das Problem auf:
Ich habe eine Datenbank erstellt, und per PHP Script auch eine Tabelle in der Datenbank (Tabellenname: “main”).
Ich habe auch einen Test Script, der soll so eine Art Registrierungsformular sein:

[code]<!-anmelden.php->

<?PHP if ($button==" OK ") { include("db.php"); mysql_query("INSERT INTO main(anrede,vorname,nachname,strasse,plz,wohnort,email,username,pass) VALUES('$anrede','$vorname','$nachname','$strasse','$plz','$wohnort','$email','$username','$pass')"); mysql_close(); ?> Die Daten wurden eingetragen
<?PHP } else { ?>








<?PHP } ?> [/code]

Wenn ich diesen jetzt öffne, ausfülle und absende, werden die Daten NICHT in die Tabelle eingetragen. (Habe ich im phpMyAdmin geprüft).

Hat jemand eine Ahnung woran das liegen könnte?
Hier noch die db.php:

<? $dbname="******"; $dbhost="localhost"; $dbuser="******"; $dbpass="*****"; mysql_connect($dbhost,$dbuser,$dbpass); mysql_select_db($dbname) or die("Konnte die Datenbank nicht waehlen."); ?>
PS: Die DB Daten habe ich geprüft.

[size=85]Edit by thorr: Überlange Zeile durch Zeilenumbrüche getrennt.[/size]

peterkropff.de/tutorials/php_feh … fehler.htm

Register_globals is hier nicht an. Du brauchst das $_POST Array :slight_smile:

Ich habe das eingebaut, aber ich bekomme auch keine Fehlermeldung:
In db.php:

code
mysql_connect($dbhost,$dbuser,$dbpass);

mysql_select_db ($database) or die (mysql_error());
(…)
[/code]

in anmelden.php:

quote
include(“db.php”);

mysql_query(“INSERT INTO main(anrede,vorname,nachname,strasse,plz,wohnort,email,username,pass)
VALUES(’$anrede’,’$vorname’,’$nachname’,’$strasse’,’$plz’,’$wohnort’,’$email’,’$username’,’$pass’)”)
or die (mysql_error());

mysql_close();
(…)
[/quote]

Nachtrag:
Mit dem $_POST geht es auch nicht…
Komisch…

mysql_query("INSERT INTO main(anrede,vorname,nachname,strasse,plz,wohnort,email,username,pass) VALUES('$_POST[anrede]','$_POST[vorname]','$_POST[nachname]','$_POST[strasse]','$_POST[plz]', '$_POST[wohnort]','$_POST[email]','$_POST[username]','$_POST[pass]')")

[size=85]Edit by thorr: Überlange Zeile durch Zeilenumbrüche getrennt.[/size]

Da fehlen die Anführungszeichen:
[code]$_POST['anrede'][/code]

Da fehlen die Anführungszeichen:

Danke,

Jetzt habe ich aber ein anderes Problem,
habs so geändert:

mysql_query("INSERT INTO main(anrede,vorname,nachname,strasse,plz,wohnort,email,username,pass)VALUES('$_POST['anrede']', '$_POST['vorname']','$_POST['nachname']','$_POST['strasse']','$_POST['plz']','$_POST['wohnort']', '$_POST['email']','$_POST['username']','$_POST['pass']')") or die (mysql_error());

Jetzt bekomme ich die Meldung:

(Zeile 11 ist die besagte mysql_query Anweisung).
Hat da jemand vielleicht eine Idee woran es liegen könnte?

[size=85]Edit by thorr: Überlange Zeile durch Zeilenumbrüche getrennt.[/size]

Ich glaube, es liegt an diesen Konstrukten. Ersetz diese mal durch folgendes:

An mangelnden PHP-Grundlagenkenntnissen.

php.net/manual/en/language.t … ng.parsing beschreibt, was beim Parsing von (Array-)Variablen in Strings geht, und was nicht.

@kerbination:

Danke, geht leider immer noch nicht (Error).

@ chrisb:

Danke auch dir, aber selbst wenn ich das so mache geht es nicht (aber kein Error mehr).

[code]include(“db.php”);

mysql_query(“INSERT INTO main(anrede,vorname,nachname,strasse,plz,wohnort,email,username,pass)VALUES(” . $_POST[‘anrede’] . “,” . $_POST[‘vorname’] . “,” . $_POST[‘nachname’] . “,” . $_POST[‘strasse’] . “,” . $_POST[‘plz’] . “,” . $_POST[‘wohnort’] . “,” . $_POST[‘email’] . “,” . $_POST[‘username’] . “,” . $_POST[‘pass’] . “)”)
or die (mysql_error());[/code]

Edit:

Bin ein kleines bisschen weiter gekommen:
Der Fehler war, das die Variable Button nicht über geben wurde und daher nie die db geöffnet wurde.
Jetzt kommt aber der Fehler wenn er die Daten schreiben soll:

hi,

ich würde mal spontan sagen: das liegt daran, dass du die Zeichenketten, die du als Feldwerte festlegen wilst, nicht in (einfache) Anführungszeichen einschließt.

lg

DANKE!!!

Das wars, es haben nur ein paar verdammte ’ und ’ gefehlt :astonished:

[code]include(“db.php”);

$query = “INSERT INTO main(anrede,vorname,nachname,strasse,plz,wohnort,email,username,pass) VALUES(’” . $_POST[‘anrede’] . “’,’” . $_POST[‘vorname’] . “’,’” . $_POST[‘nachname’] . “’,’” . $_POST[‘strasse’] . “’,’” . $_POST[‘plz’] . “’,’” . $_POST[‘wohnort’] . “’,’” . $_POST[‘email’] . “’,’” . $_POST[‘username’] . “’,’” . $_POST[‘pass’] . “’)”;
mysql_query($query) or die (mysql_error());[/code]

jetzt fehlt nur noch die Überprüfung auf die Richtigkeit der Daten.
So kann es passieren dass ein Benutzer das Formular einfach leer absendet, und somit leere Datensätze in der Datenbank liegen. Und gegen eventuellen „Injections“ scheinst du auch nicht geschützt zu sein, was bei deaktivierten magic-quotes zu Problemen der Sicherheit führen kann.

Danke für den Hinweis, aber an die Möglichkeit das jemand versucht mittels Injections zu hacken, habe ich gedacht, und jetzt alle POST Variablen noch per mysql_real_escape_string()
maskiert, Beispiel:mysql_real_escape_string($_POST['nachname']).
Das funktioniert auch gut.

Aber ich habe jetzt ein anderes Problem, und zwar geht es diesmal darum 2 Felder in einer Zeile in einer Tabelle zu ändern:

[code]include(“db.php”);
$email = ($_GET[“us”]);

$abfrage = "UPDATE datenbank.main SET sid = " . mysql_real_escape_string($_POST[‘sid’]) . “, logistik = " . “’” . mysql_real_escape_string($_POST[‘logistik’]) . " WHERE main.email=” . $email . “;”;
$ergebnis = mysql_query($abfrage);
mysql_close($connection); [/code]
Und zwar soll der eigentlich die Zeile suchen in der die Spalte email den Wert $email hat (ist eine variabel die per Get übergeben wird…) und dort sollen dann die Felder sid und logistik geändert werden zu den POST Variablen.
Kann dort jemand einen Fehler erkennen?
Ich bekomme keine Fehler Meldung, aber das Update wird nicht übernommen…
Also schon mal Danke für eine Antwort.

Und es dann ganz schnell wieder vergessen?
Im jetzt gezeigten Code behandelst du einen von außen kommenden Wert nicht kontextgerecht.

Sieht eher ganz stark danach aus, als ob du wieder das gleiche Problem wie vorher hättest.

Du fragst ja auch wieder nicht nach einem Fehler, obwohl du auf die entsprechende Vorgehensweise bereits hingewiesen wurdest.

Du solltest uns schon zeigen, dass du die Hinweise, die du hier bekommst, ernst nimmst - und auch, dass du etwas dazu lernst.

Sorry, hab mich wohl sehr blöd angestellt.
Hab jetzt mal endlich :unamused: mir mal das ganze noch mal genau angeguckt (+ PHP und MySQL ).
Den Fehler hab ich gefunden, aber hab auch gleich mal das ganze etwas sicherer gemacht.