• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Gästebuch - finde den Fehler nicht

Gangsta

Neues Mitglied
hey leutz,

Ich habe mir von der Seite einfaches Gästebuch für eigene Homepage den PHP-Code für ein eigenes Gästebuch geholt.

Dieser schaut wie folgt aus: (guestbook.php)

HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Gangstas G&auml;stebuch</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link href="stylesheet.css" rel="stylesheet" type="text/css" />

    
</head>
<body>

  <table border="0">
    
      
    <th>
    <div style="width:600px" id="guest">
<h1 id="guest1">G&auml;stebuch</h1>
<form action="guestbook.php" method="post">
Dein <strong>Name</strong>:<br>
<input type="text" name="Name" id="Name" /><br>
Homepage (freiwillig):<br>
<input type="text" name="Home" id="Home" /><br>
Deine <b>Botschaft</b>:<br>
<textarea cols="65" rows="5" name="Kommentar" id="Kommentar"></textarea><br>
Ziehe vom Jahr (YYYY) den Tag (TT) ab:<br>
<input type="text" name="resultat" maxlenght="4" /><br>
<input type="submit" value="Zur&uuml;cksetzen" name="reset" />
<input type="submit" value="Eintragen!" name="submit" />
</form>
PHP:
<?php
$start = 0;
$step = 4;

if (isset($_GET["start"])) {
$muster = "/^[0-9]+$/";
if (preg_match($muster, $_GET["start"]) == 0) {
$start = 0;
} else {
$start = $_GET["start"];
}
}
$nr = $start + 1;


include("zugriff.php");

if (isset($_POST["submit"])) {

$Name = $_POST["Name"];
$Home = $_POST["Home"];
$Kommentar = $_POST["Kommentar"];
$resultat = $_POST["resultat"];



$endwert = date("Y") - date("j");
$fehler = false;
$fehlertext = "<p>";

if (empty($Name)) {
$fehler = true;
$fehlertext .= "Der Name fehlt!<br>";
}

if (empty($Kommentar)) {
$fehler = true;
$fehlertext .= "Bitte einen Kommentar eintragen!<br>";
}

if (!$fehler && (empty($resultat) || $resultat != $endwert)) {
$fehler = true;
$fehlertext .= "Test nicht bestanden!";
}

if ($fehler) {
echo "$fehlertext</p>";
die("</div></body></html>");
}
else {
$datum = date("d.m.Y, H:i") . "Uhr";
$sql = "INSERT INTO guestbook (Name, Home, Datum, Kommentar, Zeigen)
VALUES ('$Name', '$Home', '$datum', '$Kommentar', '1')";

mysql_query($sql);

if (mysql_affected_rows() > 0) {
echo "<h3>Eintrag erfolgreich</h3>";
}
else {
echo "<h3>Eintrag nicht erfolgreich!</h3>";
}
}
}

$sql1 = "SELECT * FROM guestbook WHERE Zeigen = 1";
$sql2 = "SELECT * FROM guestbook WHERE Zeigen = 1 ORDER BY id DESC LIMIT $start, $step";
$result1 = mysql_query($sql1);
$zeilen = mysql_num_rows($result1);
$result2 = mysql_query($sql2);

for ($i = 0; $zeilen > $i; $i = $i + $step) {
$anf = $i + 1;
$end = $i + $step;
if ($end > $zeilen) {
$end = $zeilen;
}
if ($anf == $end) {
echo "[ <a href=\"guestbook.php?start=$i\">$end</a> ]";
}
else {
echo "[ <a href=\"guestbook.php?start=$i\">$anf-$end</a> ]";
}
}
echo "<h2>Bisherige Einträge:</h2>";
echo "<p>Anzahl der Einträge: $zeilen</p>\n";
// while-Schleife Anfang
while($row = mysql_fetch_assoc($result2)) {
echo "<p><strong>$nr.</strong> <b>"
. htmlspecialchars($row["Name"]) . "</b> ";
if (!empty($row["Home"])) {
echo "(" . htmlspecialchars($row["Home"]) . ")";
}
echo "<br>--&gt; schrieb am " .
"<strong>" . $row["Datum"] . "</strong>:</p>" .
"<p>" . nl2br(htmlspecialchars($row["Kommentar"])) .
"</p><hr>\n";
$nr++;
} // while Ende
mysql_close();
?>
HTML:
</div>
</th></table>
 <hr /size="2" color="black"/>
    
    <p align="right">
  <img alt="" src="http://gangsta.square7.ch/Homepage/holz_ist_genial.jpg" /></p>
