PHP Gästebuch: Daten eintragen funktioniert nicht

Du führst sie aber oben mit
$db_query = mysql_query( $sql_query );
schon aus und dort unten wo du zitierst liest du mit mysql_fetch_array dann nur noch die Ergebnisse aus die schon bereitstehen!
 
Jo danke klappt jetzt^^

PHP:
<?php
//Connect zur Datenbank
define ( 'MYSQL_HOST', 'localhost' );
define ( 'MYSQL_BENUTZER', 'raven16' );
define ( 'MYSQL_KENNWORT', 'sinusSQL' );
define ( 'MYSQL_DATENBANK', 'raven16' );

$db_con = @mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
if ( ! $db_con )
{
    // das Problem ausgeben mit: mysql_error()
    die('Verbindung zur Datenbank fehlgeschlagen. Bitte später probieren. ');
}
$db_sel = mysql_select_db( MYSQL_DATENBANK )
    or die("Auswahl der Datenbank fehlgeschlagen.");


// SQL-Befehl für den Zugriff
$sql_query = "SELECT * FROM gaestebuch
		ORDER BY datum";
	
?>



<div class="boxtitle">Gästebuch</div> 
<div class="boxinhalt">
	
<table>
<tr>
	<td>
		<table id="gaestebuchform">
		<tr>
			<td>
				<form method="post" action="index.php"><br>
				<input type="text" name="name">
					<br><font class="small">Dein Name*</font><br><br>
				<input type="email" name="email">
					<br><font class="small">Deine Email</font><br><br>
				<textarea name="eintrag" class="gaestebuch"></textarea>
					<br><font class="small">Deine Grüße*</font><br><br>
				<input type="submit" name="valider" value="Eintragen"><br><br>
				</form>
				<?php
				// In die SQL-Datenbank eintragen

				if($_POST['valider'] && strlen($_POST['eintrag'])>4)
				{
					$sql="INSERT INTO gaestebuch (Name, Email, Datum, Text)
					VALUES('".mysql_real_escape_string($_POST['name'])."',
						'".mysql_real_escape_string($_POST['email'])."',
						'".mysql_real_escape_string(date('Y-m-d H:i:s'))."',
						'".mysql_real_escape_string($_POST['eintrag'])."')";  
					$result = mysql_query($sql);
					if (!$result) 
					{
						die('SQL Befehl konnte nicht ausgeführt werden. ' . mysql_error());
					}			
				}
				?>
			</td>
		</tr>
		</table>
	</td>	
	<td>
		<table id="gaestebuchanzeige">
		<tr>
			<td>
				<?php
				// ausführen des mysql-Befehls
				$db_query = mysql_query( $sql_query );
				if ( ! $db_query )
				{
					die('Ungültige Abfrage: ' . mysql_error());
				}				
				// Anzeige der Anzahl der Einträge
				$gb_anzahl = mysql_num_rows($db_query);
				echo "<p>Anzahl der Gästebuch-Einträge: $gb_anzahl  </p>";
					
				while ($daten = mysql_fetch_array( $db_query, MYSQL_ASSOC))
				{
					// Aushabe der Daten
					echo "ID: ";
					echo $daten['ID'];
					echo "<br />";
					
					echo "Name: ";
					echo $daten['Name'];
					echo "<br />";
					
					echo "E-Mail: ";
					echo $daten['Email'];
					echo "<br />";
					
					echo "Datum: ";
					echo $daten['Datum'];
					echo "<br />";
				
					echo "Gästebucheintrag: ";
					echo $daten['Text'];
					echo "<br />";
				}
				mysql_free_result( $db_query );
				?>

			</td>
		</tr>
		</table>
	</td>
</tr>
</table>
</div>

Aber jetzt bleibt der Eintrag noch im Speicher und jedes mal wenn ich auf aktualisieren gehe, dann trägt der die gleichen Daten erneut in die Datenbank ein....
Siehe hier

und nen anderes Problem ist noch, dass die Seite endlos lang wird, wenn ich die einträge nicht auf die letzten z.b. 10 einschränke oder per seitenzahle die anzahl der einträge pro seite einschränke
 
raven16 schrieb:
Aber jetzt bleibt der Eintrag noch im Speicher und jedes mal wenn ich auf aktualisieren gehe, dann trägt der die gleichen Daten erneut in die Datenbank ein....
Siehe hier
Das ist jetzt kein großes Problem. Um das zu umgehen baust du den Code zum Eintragen in eine extra PHP-Datei rein und verweist das Ziel des Formulars eben auch auf diese Datei. Die Datei gibt dann NACH (also am Dateiende des Scripts!) dem Eintragen in die Datenbank mittels
PHP:
header("location:index.php");
einen Header aus, so dass der Browser sofort wieder zum eigentlichen Gästebuch umgeleitet wird ohne dass der User was davon merkt. Für Nutzer extrem alter Browser könnte man noch eine HTML-Seite mit Link zur index.php einfügen aber nötig ist das in heutiger Zeit eigentlich nicht mehr.

