MySQL auslesen und nach namen Gruppiert ausgeben.

Was genau meinst du mit zusammenfassen?
Erklär mal, was du genau machen willst

edit: Ach so, du willst die nebeneinander bzw untereinander haben?
Mach das mit ORDER BY - Damit kannst du nach Alphabet ordnen.
 
Hmm ...
Mir ist da nichts von MySQL bekannt.

Sieht stark so aus, als ob du das manuell prüfen müsstest.

Vielleicht sowas: (achtung ungetestet!)
PHP:
// MySQL Select. ORDER BY benutzen !!
function order_by_name ($i)
   if ($i => count($row)-1) {
      return true;
   }
   if ($row['$i'] != $row['$i++']) {
      echo "<br>\n";
   }
   order_by_name ($i++);
}
Ich hab das jetzt nur so schnell hingezaubert. Die Funktion ist rekursiv, sie ruft sich so oft auf, bis Alle Datensätze ausgelesen werden. Wenn der nachfolgende Name ($i++) derselbe ist wie der jetzige, wird kein <br> ausgeben und die Funktion überprüft den nächsten Namen. Solange, bis es keinen Datensatz mehr gibt.

Also du musst dein SELECT ausführen - Mit ORDER BY! - und dann in der while-Schleife diese Funktion aufrufen.

edit: Musste den Text noch ändern, weil ich die Funktion geändert hab, als ich den Text fertig hatte und den Text dann fergessen hatte.
 
Zuletzt bearbeitet:
PHP:
...
...
<title>Unbenanntes Dokument</title>
<?
function order_by_name ($i,$attnum,$vorher,$aktuell) {
   if ($i <= $attnum) { 
      return true; 
   } 
   if($vorher){
   if ($vorher != $aktuell) { 
     return $i."<br><br><br>\n".$vorher." + ".$aktuell; 
   } 
   }
     return $i."<br><br><br>\n".$vorher." + ".$aktuell; 
}
?>
</head>

<body>
<?
	$dbhost="localhost";
	$dblogin="root";
	$dbpwd="Cu++H2SO4-";
	$dbname="kb-center"; 

	$connection = mysql_connect($dbhost, $dblogin, $dbpwd) or die("Verbindung mit der Datenbank nicht hergestellt!");
	mysql_select_db($dbname);
?>
	<form method="post" name="addhere" action="index.php">
	<table width="100%" border="0">
		<tr>
			<td><input name="att" type="text"></td><td><input name="target" type="text"></td><td><input name="kblink" type="text"></td>
		</tr>
		<tr>
			<td></td><td><input name="addkb" type="submit" value="Hinzufügen"></td>
			<td>&nbsp;</td>
		</tr>
	</table>
	</form>
<?
if($_POST[addkb]){
	/*if($number = mysql_query("SELECT `Num` FROM `anz` WHERE `Username` = '$_POST[target]'")){
		$number = $number+1;
		echo $number;
		mysql_query("UPDATE `anz` SET `Num` = '$number' WHERE `Username` = '$_POST[target]'");
	}else{
		$addnum = "INSERT INTO `anz` (  `ID` , `Username` , `Num`) 
						VALUES ('','$_POST[target]','$number')";
		mysql_query($addnum) or die("MySQL query fehlerhaft".mysql_error());

	}*/
	$add = "INSERT INTO `kb` (  `ID` , `Angreifer` , `Opfer` , `Link` , `Time`) 
			VALUES ('','$_POST[att]','$_POST[target]','$_POST[kblink]','time()')";
	mysql_query($add) or die("MySQL query fehlerhaft".mysql_error());
}
	$select = "SELECT * FROM kb ORDER BY 'Opfer' ASC";
	$result = mysql_query($select) or die("MySQL query fehlerhaft".mysql_error());
	$attnum = mysql_num_rows($result); 
	$i = 0;
	while($daten = mysql_fetch_array($result)){
		$i = order_by_name($i,$attnum,$vorher,$daten[Opfer]); 
		echo $i;
		$vorher = $daten[Opfer];
		?>
	<table width="100%" border="0">
		<tr>
			<td><? echo $daten[Angreifer]; ?></td><td><? echo $daten[Opfer]; ?></td><td><? echo "<a href=".$daten[Link].">Kampfbericht</a>"; ?></td>
		</tr>
		

	</table>
<?
	}
?>

...
...

Irgendwie werden die Variablen $vorher und $aktuell nicht an die Funktion übergeben. Außerhalb kann ich sie abrufen.

Ich hoffe ihr könnt mir helfen
Gruß GalaxyWarrior
 
1. Inerhalb kannst du sie abrufen, wenn du am Anfang der Funktion
global $variable;
schreibst. Aber wenn du sie als Parameter übergibst müsste es eigentlich auch klappen.
2. Legst du $vorher immer erst nach dem Funktionsaufruf fest.
3. if ($i <= $attnum) {
return true;
}
brauchst du gar nicht mehr, deine Funktion ist übrigens komplett anders, als meine :D Aber stimmt schon, ich hab nicht berücksichtigt, dass du $daten in einer while-Schleife ausliest, das Array dann immer mit dem nächsten Datensatz überschrieben wird.

4. $daten[Opfer] sollte nicht gehen, da du ein indiziertes Array zurückbekommst. Du musst entweder den assoc-Parameter aktivieren, oder mysql_fetch_assoc verwenden (genau das selbe)
 
zu2. Ja, das ist ja nicht weiter schlimm und muss so sein. Deshalb prüfe ich in der Funktion ja ob $vorher nene Wert hat
Wenn ich es vorher mache, dann wäre ja $vorher = $aktuell
zu3. Doch, das Funktioniert. Die Ausgabe geht ja, nur zur Funktion kommt es nicht. Das ging auch schon immer. Ich habe meine Ganze Homepage mit OOP Programmiert, und das schon immer so übergeben.
 
Zurück