Archiv verlassen und diese Seite im Standarddesign anzeigen : mysql_fetch_array in 2 verschiedene Spalten?
Ich würde gerne 2 unterschiedliche Ausgaben in eine Zeile packen.
Angenommen ich habe eine SQL mit folgenden Daten:
ID - FW - Geraet
1 - 32 - CP10
2 - 33 - ERT
Ich möchte mir jetzt alle Geräte mit FW = 32 in der ersten Spalte der Tabelle anzeigen lassen und alle mit FW = 33 in der zweiten Spalte.
Jetzt werden aber alle FW32 in die erste Spalte geschrieben und die zweite Spalte bleibt leer. Erst nachdem die FW32 Abfrage erledigt ist, fängt FW33 an. Das gibt natürlich erst einmal eine Menge leere Felder bevor die FW33 dann endlich anfängt.
Ich habe es dann mit den Code unten versucht, jedoch funktioniert das nicht ganz :(
In der ersten Spalte wird mir nur das Gerät mit ID =1 angezeigt, in der zweiten Spalte werden mir die korrekten Geräte angezeigt.
Hat jemand von euch eine Idee?
BTW, ich bin PHP/SQL Anfänger und wurschtel mich so durch Anleitungen und Forum...
//Tabelle Abfragen
$entry = "SELECT * FROM ts_fw WHERE fw = 32 LIMIT $start, $eintraege_pro_seite";
$result32 = mysql_query($entry);
$entry1 = "SELECT * FROM ts_fw WHERE fw = 33 LIMIT $start, $eintraege_pro_seite";
$result33 = mysql_query($entry1);
echo mysql_error();
echo '<div class="entry">';
// Tabellenbeginn
while($daten32=mysql_fetch_array($result32))
{
while($daten33=mysql_fetch_array($result33))
{
?>
<tr bgcolor="#9CBBD1">
<td width="11%" bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[id]\">$daten32[id]</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[id]\">$daten32[uniop]</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[id]\">$daten33[id]</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[id]\">$daten33[uniop]</a>"; }}?>
</font></td>
</tr>
<tr bgcolor="#314477">
<td background="../images/cellpic.gif" colspan=6 align="left"><font face="Tahoma" size=2 color="#FFFFFF"><b>
Ich würde beide Ergebnisse erstmal auslesen und in ein indiziertes Array speichern.
<?php
$entry = "SELECT * FROM ts_fw WHERE fw = 32 LIMIT $start, $eintraege_pro_seite ORDER BY id";
$result32 = mysql_query($entry);
$row32 = array();
$i = 0;//Zählvariable, um ganz sicher zu gehn
while($daten32=mysql_fetch_array($result32))
{
$row32[$i] = $daten32;
$i++;
}
$entry1 = "SELECT * FROM ts_fw WHERE fw = 33 LIMIT $start, $eintraege_pro_seite ORDER BY id";
$result33 = mysql_query($entry1);
$row33 = array();
$i = 0;
while($daten33=mysql_fetch_array($result33))
{
$row33[$i] = $daten33;
$i++;
}
//Auslesen
$count = count($row32) & count($row33)//der binäre operator sorgt dafür, dass die höhere zahl genommen wird
for ($i = 0; $i < $count; $i++)
{
/**
* So kann man dann auf beide ergebnisse gleichzeitig zugreifen, je nach ORDER-Klausel
*/
$row32[$i]//spalte des ersten ergebnisses
$row33[$i]//spalte des zweiten...
}
?>
Habe ich jetzt gemacht, nur werde ich daraus nicht ganz schlau.
Ich habe vorher die Daten hiermit ausgegeben:
[/PHP] echo"<a href=\"edit_part_link.php?daten_edit=$daten32[id]\">$daten32[uniop]</a>";
Damit bekomme ich leider nur leere Spalten.
Anbei einmal der komplette Code. Vielleicht hilft das weiter..
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body bgcolor="#FFFFFF" text="#FFFFFF" link="#000000" vLink="#000000" aLink="#000000">
<form action="edit_part.php" method="post">
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><table cellpadding=4 cellspacing=1 width="247" bgcolor="#000000" align="center">
<tr bgcolor="#314477">
<td background="../images/cellpic.gif" colspan=6><font face="Tahoma" size=2 color="#FFFFFF"><b>» Daten anzeigen</b></font></td>
</tr>
<tr bgcolor="#9CBBD1">
<td width="11%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">ID</font></b></td>
<td width="36%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">FW32</font></b></td>
<td width="10%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">ID</font></b></td>
<td width="43%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">FW33</font></b></td>
</tr>
<?php
//Abfrage auf welcher Seite man ist
$seite = $_GET["seite"];
//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($seite))
{
$seite = 1;
}
//Verbindung zu Datenbank aufbauen
require "_data.inc1.php";
// 2. Erstellung der Verbindung zur Datenbank:
$db=mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($mydb, $db);
//Eintraege pro Seite
$eintraege_pro_seite = 20;
//Ausrechen welche Spalte man zuerst ausgeben muss:
$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
$entry = "SELECT * FROM ts_fw WHERE fw = 32 LIMIT $start, $eintraege_pro_seite ORDER BY id";
$result32 = mysql_query($entry);
$row32 = array();
$i = 0;//Zählvariable, um ganz sicher zu gehn
while($daten32=mysql_fetch_array($result32))
{
$row32[$i] = $daten32;
$i++;
}
$entry1 = "SELECT * FROM ts_fw WHERE fw = 33 LIMIT $start, $eintraege_pro_seite ORDER BY id";
$result33 = mysql_query($entry1);
$row33 = array();
$i = 0;
while($daten33=mysql_fetch_array($result33))
{
$row33[$i] = $daten33;
$i++;
}
//Auslesen
$count = count($row32) & count($row33);//der binäre operator sorgt dafür, dass die höhere zahl genommen wird
for ($i = 0; $i < $count; $i++)
{
/**
* So kann man dann auf beide ergebnisse gleichzeitig zugreifen, je nach ORDER-Klausel
*/
$row32[$i];//spalte des ersten ergebnisses
$row33[$i];//spalte des zweiten...
}
?>
<tr bgcolor="#9CBBD1">
<td width="11%" bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[id]\">$daten32[id]</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[id]\">$daten32[uniop]</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[id]\">$daten33[id]</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[id]\">$daten33[uniop]</a>";?>
</font></td>
</tr>
<tr bgcolor="#314477">
<td background="../images/cellpic.gif" colspan=6 align="left"><font face="Tahoma" size=2 color="#FFFFFF"><b>
<?php
//Jetzt kommt das "Inhaltsverzeichnis",
//sprich dort steht jetzt: Seite: 1 2 3 4 5
//Wieviele Einträge gibt es überhaupt
//Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
//also der gleiche Text wie in der Variable $abfrage, bloß das hier das LIMIT fehlt
//Sonst funktioniert die Blätterfunktion nicht richtig,
//und hier kann nur 1 Feld abgefragt werden, also id
$result = mysql_query("select id from ts_fw");
$menge = mysql_num_rows($result);
//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;
//Ausgabe der Seitenlinks:
echo "<div align=\"left\">";
echo "<b>Seite:</b> ";
//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
{
$b = $a + 1;
//Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
if($seite == $b)
{
echo " <b>$b</b> ";
}
//Aus dieser Seite ist der User nicht, also einen Link ausgeben
else
{
echo " <a href=\"?seite=$b\">$b</a> ";
}
}
echo "</div>"; mysql_close($db);
?>
</b></font> </td>
</tr>
</table></td>
<td> </td>
</tr>
</table>
<br>
<center><input type="submit" name="abgeschickt" value="Übernehmen"></center></form>
</body>
</html>
Du musst das ganze in der for-Schleife auslesen:
<?php
//Auslesen
$count = count($row32) & count($row33);//der binäre operator sorgt dafür, dass die höhere zahl genommen wird
for ($i = 0; $i < $count; $i++)
{
/**
* So kann man dann auf beide ergebnisse gleichzeitig zugreifen, je nach ORDER-Klausel
*/
$row32[$i];//spalte des ersten ergebnisses
$row33[$i];//spalte des zweiten...
?>
<tr bgcolor="#9CBBD1">
<td width="11%" bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[$i]['id']\">$daten32[$i]['id']</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[$i]['id']\">$daten32[$i]['uniop']</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[$i]['id']\">$daten33[$i]['id']</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[$i]['id']\">$daten33[$i]['uniop']</a>";?>
</font></td>
</tr>
<tr bgcolor="#314477">
<td background="../images/cellpic.gif" colspan=6 align="left"><font face="Tahoma" size=2 color="#FFFFFF"><b>
<?php
}
In der Schleife werden die beiden vorherigen parallel angelegten multidimensionalen Arrays ausgelesen.
Vielen Dank für die Hilfe, aber auch hier bleiben leider die Spalten leer :(
error_reporting() hochgedreht??
Nope, läuft eine Standard Xampp in akutellster Version drauf.
*möööp* falsche Antwort! :teach: Lies die Regeln und befolge sie auch bitte!
<?php echo "<a href=\"edit_part_link.php?daten_edit=".$daten32[$i]['id']."\">".$daten32[$i]['uniop']."</a>"; ?>
Mein Fehler, es muss so aufgebaut sein. Zumindest ist das sauberer.
Sorry, habe den Debug jetzt ein :)
» Daten anzeigen
ID FW32 ID FW33
Notice: Use of undefined constant ON - assumed 'ON' in C:\xampp\htdocs\parts\ts\out.php on line 23
Notice: Undefined index: seite in C:\xampp\htdocs\parts\ts\out.php on line 26
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\parts\ts\out.php on line 51
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\parts\ts\out
Leider funktionierte die sauberere Lösung auch nicht. Die Tabellen bleiben immer noch leer.
tontechniker 25-03-2008, 00:31 Na das Problem offenbart sich doch hier schon: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\parts\ts\out.php on line 51 Die Abfrage scheitert, mysql_fetch_array kann gar keine Einträge liefern - die Ursache für dieses Problem findet sich auch schnell: die beiden Querys sind fehlerhaft: ORDER BY kommt vor LIMIT (http://dev.mysql.com/doc/refman/5.1/de/select.html). Ein Prüfung auf Mysql Fehler findet sich in den Regeln übrigens auch als Tipp.
Das scheint nicht an meiner Lösung zu liegen, sondern daran, das mit der sql-Abfrage etwas nicht stimmt
Wenn keine Daten geholt werden, kann auch das Array nicht gefüllt werden^^
Füge mal nach jeden Aufruf von mysql_query(), echo mysql_error ein.
Mach ausserdem mal ein var_dump von $row32 und $row33.
Ah ok, Habe die Abfrage nur schnell überflogen
Danke, den Fehler beim fetch_array habe ich jetzt beseitigt.
Bleibt noch der Fehler:
Notice: Use of undefined constant ON - assumed 'ON' in C:\xampp\htdocs\parts\ts\out.php on line 23
Notice: Undefined index: seite in C:\xampp\htdocs\parts\ts\out.php on line 26
Wie gesagt, ich bin ziemlich neu in PHP und bin auf euch angewiesen :)
Bisher habe ich viele Dinge mit Google lösen können, jedoch hier versage ich wohl auf der ganzen Linie.
tontechniker 25-03-2008, 12:38 Fehler 1 (http://www.google.de/search?q=Use+of+undefined+constant) => http://www.php-fehlermeldungen.de/topic21.html
Fehler 2 (http://www.google.de/search?q=undefined+index) - wenn keine Seite angegeben ist existiert $_GET["seite"] nicht - vorher mit isset prüfen.
/**
* Debugging
*/
error_reporting(E_ALL); #zeig alle Fehler
ini_set("display_errors", ON); #sorgt dafür, dass überhaupt Fehler angezeigt werden
Soviel dann zum Thema Anleitung :D
/**
* Debugging
*/
error_reporting(E_ALL); #zeig alle Fehler
ini_set("display_errors", "ON"); #sorgt dafür, dass überhaupt Fehler angezeigt werden
Nachdem ich die vorherigen Fehler dank der Hilfe von "tontechniker" und seinen Google Links ;) (danke nochmal) gelöst habe, habe ich nun wieder den mysql_fetch Fehler :(
» Daten anzeigen
ID FW32 ID FW33
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\parts\ts\out.php on line 52
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\parts\ts\out.php on line 62
Hier nocheinmal mein überarbeitetes Script:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body bgcolor="#FFFFFF" text="#FFFFFF" link="#000000" vLink="#000000" aLink="#000000">
<form action="edit_part.php" method="post">
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><table cellpadding=4 cellspacing=1 width="247" bgcolor="#000000" align="center">
<tr bgcolor="#314477">
<td background="../images/cellpic.gif" colspan=6><font face="Tahoma" size=2 color="#FFFFFF"><b>» Daten anzeigen</b></font></td>
</tr>
<tr bgcolor="#9CBBD1">
<td width="11%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">ID</font></b></td>
<td width="36%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">FW32</font></b></td>
<td width="10%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">ID</font></b></td>
<td width="43%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">FW33</font></b></td>
</tr>
<?php
/**
* Debugging
*/
error_reporting(E_ALL); #zeig alle Fehler
ini_set('display_errors', 'ON'); #sorgt dafür, dass überhaupt Fehler angezeigt werden
//Abfrage auf welcher Seite man ist
$seite = (isset($_GET['seite']));
//$seite = (isset($_GET['seite']))?$_GET['seite']:'';
//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($seite))
{
$seite = 1;
}
//Verbindung zu Datenbank aufbauen
require "_data.inc1.php";
// 2. Erstellung der Verbindung zur Datenbank:
$db=mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($mydb, $db);
//Eintraege pro Seite
$eintraege_pro_seite = 20;
//Ausrechen welche Spalte man zuerst ausgeben muss:
$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
$entry = "SELECT * FROM ts_fw WHERE fw = 32 LIMIT $start, $eintraege_pro_seite ";
$result32 = mysql_query($entry);
$row32 = array();
$i = 0;//Zählvariable, um ganz sicher zu gehn
while($daten32=mysql_fetch_array($result32))
{
$row32[$i] = $daten32;
$i++;
}
$entry1 = "SELECT * FROM ts_fw WHERE fw = 33 LIMIT $start, $eintraege_pro_seite ";
$result33 = mysql_query($entry1);
$row33 = array();
$i = 0;
while($daten33=mysql_fetch_array($result33))
{
$row33[$i] = $daten33;
$i++;
}
//Auslesen
$count = count($row32) & count($row33);//der binäre operator sorgt dafür, dass die höhere zahl genommen wird
for ($i = 0; $i < $count; $i++)
{
/**
* So kann man dann auf beide ergebnisse gleichzeitig zugreifen, je nach ORDER-Klausel
*/
$row32[$i];//spalte des ersten ergebnisses
$row33[$i];//spalte des zweiten...
?>
<tr bgcolor="#9CBBD1">
<td width="11%" bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[$i]['id']\">$daten32[$i][id]</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo "<a href=\"edit_part_link.php?daten_edit=".$daten32[$i]['id']."\">".$daten32[$i][uniop]."</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[$i]['id']\">$daten33[$i][id]</a>"; ?>
</font></td>
<td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
<?php echo "<a href=\"edit_part_link.php?daten_edit=".$daten32[$i]['id']."\">".$daten33[$i][uniop]."</a>"; } ?>
</font></td>
</tr>
<tr bgcolor="#314477">
<td background="../images/cellpic.gif" colspan=6 align="left"><font face="Tahoma" size=2 color="#FFFFFF"><b>
<?php
//Jetzt kommt das "Inhaltsverzeichnis",
//sprich dort steht jetzt: Seite: 1 2 3 4 5
//Wieviele Einträge gibt es überhaupt
//Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
//also der gleiche Text wie in der Variable $abfrage, bloß das hier das LIMIT fehlt
//Sonst funktioniert die Blätterfunktion nicht richtig,
//und hier kann nur 1 Feld abgefragt werden, also id
$result = mysql_query("select id from ts_fw");
$menge = mysql_num_rows($result);
//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;
//Ausgabe der Seitenlinks:
echo "<div align=\"left\">";
echo "<b>Seite:</b> ";
//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
{
$b = $a + 1;
//Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
if($seite == $b)
{
echo " <b>$b</b> ";
}
//Aus dieser Seite ist der User nicht, also einen Link ausgeben
else
{
echo " <a href=\"?seite=$b\">$b</a> ";
}
}
echo "</div>"; mysql_close($db);
?>
</b></font> </td>
</tr>
</table></td>
<td> </td>
</tr>
</table>
<br>
<center><input type="submit" name="abgeschickt" value="Übernehmen"></center></form>
</body>
</html>
ich habe die diskussion hier nur am rande verfolgt, bin also nicht ganz auf der höhe. ich würde aber dem topic-starter mal folgende lektüre (http://www.peterkropff.de/tutorials/php_mysql_fehler/php_mysql_fehler.htm) wärmstens ans herz legen. damit lassen sich imho 80-90% aller fehler selber finden.
gruß
peter
Da kann ich dir nur zustimmen.
Aber auch ich hatte zu dem Thema in den bereits angesprochenen und (angeblich) gelesenen Regeln bereichts folgendes verfasst:
mySQL will nicht
Wenn Ihr eine Fehlermeldung der Art Warning: ...: supplied argument is not a valid MySQL result resource bekommt, dann stimmt eure Abfrage nicht.
Sucht bitte den entsprechenden Aufruf von mysql_query und ändert ihn von
PHP:
$result = mysql_query('euer SQL');
in
PHP:
$sql = 'euer SQL';
$result = mysql_query($sql)
or die(mysql_error().'<hr />'. $sql .'<hr />');
und postet die Meldung, die dann kommt.
@TE: Wie wäre es, meinen Rat zu befolgen und nach jedem Aufruf von mysql_query um die betreffenden Zeilen herum ein
<?php echo mysql_error(); ?>hinzuzufügen?
@ TobiaZ: Ja ich habe die Regeln gelesen! Und bevor ich meine Zeit damit vergeude mit Dir über Regeln zu diskutieren lasse ich das. (Btw. lies meinen vorherigen Post und Du wirst sehen, dass die Fehlerabfrage welche man lt. Regeln nutzen soll selbst einen Fehler produziert!)
@ Kropff: Danke, werde ich mir durchlesen
@ Baker: Danke, werde ich heute abend mal machen.
Mit ist bei meinem Code ein kleiner Fehler aufgefallen, der aber auch mit dessen vorhandensein eine Ausgabe hätte ergeben sollen:
Ersetze
$count = count($row32) & count($row33);
Durch
$count = (count($row32) > count($row33))? count($row32): count($row33);
|
-
- |