Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

SQL-DB über HTML via PHP befüllen - wie ?





Frage

...hallo, es gibt hier zwar einige beiträge, die sich damit befassen, wie eine sql-db über eine html-site unter verwendung von php befüllt werden kann, aber ich habe noch keine lösung erkennen können. bei mir ist es so, dass das abfrageskript einwandfrei funktioniert, aber sobald ich einträge (insert into) vornehmen möchte, funktioniert es einfach nicht. weder bei mir lokal (xampp) noch bei meinem webhoster. wäre super wenn ihr mir tipps geben könntet. hier meine html-site: <html> <form action "eingabe.php" method="post"> Name: <input type="text" name="Name" /> Vorname: <input type="text" name="Vorname" /> Alter: <input type="text" name="age" /> <input type="submit" value="weg damit"> </form> </html> und hier mein php-skript: <?php $server="xxx"; $user="xxx; $password="xxx"; $datenbank="xxx"; $verbindung=mysql_connect($server, $user, $password) or die ("keine Verbindung"); mysql_select_db($datenbank) or die ("keine DB"); $eintrag="insert into Test (Name, Vorname, AlterGeb) values ('$_POST["Name"]','$_POST["Vorname"]','$_POST["age"]')"; $reindamit=mysql_query($eintrag); $ausgabe=mysql_exec($verbindung, $reindamit); ?>

Antwort 1 von rabies

Punkt 1: mysql_exec gibt es nicht, es sei denn Du hast selbst so eine Funktion definiert.

Punkt 2: Durch die verschiedenen Hochkommatas und Anführungszeichen könnte der Parser ins Rudern kommen. Schöner:
$eintrag = 'INSERT INTO Test (Name, Vorname, AlterGeb) VALUES (\''.$_POST["Name"].'\', \''.$_POST["Vorname"].'\', '.$_POST["age"].')';
Wobei ich hier davon ausgehe, dass die Werte Vorname und Name vom Typ (VAR)CHAR sind und age den Typ INT hat. Das ist auch der Grund, warum ich für Vorname und Name \' vorran- und nachstelle.

Punkt 3: Versuch mal mysql_query($eintrag) or die(mysql_error()); Gibt es eine Fehlermeldung? Wenn ja, welche?

'Funktioniert nicht' ist keine Fehlerbeschreibung. Gibt es Fehlermeldungen? Direkt in der Datenbank nachgeschaut, ob eventuell doch Einträge vorgenommen wurden? Hast Du die Werte der mit $_POST übergebenen Variablen überprüft; eventuell leer?

Zudem solltest Du bedenken, dass das SQL-Statement, wenn Du die $_POST Daten ohne Prüfung auf den Inhalt übergibst, manipulierbar ist - und somit ein großes Sicherheitsloch darstellt. Du solltest hier jeweils überprüfen, was darin steht. Als einfache Methode, Dich gegen Angriffe abzuschützen, solltest Du zumindest (das heißt, dass auch dies keinen allumfassenden Schutz bietet) mysql_real_escape_string() verwenden.

--rabies.

Antwort 2 von Tumulus

...zunächst erstmal vielen dank für die antwort !

zu 1)
brauche ich dann einen anderen ausführungsbefehl ???_exec??? - wenn ja - welchen ?

zu 2 und 3)
habe ich ausprobiert - -funktioniert aber leider auch nicht. d. h. dass ich die daten zwar in mein html-formular eingeben kann, aber leider nichts in der datenbank ankommt. fehlermeldung wird gar keine ausgegeben. vielmehr erscheint nach dem absendebutton einfach wieder die eingabemaske mit leeren feldern.


zu "Hast Du die Werte der mit $_POST übergebenen Variablen überprüft; eventuell leer? "

-> wie kann ich das denn überprüfen ?

vielleicht habe ich auch einen systematischen fehler. ich habe eine mysql-datenbank bei einem webhoster und habe dort das html-eingabeformular und das php-verarbeitungsskript abgelegt. brauche ich vielleicht irgendwie noch einen ODBC-dingens ?

thnx.

(ich bin noch anfänger... :) )

Antwort 3 von rabies

Du brauchst gar keinen Befehl zum Ausführen. mysql_query führt das Statement schon aus und sendet es an den Server.

Werte überprüfen: einfach mal mit
echo $_POST['Name'];
ausgeben lassen oder
print_r($_POST);
benutzen, um gleich sämtliche per POST übermittelte Daten abzufragen.

Nein, Du wirst bestimmt kein ODBC brauchen. Der Webhoster wird PHP schon so eingerichtet haben, dass es fehlerfrei mit MySQL sprechen kann.

mysql_query($eintrag) or die(mysql_error());
gibt wirklich nichts aus?

Wie sieht's damit aus:
mysql_connect(...Deine Verbindungsdaten...) or die(mysql_error());

Wird eventuell die Verbindung gar nicht korrekt hergestellt?

Mh... mich wundert allerdings noch, dass Du nach Drücken auf den Absendebutton direkt wieder auf das Formular kommst. Das kann ich nicht ganz nachvollziehen.

Kannst Du eventuell einen Link zu besagtem Script und Formular posten?

--rabies.

Antwort 4 von MixMax

Also das script funktioniert beinahe, problem ist wie schon erkannt die deklaration der Variablen, denn PHP kann Variablen in Strings nicht immer richtig darstellen:

das Funktioniert:
$Foo = "ABC";
echo "this is my $Foo site";

gibt this is my ABC site aus

$Foo[0] = "ABC";
echo "this is my $Foo[0] site";

gibt this is my ABC site aus

Es geht aber nicht mit Stringtrennzeichen im Variablennamen
$Foo['0'] = "ABC";
echo "this is my $Foo['0'] site";


Dazu must du den String unterbrechen und mehrere Teile miteinander verketten z.b.:
$Foo['0'] = "ABC";
echo "this is my ".$Foo['0']." site";

Du solltest es möglichst Einheitlich halten, damit du gerade bei längeren Queries nicht durcheinander kommst. Du bekommst eh immer schon viele doppelte Hochkommas hintereinander da du ja den Wert in Hochkommas in der Query hast also z.B.

"select 'Bananen', 'Äpfel';"

und wenn die Werte dann mit Variablen getauscht wird

"select '".$Data['Obst1']."', '".$Data['Obst2']."';"


Da SQL das Hochkomma als String-trennzeichen verwendet, würde ich die Gänsefüschen (") als stringbegrenzer in php nehmen, da du sonst immer viele Backslashe verwenden must um die SQL-Hochkommas von dem Stringendehochkomma zu unterscheiden.
Deine Query würde ich daher so schreiben:

$q = "INSERT INTO Test (Name, Vorname, AlterGeb) VALUES ('".$_POST['Name']."', '".$_POST['Vorname']."', '".$_POST['age']."')";
mysql_query(q1);
echo mysql_error();

was die Variablennamen angeht solltest du dich darauf einigen ob du generell groß oder kleinschrift verwendest - wegen der besseren Lesbarkeit nehme ich immer kleinschrift. Weiter nehme ich generell deutsche variablennamen, da ist die chance reservierte namen zu verwenden geringer. Ein misch aus groß kleinschrift und deutschen und englischen variablennamen ist bei größeren Seiten meist sehr unübersichtlich, vor allem wenn man den richtigen Namen der Variable weis aber nachschauen muss ob man die groß oder klein geschrieben hat.

Antwort 5 von Tumulus

hallo...

vielen dank für die guten beiträge. ich hab das alles ausprobiert. wenn ich jetzt nur auf den "abschicken"-button klicke, dann wird in mysql eine leere zeile eingefügt (> immerhin ein kleiner erfolg !). allerdings schreibt er nichts in die datenbank, wenn ich werte in die felder eintrage. die felder sind richtig formatiert (varchar). ich versteh es einfach nicht. auch wenn ich ins php das echo $_POST('Name'); aufnehme, bringt er nichts....

das eingabeformular ist auf:
www.meetball.de/eingabe.html

und das php auf:
www.meetball.de/lux.php (umbenannt von vorher eingabe.php)

bin für weiteren support dankbar.

gruß

Antwort 6 von Tumulus

.... ES FUNKTIONIERT !!!!

D A N K E !!!!

Antwort 7 von rabies

Um uns nicht ganz unbehelligt zu lassen: Woran lag's denn und was hast Du geändert, dass es urplötzlich funktioniert?

Andere Nutzer, die vor ähnlichen Problemen stehen, werden es Dir danken.

Antwort 8 von rabies

Zusätzlich:
echo $_POST('Name');
kann zu keiner Ausgabe führen, Du musst
echo $_POST['Name'];
nutzen.

--rabies.

Antwort 9 von Tumulus

Hi,

es lag schlichtweg - wie Du gesagt hattest - an den Hochkommas bzw. Gänsefüsschen. Das war "schon" alles. Nochmals vielen Dank !!

Gruß