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

Gästebuch :: Riesen - Problem

Status
Für weitere Antworten geschlossen.

Anonymous

Neues Mitglied
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:
Code:
<html>
    <head>
	    <title>G&auml;stebuch :: &Uuml;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&ouml;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&auml;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 &Auml;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&ouml;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
 
Werbung:
Ich verstehe nicht ganz was du mit dieser ID willst.

Du kannst denn User sich doch einloggen lassen und dann über eine session die entsprechende id merken. am anfang jeder seite kann dann wieder alles nötige geladen werden...

EDIT:

Oder geht es um die Eintrags ID? die kannst du ja pr get übertragen...
 
Also, ich habe doch in der Datenbank eine Tabelle mit PRIMARY KEY(`id`). Um diese ID handelt es sich.

Diese brauche ich zum Beispiel beim Editieren, da ich ohne diese ID ja nicht bestimmen könnte, welcher Beitrag editiert werden soll.

Beispiel zur Verdeutlichung:
- User XX schreibt einen Beitrag
- User XX will den Beitrag editieren
- Nun klickt er bei seinem Beitrag auf "editieren" und kommt auf die Seite gb_editieren.php, gb_editieren2.php
- Auf diesen 2 Seiten brauche ich ja die ID für den SQL-Befehl, da ich wissen muss, welcher Eintrag editiert wird
- SELECT `beitrag` FROM `gaestebuch` WHERE `id` = '$id'

Das ist schwer zu erklären, naja.

In der while-schleife wird ja solange ein bestimmter Vorgang durchgeführt bis der eigentliche Befehl der Schleife "erfüllt" ist.

In diesem Fall gibt er bei jedem Durchgang einen Eintrag aus. Also name, email, beitrag, datum, id ($row["name"], $row["email"], $row["beitrag"], $row["datum"], $row["id"]).

Das heißt jeder ausgegebene Beitrag hat eine ID und diese brauche ich und diese steht ja in $row["id"].

Ich weiß nicht, wie ich das erklären soll.. :?


Liebe Grüße,
L.T.M
 
Werbung:
Ich habe es nicht mit Sessions etc gemacht, sondern (habe das GB grad keider net hier) habe eine Seite gemacht, wo alle GB-Einträge aufgelistet sind gemacht. Von da aus habe ich per GET auf die Änbderungsdatei verlinkt, und vom Formular per Post (immernoch die ID) auf's updateskipt.

(In forms ID übergeben:
Code:
<input type="hidden" name="id" value="deineid">
)
 
Nachdem du die Einträge aus der db gehollt hast gibst du sie ja aus. in diesem momment kennst du die id jedes beitrags. nun schreibst du in den link der zur löschen / editieren funktionion führt in form einer get var diese id. auf diese kannst du beim verarbeiten zugreifen...

@ Nico: deine variiante ist schwachsinn weill er dann nicht weis welche id er gerade hat oder für jeden eintrag ein extra formular machen müsste...
 
Nein, nicht für jeden Eintrag ein Formular.
Das Formular ist etwa so aufgebaut:
Code:
<form action="edit_finish.php" method="POST">
<textarea name="text"><?php
 //Ausgeben des jeweiligen textes...
 Where id = '".$_GET[id"]."... 
?>
</form>

Also gibt es nur ein FOrmular, welches dynamisch geladen wird.
 
Werbung:
Also, wie sähe das gann genau aus, Prophet?

Code:
echo "<a href=gb_loeschen.php?id=";
echo $id;
echo ">Löschen</a>";

Sähe so der Link aus?

Und wie kann ich die in dem entsprechenden Dokument (Bsp: gb_loeschen.php) auslesen und nutzen?


Liebe Grüße,
L.T.M
 
der wert steht dann in der variable
Code:
$_GET['id']
vorher solltest du aber mit array_key_exists('id', $_GET) ueberpruefen ob es den schluessel id ueberhaupt im $_GET array gibt da sonst Fehler vom typ E_NOTICE erzeugt werden (Unknown index id ... o.ä. )
 
Werbung:
Vielen Dank Prophet und niklas, ihr habt mir mal wieder sehr weitergeholfen.

Ich werde es dann versuchen und mich noch mal melden, wenn es nicht funktioniert hat (per Edit).


Liebe Grüße,
L.T.M
 
Hallo,

es hat einwandfrei funktioniert, nochmals vielen Dank.

Nun habe ich noch eine weitere Frage, wofür ich nicht einen neuen Thread eröffnen möchte.

Wie kann man aus einer bestimmten Spalte in einer Datenbank einen bestimmten Datensatz löschen?

Beispiel zur Verdeutlichung:
DELETE FROM `gaestebuch` WHERE `id` = '$id'

In dieser SQL-Abfrage fehlt eigentlich nur noch der Befehl, dass das in einer bestimmten Spalte getan werden soll.

Ich habe es bereits so versucht:
DELETE `kommentar` FROM `gaestebuch` WHERE `id` = '$id'

Lieder komplett ohne Erfolg.

Über eine kleine Rückmeldung, also über eine hilfreiche Antwort würde ich mich sehr freuen.


Liebe Grüße,
L.T.M
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben