Gästebuch :: Riesen - Problem
Hallo,
wie ihr wisst, arbeite ich gerade an einem Gästebuch. Darin soll es vorerst 3 besondere Funktionen geben:
- Editieren (von der Person, die den Beitrag geschrieben hat)
- Löschen (vom Administrator)
- E-Mail schreiben (von allen)
All diese Funktionen sind in extra Dateien untergebracht (gb_editieren.php, gb_editieren2.php / gb_loeschen.php / gb_email.php, gb_email2.php).
In all diesen Dateien brauche ich eine ID. Nun dachte ich mir, dass das am einfachsten geht, wenn ich im Start-Script eine Session starte und darin die Variable $id speichere.
Das Problem ist folgendes:
Ich habe ja while($row = mysql_fetch_array($result)). Diese Funktionen werden alle in der while-Schleife definiert. $id kommt so zu Stande: $_SESSION["id"] = $row["id"];. $row["id"] ist logischerweise auch nur in der while-schleife verfügbar, oder zumindest nicht davor. Nun ist das Problem, dass wenn ich $_SESSION["id"] = $row["id"]; in der while-schleife schreibe, dann wird es ja bei jedem Durchlauf neu definiert, was zu einem Fehler führt und meine 3 Funktionen dementsprechend nicht funktionieren.
Also müsste ich $_SESSION["id"] = $row["id"]; vor der while-schleife schreiben, allerdings ist dort ja $row["id"]; noch gar nicht verfügbar.
Was kann ich nun machen? Wisst ihr eine Lösung?
Hier mal das komplette Start-Script, wo das Problem auch auftritt:
P.S. Ich würde mir wünschen, dass jetzt keine Kommentare von den Profis kommen, wie "Das ist aber schlecht programmiert." oder "Das musst du besser machen und das gefällt mir auch nicht.". Ich bin noch Anfänger und bei diesem Script will ich es vorerst belassen, da ich es so verstehe, anders womöglich nicht.
Liebe Grüße,
L.T.M
Hallo,
wie ihr wisst, arbeite ich gerade an einem Gästebuch. Darin soll es vorerst 3 besondere Funktionen geben:
- Editieren (von der Person, die den Beitrag geschrieben hat)
- Löschen (vom Administrator)
- E-Mail schreiben (von allen)
All diese Funktionen sind in extra Dateien untergebracht (gb_editieren.php, gb_editieren2.php / gb_loeschen.php / gb_email.php, gb_email2.php).
In all diesen Dateien brauche ich eine ID. Nun dachte ich mir, dass das am einfachsten geht, wenn ich im Start-Script eine Session starte und darin die Variable $id speichere.
Das Problem ist folgendes:
Ich habe ja while($row = mysql_fetch_array($result)). Diese Funktionen werden alle in der while-Schleife definiert. $id kommt so zu Stande: $_SESSION["id"] = $row["id"];. $row["id"] ist logischerweise auch nur in der while-schleife verfügbar, oder zumindest nicht davor. Nun ist das Problem, dass wenn ich $_SESSION["id"] = $row["id"]; in der while-schleife schreibe, dann wird es ja bei jedem Durchlauf neu definiert, was zu einem Fehler führt und meine 3 Funktionen dementsprechend nicht funktionieren.
Also müsste ich $_SESSION["id"] = $row["id"]; vor der while-schleife schreiben, allerdings ist dort ja $row["id"]; noch gar nicht verfügbar.
Was kann ich nun machen? Wisst ihr eine Lösung?
Hier mal das komplette Start-Script, wo das Problem auch auftritt:
Code:
<html>
<head>
<title>Gästebuch :: Übersicht</title>
<link rel="stylesheet" type="text/css" href="gb_style.css">
</head>
<body>
<?php
session_start();
$ip = $_SERVER["REMOTE_ADDR"];
if(isset($_SESSION["benutzername"]) or isset($_COOKIE["benutzername"]))
{
echo "Eingeloggt als $benutzername";
echo " [<a href=gb_logout.php>Logout";
if(isset($_COOKIE["benutzername"]))
{
echo " - Cookie löschen</a>]";
}
else
{
echo "</a>]";
}
echo "
";
}
?>
<div align="center">
<div class="index">
<?php
include("gb_datenbank.php");
$sql_eintrag = "SELECT `beitrag` FROM `gaestebuch`";
$query_eintrag = mysql_query($sql_eintrag);
$eintrag = mysql_num_rows($query_eintrag);
$sql_counter = "SELECT `beitrag` FROM `gaestebuch`";
$query_counter = mysql_query($sql_counter);
$counter = mysql_num_rows($query_counter);
echo "
";
echo "[b]Wir haben insgesamt ";
echo $counter;
echo " Einträge[/b]";
echo "
";
$sql = "SELECT * FROM `gaestebuch` ORDER BY `id` DESC";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$_SESSION["id"] = $row["id"];
echo "<table cellspacing=1 cellpadding=0>";
echo "<tr>";
echo "<td width=20% class=standard>";
echo "[b]Autor:[/b] ";
echo "<a href=gb_email.php>";
echo $row["name"];
echo "</a>";
echo "
";
echo "[b]Eintrag:[/b] ";
echo $eintrag;
echo "
";
echo "[b]Datum:[/b] ";
echo $row["datum"];
echo "</td>";
echo "<td width=80% class=standard>";
echo $row["beitrag"];
$sql_aenderung = "SELECT `datum_aenderung` FROM `gaestebuch` WHERE `id` = '{$row["id"]}' LIMIT 1";
$query_aenderung = mysql_query($sql_aenderung);
if(mysql_num_rows($query_aenderung) > 0)
{
$array_aenderung = mysql_fetch_array($query_aenderung);
if(!empty($array_aenderung["datum_aenderung"]))
{
echo "
";
echo "<span class=wichtig>";
echo "<u>Letzte Änderung:</u> ";
echo $array_aenderung["datum_aenderung"];
echo "</span>";
}
}
if(isset($_SESSION["benutzername"]) or isset($_COOKIE["benutzername"]))
{
echo "
";
echo "<div align=center>";
echo "[url="gb_loeschen.php"]Eintrag löschen[/url] ";
}
$sql_ip = "SELECT `beitrag` FROM `gaestebuch` WHERE `ip` = '$ip' AND `id` = '{$row["id"]}' LIMIT 1";
$query_ip = mysql_query($sql_ip);
if(mysql_num_rows($query_ip) > 0)
{
if(isset($_SESSION["benutzername"]) or isset($_COOKIE["benutzername"]))
{
echo "[url="gb_editieren.php"]Eintrag editieren[/url]";
}
else
{
echo "
";
echo "<div align=center>";
echo "[url="gb_editieren.php"]Eintrag editieren[/url]";
echo "</div>";
}
}
echo "</div>";
echo "</td>";
echo "</tr>";
echo "</table>";
$eintrag--;
}
?>
[url="gb_eintragen.html"]Neuen Eintrag verfassen[/url]
</div>
<?php
if(!isset($_SESSION["benutzername"]) and !isset($_COOKIE["benutzername"]))
{
echo "<a href=gb_login.html>Admin-Login</a>";
}
?>
</div>
</body>
</html>
P.S. Ich würde mir wünschen, dass jetzt keine Kommentare von den Profis kommen, wie "Das ist aber schlecht programmiert." oder "Das musst du besser machen und das gefällt mir auch nicht.". Ich bin noch Anfänger und bei diesem Script will ich es vorerst belassen, da ich es so verstehe, anders womöglich nicht.
Liebe Grüße,
L.T.M