DB-Wert ausgelesen aber nur ein Wert geliefert

goto;

Erfahrenes Mitglied
Hallo, hab schon einen Thread mit diesem Thema offen, leider konnte mir keiner Helfen. Ich versuch es nochmal und beschreib es einfacher. Hab es noch mal versucht, aber ohne erfolg :(

PHP:
<?
error_reporting(E_ALL);
ini_set('display_errors', 1);

//  Datenbank aufbau hier
$db = @new mysqli('localhost', 'xx', 'xx', 'xx');
if (mysqli_connect_errno()) {
    die('Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
}
// Auswahl der Tabellen
$sql = 'SELECT location, username FROM probid_adminhistory';
$result = $db->query($sql);
if (!$result) {
    die ('Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
}
// Ausgabe wenn kein Wert vorhanden
if (!$result->num_rows) {
    echo 'Sie sind alleine';
} else {
// Hier beginnt die while schleife
    while ($row = $result->fetch_assoc())
	{
   // Hier ist das Problem
   if($row['location'] == 1)
{
    $div1 =  '<h1>'.$row['username']."</h1>\n";
}
// Hier Endet es
}
}
?>
// Hier soll es ausgegeben werden
<div><?=$div1;?></div>

Es läuft alles soweit gut. Wenn ich mir das Bedingungsergebnis per Echo ausgeben lasse, erhalte ich das Richtige ergebnis, wenn ich jedoch dem array einer Variablen zuordne und es mir in dem Div Container ausgeben lassen will. Erhalte ich nur ein ergebnis.. obwohl 3 Ergebnisse vorhanden sind.

Bin sehr dankbar für Hilfe.
 
Hi Splater,

das Problem kenne ich auch - manchmal sitzt man sprichwörtlich wie der Ochs vorm Berg ;-) Ich kann mir das Problem nachher noch mal ansehen - hänge dafür mal bitte einen Dump der entsprechenden MySQL-Tabelle an und beschreibe noch mal mithilfe der Kommentierungen genauer, wo du welche Ausgabe erwartest.

Viele Grüße,
Arne
 
Hi, so sieht die Dump aus
Code:
CREATE TABLE IF NOT EXISTS `probid_adminhistory` (
  `id` int(11) NOT NULL DEFAULT '0',
  `username` varchar(50) NOT NULL DEFAULT '',
  `user_id` varchar(50) NOT NULL DEFAULT '',
  `IP` varchar(50) NOT NULL DEFAULT '',
  `Datum` varchar(50) NOT NULL DEFAULT '',
  `location` varchar(2) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Nicht wundern, ist noch nichts angepasst.

Folgende Werte stehen in der Tabelle
Code:
INSERT INTO `probid_adminhistory` (`id`, `username`, `user_id`, `IP`, `Datum`, `location`) VALUES
(1, 'Administrator', '5', '127.0.0.2', '2009-09-26 14:27:10', '1'),
(2, 'scorpio', '4', '127.0.08.1', '2009-09-26 14:27:33', '1'),
(3, 'admin', '6', '127.0.0.8', '2009-09-26 14:30:48', '1');


PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$db = @new mysqli('localhost', 'sql68879_871255', 'warcraft', 'db68879x871255');
if (mysqli_connect_errno()) {
    die('Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
}
$sql = 'SELECT location, username FROM probid_adminhistory';
$result = $db->query($sql);
if (!$result) {
    die ('Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
}
if (!$result->num_rows) {
    echo 'Sie sind alleine'; // Warnung wenn kein Wert in der Tabelle steht.
} else { // Wenn ein Wert vorhanden, while Schleife bearbeiten
    while ($row = $result->fetch_assoc())
	{
   if($row['location'] == 1) // Hier soll geprüft werden ob die location den Wert 1 hat.
{
// Wenn der Wert true geliefert wird sollen die Usernamen in dem Array $div1 gespeichert werden. 
    $div1 =  '<h1>'.$row['username']."</h1>\n";  
}                                                                               
// Wenn der Wert false geliefert wird kommt es in die else schleife.
else
{
....
}
}
}
// Und hier sollen die Namen aus dem Array ausgegeben werden.
?>
<div><?=$div1;?></div>

Hoffe das reicht. Danke für deine Hilfe
 
Hallo Splater,

der Quellcode
Code:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$db = @ new mysqli('localhost', 'root', '', 'testdb');

if (mysqli_connect_errno()) {
	die('Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: ' . mysqli_connect_error());
}

$sql = 'SELECT location, username FROM probid_adminhistory';

$result = $db->query($sql);
if (!$result) {
	die('Konnte den Folgenden Query nicht senden: ' . $sql . "<br />\nFehlermeldung: " . $db->error);
}

if (!$result->num_rows) {
	echo 'Sie sind alleine'; // Warnung wenn kein Wert in der Tabelle steht.

} else { // Wenn ein Wert vorhanden, while Schleife bearbeiten
	while ($row = $result->fetch_assoc()) {
		if ($row['location'] == 1) // Hier soll geprüft werden ob die location den Wert 1 hat.
			{
			// Wenn der Wert true geliefert wird sollen die Usernamen in dem Array $div1 gespeichert werden.
			$div1 = '<h1>' . $row['username'] . "</h1>\n";
		}
		// Wenn der Wert false geliefert wird kommt es in die else schleife.
		else {

		}
	}
}
// Und hier sollen die Namen aus dem Array ausgegeben werden.
?>
<div><?=$div1;?></div>

gibt bei mir mit deinem vorher geposteten SQL-Dump folgendes aus:
Code:
<div><h1>admin</h1>
</div>

Die Variable $div1 innerhalb deiner while-Schleife ist nicht vom Typ Array, sondern vom Typ String. Soll die also nur den aktuellen Usernamen (= admin) aufnehmen, oder was möchtest du eigentlich realisieren?

Viele Grüße,
Arne
 
Die Formatierung musst du dir einfach noch nach deinen Bedürfnissen anpassen:

Code:
	$div1 = '';
	while ($row = mysqli_fetch_array($result)) {
		if ($row['location'] == 1) // Hier soll geprüft werden ob die location den Wert 1 hat.
			{
			// Wenn der Wert true geliefert wird sollen die Usernamen in dem Array $div1 gespeichert werden.
			$div1 .= '<h1>' . $row['username'] . "</h1>&nbsp;";
		}
		// Wenn der Wert false geliefert wird kommt es in die else schleife.
		else {

		}
	}
... gibt jetzt aus:
Code:
<div><h1>Administrator</h1>&nbsp;<h1>scorpio</h1>&nbsp;<h1>admin</h1>&nbsp;</div>

Viele Grüße,
Arne
 
Hi,

Hallo, hab schon einen Thread mit diesem Thema offen, leider konnte mir keiner Helfen. Ich versuch es nochmal und beschreib es einfacher.

Bitte mach so etwas das nächste Mal in Deinem alten Thread. Solche Doppelposts sind hier unerwünscht. Danke.
Ich mach dann drüben mal zu.

Das ist nicht unbedingt nötig, ist aber durchaus nicht falsch.

Das ist sogar sehr richtig. Dass das "nicht unbedingt nötig" ist, liegt daran, dass PHP solche Schludrigkeiten toleriert und man Warnings und Notices ja abschalten kann. In einem sauber programmierten Script sollten keine Variablen verwendet werden, die vorher nicht initialisiert wurden.

LG
 
Zurück