Gästebuch mit MySQL
Robert
- php
0 Benedikt Loepp0 Vimes0 wahsaga0 Andavos0 nurso0 Robert
Huhu,
also ich mache mir n GB mit MySQL und PHP. In einer gaestebuch.php hab ich halt das formular wo man die daten eingibt und die werden dann per get an die eingabe.php geschickt.. Diese sieht so aus:
<?php
$new_user = $_GET['new_name'];
$email = $_GET['new_email'];
$hp = $_GET['new_hp'];
$input = $_GET['new_input'];
$datum = date('Y-m-d');
$zeit = date('H-i-s');
$host = "localhost";
$user = "";
$pw = "";
$verbindung = mysql_connect($host,$user,$pw) or die("Konnte Verbindung nicht herstellen");
$eintrag = INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit);
Genau in der obigen Zeile kommt ein Parse error .. :-(( Was habe ich falsch gemacht??
$sql = SELECT * FROM gb;
$ergebnis = mysql_query($sql,$verbindung);
while($row = mysql_fetch_objects($ergebnis))
{
echo "<p>", $row->Name, " " , "( " , $row->Email , " )" , " eingetragen am " , $row->Datum , " um " , $row->Zeit , "<br><br>" , $row->Text , "</p>";
}
mysql_close($verbindung);
?>
Ich hoff ihr könnt mir helfen *g*
cu
Robert
Hallo,
Anführungsstriche???
$eintrag = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)";
cu Benedikt Loepp
Moin,
$eintrag = INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit);
Genau in der obigen Zeile kommt ein Parse error .. :-(( Was habe ich falsch gemacht??
Schätze, du hast die Anführungszeichen "" um das Insert-Statement vergessen.
hi,
$eintrag = INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit);
Genau in der obigen Zeile kommt ein Parse error .. :-(( Was habe ich falsch gemacht??
INSERT INTO ist kein php-befehl, du kannst ihn also nicht einfach so einer variable zuweisen.
mach zunächst mal einen string daraus:
$eintrag = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)";
(ich glaube, um die werte in der klammer hinter values müssen übrigens noch anführungszeichen.)
damit hast du erstmal deine mysql-query erstellt.
um diese jetzt auch auszuführen, musst du sie aber erstmal an die DB übergeben,
$ergebnis = mysql_query($eintrag);
zum debuggen empfiehlt es sich, zusätzlich noch eine auswertung eventueller fehler vorzunehmen, also stattdessen
$ergebnis = mysql_query($eintrag) or die(mysql_error());
verwenden.
gruss,
wahsaga
Hallo,
du musst erst bestimmen welche Datenbank er aufrufen soll.
Und übermittel die Daten per POST, denn mit Get kann die Nachricht nur 255 Zeichen oder so lang sein (weil eine URL nicht länger sein kann).
MFG
Andavos
Hallo
$eintrag = "(Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)";
mysql_query("Insert into gb $eintrag");
das sollte helfen.
ich verstehe nicht warum du mit get arbeitest.
post ist für formulare doch viel besser nutzbar.
bei get hast du eine größen begrenzung. auch werden die werte über dir url übergeben.das ermöglicht ein verändern der vars nach dem absenden.
denn nach dem abschicken des formulars siehst du in der url deine varnamen und ihre werte.
hier kannst du die werte verändern und evt. schädlichen code einpflegen.
Hi,
ah danke ^^... Ich hatte die " überall vergessen ... Nun habe ich es korrigiert :-). Wenn ich nun was eintrage dann erscheint der eintrag jedoch nicht.. Kann das sein, dass die Schleife falsch ist, mit der ich die Einträge ausgebe??
Hier der Code:
[...]
$verbindung = mysql_connect($host,$user,$pw) or die("Konnte Verbindung nicht herstellen");
$eintrag = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)";
$sql = "SELECT * FROM gb";
$ergebnis = "mysql_query($sql,$verbindung)" or die(mysql_error());
while($row = "mysql_fetch_objects($ergebnis)")
{
echo "<p>", $row->Name, " " , "( " , $row->Email , " )" , " eingetragen am " , $row->Datum , " um " , $row->Zeit , "<br><br>" , $row->Text , "</p>";
}
mysql_close($verbindung);
[...]
Was ist daran falsch?
Danke
Robert
Hallo,
wie wahsaga schon sagte - du musst den Eintrag auch erst in die Datenbank schreiben - einfach nur den Querystring einer Variable zuzuweisen bringts noch nicht...
cu Benedikt Loepp
Hi,
$verbindung = mysql_connect($host,$user,$pw) or die("Konnte Verbindung nicht herstellen");
$eintrag = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)";
$sql = "SELECT * FROM gb";
$ergebnis = mysql_query($sql,$verbindung) or die(mysql_error());
while($row = mysql_fetch_objects($ergebnis))
{
echo "<p>", $row->Name, " " , "( " , $row->Email , " )" , " eingetragen am " , $row->Datum , " um " , $row->Zeit , "<br><br>" , $row->Text , "</p>";
}
mysql_close($verbindung);
Ich schreibe doch $eintrag = "INSERT INTO ... usw.
Reicht das etwa net? Was ist an dem Code falsch?
Danke
Robert
hi,
Ich schreibe doch $eintrag = "INSERT INTO ... usw.
Reicht das etwa net? Was ist an dem Code falsch?
nein, tut es nicht.
hier an dieser stelle
$sql = "SELECT * FROM gb";
$ergebnis = mysql_query($sql,$verbindung) or die(mysql_error());
machst du es richtig - zuerst die query definieren, und diese dann mit der funktion mysql_query() an die datenbank zur ausführung übergeben.
an dieser stelle
$eintrag = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)";
definierst du aber lediglich eine query, ohne sie danach auszuführen.
tu' dir (und uns) einen gefallen, und arbeite dich erstmal anhand eines einfachen einsteiger-tutorials wie z.b. diesem hier http://www.schattenbaum.net/php/mstart.php in die grundlagen der kommunikation ziwschen php und mysql ein, sonst wird bei deinen versuchen wohl auf längere zeit nichts wirklich brauchbares heruaskommen.
gruss,
wahsaga
Hi,
alles klar und danke für den Tipp *g* Aber ihr habt mir schonma weitergeholfen :-)).
Man sieht sich
Robert
Aloa he
Ah I see ^^ man muss das mit einem $e = mysql_query($eintrag); machen ^^ dann wird es erst ausgeführt *gg* Aber es funzt trotzdem net ... Ich hab echt kA was jetzt falsch ist .. Ich poste auch mal die guesbook.php:
[...]
<table border="0" style="width:100%;height:50%" cellspacing="0" cellpadding="0">
[...] <form name="formular" action="<?PHP echo $_SERVER['PHP_SELF']; ?>" method="POST" tabindex="1">
[...]
<input type="text" name="new_name">
[...]
<input type="submit" value="Eintragen" name="submit">
[...]
Oben habe ich halt die ganzen Eingabefelder gemacht.. Kann man das mit dem $_SERVER['PHP_SELF']; so machen oder ist da schon n Fehler?
</table>
<hr>
<?php
require "gb.php";
?>
[...]
Hier hab ich dann halt die Datei gb.php per require eingefügt...
Soweit alles richtig?
Dann die neue gb.php
<?php
If ($new_user <> "" && $input <> "") {
$new_user = $_POST['new_name'];
$email = $_POST['new_email'];
$hp = $_POST['new_hp'];
$input = $_POST['new_input'];
$datum = date('Y-m-d');
$zeit = date('H-i-s');
$host = "localhost";
$user = "";
$pw = "";
$verbindung = mysql_connect($host,$user,$pw) or die("Konnte Verbindung nicht herstellen");
$var = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)";
$eintrag = mysql_query($var);
$sql = "SELECT * FROM gb";
$ergebnis = mysql_query($sql,$verbindung) or die(mysql_error());
while($row = mysql_fetch_objects($ergebnis))
{
echo $row->Name; //Ich wollte zum test erstmal nur den namen ausgebe
}
mysql_close($verbindung);
}
?>
Ich hoffe ihr könnt mir genau sagen was falsch ist ...
Danke
Robert
Hallo,
If ($new_user <> "" && $input <> "") {
Hast du mal überprüft ob er hier korrekt reinspringt?
Gib dir im If-Block einfach mal irgendwas aus.
$new_user existiert nämlich noch gar nicht, nur $_POST['new_name']
cu Benedikt Loepp
Hallo,
daran lag es auch net .. Wenn ich nun Daten eingebe erscheint folgende Fehlermeldung:
Fatal error: Call to undefined function: mysql_fetch_objects() in [...]gb.php on line 27
Hier der Ausschnitt aus dem Code:
$verbindung = mysql_connect($host,$user,$pw) or die("Konnte Verbindung nicht herstellen");
$var = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)";
$eintrag = mysql_query($var,$verbindung);
$sql = "SELECT * FROM gb";
$ergebnis = mysql_query($sql,$verbindung) or die(mysql_error());
while($row = mysql_fetch_objects($ergebnis)) //<-- Line 27
{
echo $row->Name;
}
Ich hoffe, ihr findet den Fehler .. Ich bin mir auch net mal sicher ob er die Daten überhaupt in die Tabelle einträgt :-((
Danke Robert
Hallo,
Fatal error: Call to undefined function: mysql_fetch_objects() in [...]gb.php on line 27
logisch - die Funktion heißt: mysql_fetch_object()
Setze dich doch vielleicht mal mit den Funktionen und so im allgemeinen auseinander - wie wahsaga schon sagte.
Ein kurzer Blick in eine Funktions-Referenz hätte dir deinen Fehler offenbart.^^
cu Benedikt Loepp
Alles klar^^
Ich hab das Skript etwas umgeschrieben ^^ Aber es wird, so glaube ich, nichts eingetragen in die DB :-(((. Hier der neue Code...
Ist dort was fehlerhaft?
guestbook.php:
[...] dort oben ist nur die Tabelle zum eingeben der Daten mit form action="gb.php" method="post"...
<hr>
<?php
$verbindung = mysql_connect("localhost","menager","") or die("Konnte Verbindung net herstellen");
$v = "SELECT * FROM gb";
$ergebnis = mysql_query($v,$verbindung);
while($row = mysql_fetch_object($ergebnis)) {
echo $row->Name, "<br><br>", $row->Text; }
mysql_close($verbindung);
?>
[...] Endtags...
Hier die gb.php:
</html>
<body>
<?php
$new_user = $_POST['new_name'];
$email = $_POST['new_email'];
$hp = $_POST['new_hp'];
$input = $_POST['new_input'];
$datum = date('Y-m-d');
$zeit = date('H-i-s');
$host = "localhost";
$user = "menager";
$pw = "";
$verbindung = mysql_connect($host,$user,$pw) or die("Konnte Verbindung nicht herstellen");
$var = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)" or die("Konnte nix eintragen"); // hier müsste doch n Fehler kommen
$eintrag = mysql_query($var,$verbindung);
mysql_close($verbindung);
?>
<center>Vielen Dank für ihren Eintrag im Gästebuch!</center>
<br><br><br><br>
<center><a href="guestbook.php">Hier geht's zurück zum Gästebuch</a></center>
</body>
</html>
Naja ich hoffe ihr wisst weiter ...
Danke
Robert
hi,
Ich hab das Skript etwas umgeschrieben ^^ Aber es wird, so glaube ich, nichts eingetragen in die DB :-(((. Hier der neue Code...
Ist dort was fehlerhaft?
$var = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)" or die("Konnte nix eintragen"); // hier müsste doch n Fehler kommen
du weisst hier einer variablen einen string zu, und willst dann mit or die dein script abbrechen, falls dies nicht geklappt haben sollte - was aber ein äusserst unwahrscheinlicher fall ist.
$eintrag = mysql_query($var,$verbindung);
erst _hier_ wird die query an die datenbank übergeben (wie es dir im verlaufe dieses thread schon explizit erklärt wurde!) - also macht auch erst an dieser stelle das abbrechen mit or die() einen sinn.
würdest du jetzt endlich mal die güte besitzen, dir erstmal ein paar der absoluten grundlagen anzulesen (links wurden dir ja schon genannt), bevor du mit jedem neuen blöden (logischen) fehler wieder hier angerannt kommst?
gruss,
wahsaga
Hi,
mein Gott, müsst ihr immer auf mir rumhacken nur weil ich n Anfänger bin ^^. Mag ja nervig sein für euch, dass seh ich ja auch ein, aber könntet ihr mir trotzdem helfen... Ich hab rausgefudnen, dass es bei dem Eintragen in die Tabelle einen Fehler gibt ... Doch ich weiss net wieso??? Also liegt es nun an den beiden Zeilen:
$var = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)";
$eintrag = mysql_query($var,$verbindung) or die("Fehler beim Eintragen");
Könnt ihr mir sagen was daran falsch ist? Ich habe auch schon von Hand Daten in die Tabelle eingegeben.. Die werden richtig ausgegeben... Nur eintragen funzt net :-((
Bin dankbar für jeden Tipp
Robert
hi,
mein Gott, müsst ihr immer auf mir rumhacken nur weil ich n Anfänger bin ^^.
du hast schon reichlich hilfreiche hinweise bekommen - aber du ignorierst sie ja konsequent!
Mag ja nervig sein für euch, dass seh ich ja auch ein, aber könntet ihr mir trotzdem helfen...
du bist wirklich langsam ein fall für http://www.leo.org/information/freizeit/fun/merkbefrei.html.
Ich hab rausgefudnen, dass es bei dem Eintragen in die Tabelle einen Fehler gibt ... Doch ich weiss net wieso???
wie auch? du scheinst ja an der originalen fehlermeldung der DB nicht interessiert zu sein, sondern gibst stattdessen lieber deine eigene, wenig informative meldung "Fehler beim Eintragen" aus.
$eintrag = mysql_query($var,$verbindung) or die("Fehler beim Eintragen");
du hast im verlaufe dieses threads von mir schon mal den hinweis bekommen, dass du mit mysql_error() arbeiten sollst!
also, nochmal langsam für dich zum mitschreiben:
$eintrag = mysql_query($var,$verbindung) or die(mysql_error());
UND NOCHMAL DER HINWEIS: BITTE BESCHÄFTIGE DICH MIT DEN G-R-U-N-D-L-A-G-E-N!
http://www.schattenbaum.net/php/mstart.php
gruss,
wahsaga
Hi,
ich habe mir die Grundlagen schon durchgelesen ... Das mit error() habsch jetzt geändert .. Und hat mich prompt auf den Fehler aufmerksam gemacht *g*. Nun hab ich alles korrigiert und es läuft alles wie ich es wollte :-)) Ich danke allen, die sich in diesem Thread die Mühe gemacht haben, mir zu helfen. Ach ja, das Problem war:
$var = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ('$new_user', '$email', '$hp', '$input', '$datum', '$zeit')";
Um die Variablen mussten ' ^^
Machts gut
Robert
Hallo Robert,
$verbindung = mysql_connect("localhost","menager","") or die("[...]");
hier musst du noch die Datenbank auswählen (mit mysql_select_db() siehe http://de.php.net/mysql_select_db)
$v = "SELECT * FROM gb";
schau dir mal http://www.dclp-faq.de/q/q-sql-select.html an.
echo $row->Name, "<br><br>", $row->Text; }
du weißt, dass das Zeichen um Zeichenketten zu verknüpfen eigentlich der Punkt ist? (siehe http://de.php.net/language.operators.string) - es funktioniert aber trotzdem, da echo ein oder mehrere mit einem Komma getrennte Strings erwartet.
$datum = date('Y-m-d');
$zeit = date('H-i-s');
das ist unnötig - lass mysql die Datumssachen selbst erledigen (entsprechende Spaltentyp nicht vergessen (->http://www.mysql.de/doc/de/Date_and_time_types.html) die Spalte kannst du mit NOW() auf den aktuellen Wert setzen, und ausgelesen wird das mit http://www.mysql.de/doc/de/Date_and_time_functions.html.
$verbindung = mysql_connect($host,$user,$pw) or die("[...]");
hier ebenfalls noch mysql_select_db() (s.o.)
$var = "INSERT INTO gb (Name, Email, Homepage, Text, Datum, Zeit) VALUES ($new_user, $email, $hp, $input, $datum, $zeit)"
um die Werte die du einträgst gehört ein Anführungszeichen (wenn du Text einträgst - bei Zahlen nicht)
or die("Konnte nix eintragen");
*argh* (siehe Antwort von wahsaga)
<center>Vielen Dank für ihren Eintrag im Gästebuch!</center>
mal abgesehen von dem üblen <center> - es wird auch ein Eintrag angelegt, wenn der User überhaupt nichts eingegeben hat...
Grüße aus Nürnberg
Tobias
hi,
Wenn ich nun was eintrage dann erscheint der eintrag jedoch nicht..
hast du denn schon kontrolliert, ob die einträge überhaupt korrekt in die DB übernommen wurden (phpmyadmin o.ä.)?
Kann das sein, dass die Schleife falsch ist, mit der ich die Einträge ausgebe??
while($row = "mysql_fetch_objects($ergebnis)")
jetzt übertreibst du es gleich wieder mit den anführungszeichen - mysql_fetch_objects ist ein befehl, da gehören keine drum herum.
while($row = mysql_fetch_objects($ergebnis))
gruss,
wahsaga
hi,
while($row = "mysql_fetch_objects($ergebnis)")
jetzt übertreibst du es gleich wieder mit den anführungszeichen - mysql_fetch_objects ist ein befehl, da gehören keine drum herum.
while($row = mysql_fetch_objects($ergebnis))
p.s.: das gleiche gilt natürlich weiter oben auch, z.b. bei
$ergebnis = "mysql_query($sql,$verbindung)" or die(mysql_error());
gruss,
wahsaga
Hi,
wie soll ich n das testen? Ob die Daten in der db sind?
Ich fange gerade an mich mit der MySQL Datenbank auseinanderzusetzten ...
Danke
Robert
hi,
wie soll ich n das testen? Ob die Daten in der db sind?
Ich fange gerade an mich mit der MySQL Datenbank auseinanderzusetzten ...
ich erwähnte ja bereits das stichwort phpmyadmin.
das ist ein in php geschriebenes tool, mit dem du mysql-datenbanken leicht erstellen/bearbeiten/ihre inhalte anzeigen/abfragen testen kannst, etc.
gruss,
wahsaga