Problem mit Guestbook: PHP & MYSQL plz help!

Status
Nicht offen für weitere Antworten.

Act of Fate

Erfahrenes Mitglied
Also, ich sitze gerade dabei mit PHP und MYSQL ein stinknormales Gästebuch zu basteln, nur stehe ich gerade vor einem Problem: ICh weiss jetzt nicht genau, ob die DAten gespeichert werden, aber wenn ich sie auslese, dann sehe ich absolut garnichts. Hier der Quellcode::::


//DATEI ZUM EINTRAGEN//
<?php
if (isset($submit))
{
if($name="" || $comment="")

echo "Sie müssen zumindest einen Namen und einem Kommentar abgeben.";

if($email="")

$email="Nicht vorhanden";

if($hp="")

$hp="Nicht vorhanden";
else
{
$user="extreme";
$pw="extreme";
$ip=$REMOTE_ADDR;
$host="127.0.0.1";
$verbindung=mysql_connect($host, $user, $pw);
$database="guestbook";
$sqlinput="INSERT INTO eintrag (datum, ip, name, email, hp, kommentar) VALUES($datum, $ip, $name, $email, $hp, $comment)";
mysql_select_db($database, $verbindung);
if(mysql_query($sqlinput, $verbindung))
echo "Eintrag erfolgreich.";
mysql_close();
}
}
?>

<html>
<head>
<title>Eintrag ins G&auml;stebuch</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
</head>
<body bgcolor="#999999" text="#CCFFCC" leftmargin="0" topmargin="0">
<div align="center">
<br>
<b><font face="Geneva, Arial, Helvetica, san-serif">Eintrag in G&auml;stebuch</font></b><br>
<form name="form1" method="post" action="<? echo $PHP_SELF ?>">
<br>
<table width="70%" border="0" cellspacing="0" cellpadding="1">
<tr>
<td width="26%"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Name:</font></b></td>
<td width="74%">
<input type="text" name="name">
<input type="hidden" name="datum" value="<? $dat=date("Y-m-d H:m:s");?>";
</td>
</tr>
<tr>
<td width="26%"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">E-Mail:</font></b></td>
<td width="74%">
<input type="text" name="email">
</td>
</tr>
<tr>
<td width="26%"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Homepage:</font></b></td>
<td width="74%">
<input type="text" name="hp" value="http://">
</td>
</tr>
<tr>
<td width="26%"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Kommentar:</font></b></td>
<td width="74%">
<textarea name="comment" cols="40" rows="7"></textarea>
</td>
</tr>
<tr>
<td width="26%"><b></b></td>
<td width="74%">
<input type="submit" name="submit" value="Eintragen">
<input type="reset" name="reset" value="L&ouml;schen">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>

//DATEI ZUM AUSGEBEN//
<html>
<body>
<?
$user="extreme";
$pw="extreme";
$host="127.0.0.1";
$verbindung=mysql_connect($host, $user, $pw);
$database="guestbook";
$sqlquery="SELECT * FROM eintrag";
mysql_select_db($database, $verbindung);
$eintrage_alle=mysql_query($sqlquery, $verbindung);
while($myrow=mysql_fetch_row($eintrage_alle))
{
echo $myrow[0];
echo $myrow[3];
echo $myrow[4];
echo $myrow[5];
echo $myrow[1];
echo $myrow[2];
echo $myrow[6];
mysql_close();
}
?>
</body>
</html>




__________________
Visit me: http://www.extreme-designs.de
 
mir ist da was aufgefallen, weiss aber nicht, ob das die Lösung für Dein Problem ist:

Bei dem Befehl mysql_close() musst Du in den Klammern $verbindung mit angeben. Außerdem steht dieser Befehl beidemale innerhalb eines if bzw. while Funktionsblocks

Im Eintragen-Teil fehlt nach dem if eine öffnende geschweifte Klammer (oder fehlt der nur hier, und Du hast vergessen ihn mitzukopieren ?)