</body>
</html>
und die Zugriffsdaten: (zugriff.php)

PHP:
<?php
@mysql_connect("localhost", "gangsta", "***********") or die("Verbindung konnte nicht hergestellt werden.");
@mysql_select_db("gangsta") or die("Hat die Datenbank nicht laden können.");
?>
Allerdings wird ein Fehler angezeigt, ihr könnt eh mal selber schauen:
gangsta.square7.ch/guestbook.php

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /users/gangsta/www/guestbook.php on line 227

Also ich glaube in der Schleife liegt das Problem (also wo sie anfängt, ist die line 227)

PHP:
// while-Schleife Anfang
while($row = mysql_fetch_assoc($result2)) {
echo "<p><strong>$nr.</strong> <b>"
. htmlspecialchars($row["Name"]) . "</b> ";
if (!empty($row["Home"])) {
echo "(" . htmlspecialchars($row["Home"]) . ")";
}
echo "<br>--&gt; schrieb am " .
"<strong>" . $row["Datum"] . "</strong>:</p>" .
"<p>" . nl2br(htmlspecialchars($row["Kommentar"])) .
"</p><hr>\n";
$nr++;
} // while Ende
Ich bin leider schon am Ende meines Lateins und weiß nicht mehr was falsch ist...

Danke im Voraus für eure Antworten,

LG Gangsta
 
Nein, das Problem ist, dass die Variable $result2 keine Datenbankressource ist. Das liegt vermutlich wiederum daran, dass das mysql_query() wo Du das SQL-Statement ausführen lässt dieses fehlerhaft ausführt. Das liegt vermutlich wiederum daran, dass in dem SQL-Statement ein Fehler ist. Genaueres dazu sollte dir der Einbau von mysql_error() liefern.
 
hi, danke erstmal für deine schnelle Antwort.

Also hab jetzt mal eingebaut und es kommt raus:

PHP:
Eintrag erfolgreich"; } else { echo "Eintrag nicht erfolgreich!"; } } } $sql1 = "SELECT * FROM guestbook WHERE Zeigen = 1"; 
$sql2 = "SELECT * FROM guestbook WHERE Zeigen = 1 ORDER BY id DESC LIMIT $start, $step";
$result1 = mysql_query($sql1); $zeilen = mysql_num_rows($result1); 
$result2 = mysql_query($sql2); for ($i = 0; $zeilen > $i; $i = $i + $step) { $anf = $i + 1; $end = $i + $step;
 if ($end > $zeilen) { $end = $zeilen; } if ($anf == $end) { echo "$end"; } else { echo "$anf-$end"; } } echo "Bisherige Einträge:"; 
echo "Anzahl der Einträge: $zeilen \n";           

while($row = mysql_fetch_assoc($result2)) { echo "$nr." . htmlspecialchars($row["Name"]) . "";
 if (!empty($row["Home"])) { echo "(" . htmlspecialchars($row["Home"]) . ")"; }
 echo "--> schrieb am " . "" . $row["Datum"] . ":
" . "" . nl2br(htmlspecialchars($row["Kommentar"])) . "
\n"; $nr++; } 
mysql_close(); ?>

Also ich versteh da leider nicht viel...
Wüsstest ihr was da falsch ist?

Lg Gangsat
 
Zuletzt bearbeitet:
Benutz doch Bitte die Tags, die zum auszeichnen von Code vorhanden sind, wie z.b. [ php ]
Dann könnte man sich den Code auch vernünftig ansehen
 
Nicht unbedingt. Da Du nur einen Teil gepostet hast, haut das Syntaxhighlighting nicht hin.
 
Sorry Leute, hat sich scho erledigt, bin so ein depp. ;ugl

Hab den mysql Error sowieso falsch eingebunden gehabt und der eigentliche Fehler war, dass ich die Spalte "id" in der Datenbank vergessen hatte einzufügen.
Danke trotzdem für eure schnelle Hilfe,
lg Gangsta
 
Zuletzt bearbeitet:
Zurück
Oben