Datenbank Inhalt in eine Tabelle füllen ?

Code46

Erfahrenes Mitglied
Hi Leute,

ich versuche den Inhalt meiner Datanbank in eine Tabelle zu füllen. Also jedes mal wenn ich meine From ausfülle wird es in die Datenbank gespeichert und es soll gleichzeitig in eine Tabelle ausgegeben werden.


Der Fehler ist, dass die Tabelle den ersten Eintrag anzeigt und nachdem vierten Eintrag wegrutscht(also ist nicht untereinander).

Wenn ihr mir weiter helfen könntet würde ich mich sehr freuen.

Hier ist mein Code:

Code:
<?php
if (!$link) {
   die('<p>Error connecting to database</p></body></html>');
} else if (!$db) {
   die('<p>Error selecting database</p></body></html>');
} else {
   $query = "SELECT subject,location,description,date FROM item";
   if ( !($result = mysql_query($query,$link)) ) {
      die('<p>Error reading database</p></body></html>');
   } else {
      for ( $i = 0 ; $i < mysql_num_rows($result) ; $i++ ) {
        $row = mysql_fetch_assoc($result);
		
		$i = 0;

		 echo "<table width='100%' border='1' cellspacing='0' cellpadding='5'>";
		echo "<tr>";
	  echo "<td><strong>Subject</strong></td>";
	  echo "<td><strong>Location</strong></td>";
	  echo "<td><strong>Description</strong></td>";
	  echo "</tr>";
	while($row = mysql_fetch_assoc($result))
	{

	if ($i%3 == 0) {
	echo "  <tr>";
	}
	echo "    <td width='18'>".$row['subject']."</td>";
	echo "    <td width='172'>".$row['location']."</td>";
	echo "    <td width='172'>".$row['description']."</td>";
	if ($i%3 == 0) {
	 echo "  </tr>";
	}
	$i++;
	}
	echo "</table>";

	
		
      }
   }
}
?>
 
item: Warum füllst du $row 2 mal ab? Die folgende Schleife ist zuviel
PHP:
for ( $i = 0 ; $i < mysql_num_rows($result) ; $i++ ) {
        $row = mysql_fetch_assoc($result);

item: Warum hast du die Table-Tgs innrhalb der Schleife?

Ein kleiner Tipp. Formatiere dein Code, so wie es jetzt ist muss man Klammern zählen um herauszufinden welche Schleife wo beginnt und wo endet.

Hier mal dein Code lesbar formatiert
PHP:
<?
if (!$link) {
   die('<p>Error connecting to database</p></body></html>');
} else if (!$db) {
   die('<p>Error selecting database</p></body></html>');
} else {
	$query = "SELECT subject,location,description,date FROM item";
	if ( !($result = mysql_query($query,$link)) ) {
		die('<p>Error reading database</p></body></html>');
	} else {
		// erste und falsche Schleife
		for ( $i = 0 ; $i < mysql_num_rows($result) ; $i++ ) {
			$row = mysql_fetch_assoc($result);

			$i = 0;

			echo "<table width='100%' border='1' cellspacing='0' cellpadding='5'>";
			echo "<tr>";
			echo "<td><strong>Subject</strong></td>";
			echo "<td><strong>Location</strong></td>";
			echo "<td><strong>Description</strong></td>";
			echo "</tr>";
			//richtige Schleife
			while($row = mysql_fetch_assoc($result))
			{

				if ($i%3 == 0) {
					echo "  <tr>";
				}
				echo "    <td width='18'>".$row['subject']."</td>";
				echo "    <td width='172'>".$row['location']."</td>";
				echo "    <td width='172'>".$row['description']."</td>";
				if ($i%3 == 0) {
					echo "  </tr>";
				}
				$i++;
			}
			echo "</table>";
		}
	}
}

und so sollte er aussehen
PHP:
if (!$link) {
   die('<p>Error connecting to database</p></body></html>');
} else if (!$db) {
   die('<p>Error selecting database</p></body></html>');
} else {
	$query = "SELECT subject,location,description,date FROM item";
	if ( !($result = mysql_query($query,$link)) ) {
		die('<p>Error reading database</p></body></html>');
	} else {
		echo "<table width='100%' border='1' cellspacing='0' cellpadding='5'>";
		echo "<tr>";
		echo "<td><strong>Subject</strong></td>";
		echo "<td><strong>Location</strong></td>";
		echo "<td><strong>Description</strong></td>";
		echo "</tr>";
		//richtige Schleife
		while($row = mysql_fetch_assoc($result))
		{

			if ($i%3 == 0) {
				echo "  <tr>";
			}
			echo "    <td width='18'>".$row['subject']."</td>";
			echo "    <td width='172'>".$row['location']."</td>";
			echo "    <td width='172'>".$row['description']."</td>";
			if ($i%3 == 0) {
				echo "  </tr>";
			}
			$i++;
		}
		echo "</table>";
	}
}
 
Sehr eigenartiger Aufbau. Warum hast Du
PHP:
$row = mysql_fetch_assoc($result);
zweimal drin? (Zeile 12 und 22)

Mach doch bitte mal nen Screenshot, wie es grad aussieht. Wie ich es vom Code verstehe, baust Du Dreiergruppen aus dem Result auf.. (oder versuchst es..)

mfg chmee
 
Also der Fehler wird wohl durch den IF-Block und $i%3 ausgelöst.

Außerdem dürfte es bei dir erst mit dem zweiten Datensatz losgehen da du mysql_fetch_assoc bereits nach der FOR-Anweisung ausführtst.

PHP:
if (!$link) {
	die('<p>Error connecting to database</p></body></html>');
} else if (!$db) {
	die('<p>Error selecting database</p></body></html>');
} else {
	$query = "SELECT subject,location,description,date FROM item";
	if ( !($result = mysql_query($query,$link)) ) {
		die('<p>Error reading database</p></body></html>');
	} else {
		echo "<table width='100%' border='1' cellspacing='0' cellpadding='5'>";
		$i = 0;
		while($row = mysql_fetch_assoc($result)) {
			if ($i%3 == 0 || $i == 0) {
				echo "<tr>";
				echo "<td><strong>Subject</strong></td>";
				echo "<td><strong>Location</strong></td>";
				echo "<td><strong>Description</strong></td>";
				echo "</tr>";
			}
            echo "<tr>";
			echo "<td width='18'>" .$row['subject']."</td>";
			echo "<td width='172'>".$row['location']."</td>";
			echo "<td width='172'>".$row['description']."</td>";
			echo "</tr>";

			$i++;
		}
		echo "</table>";
	}
}
 
Zuletzt bearbeitet:
Danke Yaslaw funktioniert wieder. Lag an der doppelten schleife :D

Habe hierzu nochmal eine Frage. Undzwar sollen nur die Tabellen anzgezeigt werden die der User der eingertragen. Also wenn ich mich mit einem anderen anderem User anmelde sollen diese Tabellen nicht anzeigt werden.
Wisst ihr wie ich das machen könnte ****?
 
Nabend,

dafür solltest du dein SQL Query mit WHERE erweitern.
Beispiel:
PHP:
$query = "SELECT subject,location,description,date,user_id FROM item WHERE user_id=".$user_id;

Wobei die Spalte "user_id" nur geraten ist. Genauso wie $user_id. Die musst halt anpassen. Und bei jedem neuen geposteten Formular musst halt beim "INSERT" die user_id mitgeben.

Somit verschafft zwischen dem Datensatz und dem User eine Beziehung. Das wäre halt die einfachste Lösung, eine zusätzliche Spalte in item mit user_id oder ähnlich.
 
Zurück