[PHP/MySQL] in datenbank schreiben

mi2g

Lieutenant
Registriert
Apr. 2003
Beiträge
1.021
ich wollte mal ein bisschen mit php/mysql arbeiten. bin noch totaler anfänger und wollte mal ein kleines guestbook erstellen. jetzt am anfang wollte ich nur mal machen, dass der name in die datenbank geschrieben wird. das hab ich so gemacht:

PHP:
<?php
$dbh=mysql_connect ("localhost", "fiechter_mi2g", "***");
mysql_select_db ("fiechter_gb");

?>
<form action="schreiben.php" method="post">
Name: <input type=text name="name" size=20><br>
Text: <textarea cols=30 rows=7 name="text"></textarea><br>
<input type=submit value=senden></form>
<?php
$nameins = "INSERT INTO gb (Name) VALUES ($name)";
mysql_query($nameins);
?>

die daten werden nicht in die tabelle geschrieben wo liegt der fehler?
 
Zuletzt bearbeitet von einem Moderator: (Bitte PHP-Tags verwenden!)
Re: [php/mysql] in datenbank schreiben

Hast du Register_globals an?

lass dir mals das SQL-Statement klartext ausgeben. ist es denn korrekt?
 
Re: [php/mysql] in datenbank schreiben

????
:D
ich habe leider noch nicht gross ahnung.
was ist register_globals und wie aktivier ich die?
und wie lass ich mir die sql statements im klartext ausgeben?
 
Re: [php/mysql] in datenbank schreiben

so jetzt funktionierts der fehler lag da:
$nameins = "INSERT INTO gb (Name) VALUES ($name)";
es sollte so sein:
$nameins = "INSERT INTO gb (Name) VALUES ('$name')";
die hochzeichen bei der variabel $name fehlten.

könntest du mir dohc noch sagen, wie ich mir die sql statement im klartext ausgeben lasse?
und was hat es mit dem global_register auf sich?
 
Re: [php/mysql] in datenbank schreiben

Hast du jetzt den Inhalt der Variablem in der DB oder steht da jetzt als Test "$name" drin (was ich vermute).
Gib den SQL-String einfach mit echo aus.
Dann haste Klartext ;)

Die Variable $name wird bzw. sollte nicht funktionieren. (Ermöglicht Sicherheitslücken)
Ersetzt die durch $_POST["name"]


PHP:
$nameins = 'INSERT INTO gb (Name) VALUES ("'.$_POST["name"].'")';
 
Re: [php/mysql] in datenbank schreiben

ok thx.
("'.$_POST["name"].'")
das mit . vorne und hinten?
 
Re: [php/mysql] in datenbank schreiben

der Punkt fügt in PHP Zeichenketten zusammen.
Ist notwendig weil Anführungszeichen Teil des Variablennamen sind.

über $_POST["abc"] bzw $_GET["abc"] bekommst du die Werte, die mittels post bzw. get ans übertragen wurden.
 
Zuletzt bearbeitet:
Re: [php/mysql] in datenbank schreiben

richtiger Code wäre beispielsweise
PHP:
<form action="<?= $PHP_SELF ?>" method="post">
Name: <input type=text name="name" size=20><br>
Text: <textarea cols=30 rows=7 name="text"></textarea><br>
<input type=submit value=senden></form>

<?php
if (isset($senden)) {

$dbh=mysql_connect ("localhost", "fiechter_mi2g", "***");

mysql_select_db ("fiechter_gb", $dbh);

$nameins = "INSERT INTO gb (Name) VALUES (\"" . $name. "\")";

mysql_query($nameins);

mysql_close($dbh);

}
?>

$PHP_SELF ist dafür da, das Formular an sich selbst zu senden, denn erst wenn das Formular gesendet worden ist existiert $name.
isset($senden) prüft ob das Formular gesandt worden ist, denn sonst braucht man keine Datenbankverbindung (wie gesagt und $name ist leer).

der eigentlich SQL-String muss lauten
INSERT INTO bg (Name) Values ("inhalt inhalt inhalt")
\" fügt anführungszeichen in einen Text ein, quasi gibt das echo den oberen insert befehl aus
PHP:
echo "INSERT INTO bg (name) VALUES (\"inhalt inhalt inhalt\")";
um eine Variable in Text einzubetten muss man den text mit " beenden und mit einem . mit der Variable verbinden, daher muss es heissen
PHP:
 $sql = "INSERT INTO bg (Name) VALUES (\"" . $name . "\")";

naja etwas konfus, aber wenn du nähre fragen hast schreib einfach
 
Zuletzt bearbeitet:
Re: [php/mysql] in datenbank schreiben

PHP:
<form action="<?= $PHP_SELF ?>" method="post"> 
Name: <input type=text name="name" size=40><br> 
E-Mail: <input type=text name="email" size=40><br
Homepage: <input type=text name="website" size=40><br
Text: <textarea cols=30 rows=7 name="text"></textarea><br> 
<input type=submit value=senden></form> 
<?php 
if (isset($senden)) 
{ 
$dbh=mysql_connect ("localhost", "fiechter_mi2g", "***"); 
mysql_select_db ("fiechter_gb", $dbh); 
$ins = "INSERT INTO `gb` ( `Name` , `E-Mail` , `Website` , `Text` ) 
VALUES ('.$_POST["name"].', '.$_POST["email"].', '.$_POST["website"].', '.$_POST["text"].')"; 
mysql_query($ins); 
mysql_close($dbh); 
} 
?>

hab es jetzt mal so gemacht habe die felder erweitert.
sollte es so funktionieren?
es kommt leider immer dieser fehler:
Parse error: parse error, unexpected '\"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/fiechter/public_html/php/gaestebuch2/schreiben2.php on line 15
 