Für den Problem mit den vielen Einträgen musst du halt eine kleine Seitenverwaltung bauen welche Links auf folgende Seiten anzeigt. Und dann halt hinten in der URL ein "page=2" (bzw. je nach Seite halt "page=3" usw.) als Parameter anhängen. Anhand der Seite kann man dann die Query entsprechend umbauen:
PHP:
$postsPerPage = 10;
if(isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] > 0){
   $sql_query = 'SELECT * FROM gaestebuch ORDER BY datum LIMIT '.($_GET['page'] * $postsPerPage).','.$postsPerPage;
} else $sql_query = 'SELECT * FROM gaestebuch ORDER BY datum LIMIT '.$postsPerPage ;
 
also muss ich in die neue Datei dies schreiben:
PHP:
<?php
				// In die SQL-Datenbank eintragen

				if($_POST['valider'] && strlen($_POST['eintrag'])>4)
				{
					$sql="INSERT INTO gaestebuch (Name, Email, Datum, Text)
					VALUES('".mysql_real_escape_string($_POST['name'])."',
						'".mysql_real_escape_string($_POST['email'])."',
						'".mysql_real_escape_string(date('Y-m-d H:i:s'))."',
						'".mysql_real_escape_string($_POST['eintrag'])."')";  
					$result = mysql_query($sql);
					if (!$result) 
					{
						die('SQL Befehl konnte nicht ausgeführt werden. ' . mysql_error());
					}			
				}
				header("location:index.php");  
?>

und das dann aus der Datei, wo ich das her habe löschen und in dem action dann den Pfad der neuen Datei eintragen?
 
Hab das so ausprobiert... aber hab noch in der header - line einen Fehler:

unexpected T_STRING in /include/gaestebuchform_eintragen.inc.php on line 17

das die line wo ich
PHP:
header("location:index.php");
geschrieben hab...
 
Hab den Fehler gefunden :)

die index sitzt ein Verzeichnis vorher wie die eintrag-datei
kann nicht mit diesem befehl zu einem vorherigen verzeichnis springen...
damit ich nicht die ganze adresse angeben muss, habe ich die Datei in dem gleichen ordner wie die index.php kopiert...

dann hatte ich die ganze seite voll mit fehlern, aber die konnte ich auch beheben indem ich in der eintrag-datei eine datenbankverbindung erneut aufgebaut hab
 
BerniG schrieb:
Für den Problem mit den vielen Einträgen musst du halt eine kleine Seitenverwaltung bauen welche Links auf folgende Seiten anzeigt. Und dann halt hinten in der URL ein "page=2" (bzw. je nach Seite halt "page=3" usw.) als Parameter anhängen. Anhand der Seite kann man dann die Query entsprechend umbauen:
PHP:
$postsPerPage = 10;
if(isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] > 0){
   $sql_query = 'SELECT * FROM gaestebuch ORDER BY datum LIMIT '.($_GET['page'] * $postsPerPage).','.$postsPerPage;
} else $sql_query = 'SELECT * FROM gaestebuch ORDER BY datum LIMIT '.$postsPerPage ;

muss ich dafür eine neue Spalte einrichten im gästebuch, die wie hier 'page' heißt oder wie ist das zu verstehen?
Hab das noch nicht ganz verstanden^^
 
Du musst halt noch Hyperlinks zu den nachfolgenden Seiten erstellen. Also beispielsweise
Code:
<a href="index.php?page=1">Seite 1</a>
Das musst du aber natürlich ned statisch reinsetzen sondern abhängig von der aktuellen Seite. Also irgendwie sowas:
PHP:
$postsPerPage = 10;
$result = mysql_query("SELECT Count(*) FROM gaestebuch");   // Anzahl der Einträge
$row = mysql_fetch_row($result);
$pageCount = ($row[0]/$postsPerPage) +1;    // Anzahl der Seiten um alle Einträge darzustellen
if(isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] > 0 && $_GET['page']<= $pageCount){ 
   $sql_query = 'SELECT * FROM gaestebuch ORDER BY datum LIMIT '.($_GET['page'] * $postsPerPage).','.$postsPerPage; 
   $links = '<a href="index.php?page='.($_GET['page']-1).'">Vorige Seite</a>';
   if($_GET['page'] != $pageCount) $links .= '<a href="index.php?page='.($_GET['page']+1).'">N&auml;chste Seite</a>';  //Link zur nächsten Seite nur hinzufügen wenn nicht auf letzter Seite!
} else {
  $sql_query = 'SELECT * FROM gaestebuch ORDER BY datum LIMIT '.$postsPerPage ;
  if($pageCount > 1) $links = '<a href="index.php?page='.($_GET['page']+1).'">N&auml;chste Seite</a>';
  else $links = '';   //Link zur nächsten Seite nur hinzufügen wenn es tatsächlich mehrere Seiten gibt!
}
echo $links;

Edit: Es gibt übrigens einen Bearbeiten-Button hier im Forum :rolleyes:
 
Zuletzt bearbeitet:
Zurück
Oben