Bei dem Befehl mysql_select_db($database,$verbindung) muss (darf) die Verbindung nicht mit angegeben werden: mysql_select_db($database)



so ... jetzt is mir doch noch aufgefallen, wo Dein Fehler ist:

in der SQL-Anweisung INSERT INTO .... müssen die VALUES separat in Hochkommas gesetzt werden.
Das sieht dann in Deinem Fall so aus:
$sqlinput="INSERT INTO eintrag (datum, ip, name, email, hp, kommentar) VALUES(\"$datum\",\"$ip\",\"$name\",\"$email\",\"$hp\",\"$comment\")";


Ich hoffe, daß Dir eine dieser Lösungen hilft ;)

Gruß
Dunsti
 
mein Senf

Hehe, ich will nicht mekern oder so, aber ein paar Hinweise habe ich zu den Postings (primär @dunsti).

Bei dem Befehl mysql_close() musst Du in den Klammern $verbindung mit angeben.

Geringfügiger Einspruch gegen das Wort "muss": wie Du später auch noch beschreibst, kann die Verbindung bei MySQL-Befehlen optional mit angegeben werden. Das ist besonders dann notwendig/hilfreich, wenn mehrere Datenbankverbindungen gleichzeitig geöffnet werden. Das ist aber hier nicht der Fall und drum kann es auch ohne sein.

Außerdem steht dieser Befehl beidemale innerhalb eines if bzw. while Funktionsblocks

Hm, da gebe ich Dunst absolut Recht. Ich überlege gerade was das für einen Vorteil haben könnte, aber ich würde sonst einfach am Anfang der Datei eine Connection aufbauen und sie am Ende wieder abbauen. BTW, ein mysql_close() mehr oder weniger schadet im Notfall nicht ;-) Die Conenction wird dann für die Interpretation der Seite gehalten. Ein weiterer Conect wäre nur notwendig, wenn der Zugriff auf eine andere DB zusätzlich erfolgt. Aber ist hier ja nicht so...

in der SQL-Anweisung INSERT INTO .... müssen die VALUES separat in Hochkommas gesetzt werden.
Das sieht dann in Deinem Fall so aus:
Code:
$sqlinput="INSERT INTO eintrag (datum, ip, name, email, hp, kommentar) VALUES(\"$datum\",\"$ip\",\"$name\",\"$email\",\"$hp\",\"$comment\")";

...das Leid kenne ich auch und die Übersichtlichkeit mit dieser Methode nimmt stark ab. Ich habe es mir daher angewöhnt, derartige Zeichenketten immer mit den Zeichen ' (einfachen Anführungszeichen) einzuschliessen. Dadurch wird ein bischen besser lesbar :)

@Act of fate:
Generell würde ich Dir ein Tool empfehlen, mit dem Du die Inhalt der DB überprüfen kannst. Nix ist frustrierender, als wenn DU nicht weisst, ob das Schreiben in oder das Lesen aus der Datenbank nicht klappt. Mein Tip: nimm z.B. phpMyAdmin für den Zugriff auf die Datenbank, mit den Tool kannst Du die DBs alle locker und per WebInterface konfigurieren.

Da MySql bei Dir lokal läuft kannst Du natürlich auch ein Stück Software verwenden, was direkt auf die DB geht. Tools findest Du hier im Download-Bereich von MySQL.

pypMyAdmin hat den Vorteil, dass Du es auch im Web einsetzten kannst, wo ein direkter Zugriff auf die DB nicht möglich ist. Wenn Du dann zumindest an die Bedienung und an die Limitationen gewöhnt bist, dann klappt das mit dem Tool super einfach.

ufoman2
 
@ufoman: siehste, da hab selbst ich noch was gelernt :)


ich kann also, wenn ich nur eine Verbindung habe, diese bei sämtlichen MySQL-Befehlen weglassen? oder gibt's Ausnahmen?

Gruß
Dunsti
 
Status
Nicht offen für weitere Antworten.
Zurück