Zuletzt bearbeitet von einem Moderator: (Bitte PHP-Tags verwenden!)
Re: [php/mysql] in datenbank schreiben

Blutschlumpf schrieb:
der Punkt fügt in PHP Zeichenketten zusammen.
Ist notwendig weil Anführungszeichen Teil des Variablennamen sind.

über $_POST["abc"] bzw $_GET["abc"] bekommst du die Werte, die mittels post bzw. get ans übertragen wurden.


^^wenn du schon innerhalb von anfürhungszeichen schreibst, kannst du die in den eckigen klammern weglassen.

PHP:
echo "Hallo, $_POST[Name]";

^^das sollte von daher auch gehen.
 
Re: [php/mysql] in datenbank schreiben

so das hab ich geändert und es kommt kein fehler mehr. jedoch wird das feld website und text gar nicht gezeigt ich kann nur ins feld name und e-mail was schreiben. an was liegt das? und es trägt nicht in die db ein. :(
 
Re: [php/mysql] in datenbank schreiben

mi2g schrieb:
so das hab ich geändert und es kommt kein fehler mehr. jedoch wird das feld website und text gar nicht gezeigt ich kann nur ins feld name und e-mail was schreiben. an was liegt das? und es trägt nicht in die db ein. :(


Schau Dir mal die <BR> an. Die sind nicht geschlossen. Ist nen simpler HTML-Fehler.

Ciao
 
Re: [php/mysql] in datenbank schreiben

stimmt. jetzt werden die felder alle dargestellt. jedoch trägt es immer noch nicht in die db ein.
 
Re: [php/mysql] in datenbank schreiben

Du hast auch noch Fehler in deinem SQL-Statement.

Bitte sorg doch dafür, dass alle Strings sich in ' befinden.

Sonst erkennt SQL sie ned als Zeichenketten.
 
Re: [php/mysql] in datenbank schreiben

wie meinst du genau? was muss ich bearbeiten? hier nochmal der code.
PHP:
<form action="<?= $PHP_SELF ?>" method="post"> 
Name: <input type=text name="name" size=40><br> 
E-Mail: <input type=text name="email" size=40><br>
Homepage: <input type=text name="website" size=40><br>
Text: <textarea cols=30 rows=7 name="text"></textarea><br> 
<input type=submit value=senden></form> 
<?php 
if (isset($senden)) 
{ 
$dbh=mysql_connect ("localhost", "fiechter_mi2g", "***"); 
mysql_select_db ("fiechter_gb");
$ins = "INSERT INTO 'gb' ('Name', 'E-Mail', 'Website', 'Text') 
VALUES ('.$_POST[name].', '.$_POST[email].', '.$_POST[website].', '.$_POST[text].')"; 
mysql_query($ins); 
mysql_close($dbh); 
} 
?>



Die Variable $name wird bzw. sollte nicht funktionieren. (Ermöglicht Sicherheitslücken)
Ersetzt die durch $_POST["name"]

wo ist da ein sicherheitsrisiko und was könnte passieren?
 
Zuletzt bearbeitet von einem Moderator: (Bitte PHP-Tags verwenden!)
Re: [php/mysql] in datenbank schreiben

versuch mal ein

$SQL="INSERT INTO GB (Name,E-Mail,Website,Text)VALUES('$_POST[Name]','$_POST[E-Mail]','$_POST[Website]','$_POST[Text]',])";

Und dann führ das SQL-Statement aus.



das Sicherheitsrisiko wäre zB, wenn ich deine seite so aufrufe:

http://link_zum_script.php?name=ich','nerv@mich.net','http://learn.to/cool.down','tja') --

^^diese Variable "name" würdest du per GET bekommen und nicht per Post, aber wenn du nur auf $name zugreiffst, ist egal, woher die Variable kommt.
 
Zuletzt bearbeitet:
Re: [php/mysql] in datenbank schreiben

funktioniert so nicht.
aber kann es sein, dass am schluss eine ] zu viel ist oder irgendwo vorne [ eine fehlt? funktioniert auch nicth wenn ich sie rausnehme :(
:D
 
Re: [php/mysql] in datenbank schreiben

mach mal direkt vorm ausführen der MySQL-Anfrage ein echo $ins;
schau mal, ob das ausgegeben wird.

wenn nicht, mach mal aus $senden ein $_POST["senden"]
 
Re: [php/mysql] in datenbank schreiben

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ']' in /home/fiechter/public_html/php/gaestebuch2/schreiben2.php on line 12

diesen fehler hat es. :(
die line 12 sieht bei mir so aus:

$ins= "INSERT INTO 'gb' ('Name', 'E-Mail', 'Website', 'Text') VALUES ('$_POST[Name]', '$_POST[E-Mail]', '$_POST[Website]', '$_POST[Text]')";
 
Re: [php/mysql] in datenbank schreiben

PHP:
$ins = "INSERT INTO gb (Name, E-Mail, Website, Text) 
VALUES (\" . $_POST[name] . "\", \"" . $_POST[email] . "\", \"" . $_POST [website] . "\", \"" . $_POST[text] . "\")";
sollte der richtige Code sein, da Datenbankname und Datenfeldbezeichnungen keine textfelder sind und mit einem einfachen ' hast du nur die Stringteile mit den variablen verbunden, nicht aber anführungszeichen in den String eingegeben.
Falls Du mal nicht weisst was richtig ist mach einfach echo $ins; und es müssen die Dinge, die Text sind und in die Datenbank sollen mit Anführungszeichen dargestellt werden, also so
INSERT INTO gb (name, e-mail, website, text) VALUES ("karl", "karl@heinz.de", "www.lala.de", "hallo!")
 
Zurück
Oben