datenbankeinträge in html-tabelle verteilen
Hallo Forum,
ich versuche eine kleine datenbankgestützte Seite für meine Freundin zu programmieren und habe ein kleines Problem.
Info: Ich bin leider kein guter Programmierer und habe nur sehr wenig Erfahrung mit php.
Ich generiere eine Tabelle per for-schleife in php. Die Zellen sind durchnummeriert.
Nun habe ich einige datenbankeinträge, in der jeder Datensatz eine eindeutige Zufallszahl enthält.
Diese Zufallszahl möchte ich gerne mit der Zahl in der Tabellen-Zelle vergleichen und dort ausgeben.
Beispiel:
Meine Tabelle:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
.
.
101 102 103...................................................400
Nun habe ich in meinem Datensatz die zufallszahl "16" und in einem anderen Datensatz die Zufallszahl "102" stehen.
Nun möchte ich gerne, dass die zufallszahl anstelle der Variablen $i der for-Schleife und zwar an der Stelle von $i (z.B. 16 und 102) stehen soll.
Wie mache ich das ? In meinem Code ist irgendwo ein kleiner Fehler. Ich sitze nun seit Wochen daran diesen Fehler herauszufinden aber leider ohne Erfolg.
Anbei mein Code:
Ein weiteres Problem ist, dass ich aus irgendeinem Grund die erste Zeile aus meiner Tabelle nicht auslesen kann.
Ich würde mich sehr freuen, wenn Ihr mir zu meinem Ziel verhelfen würdet.
Besten Dank und viele Grüße aus Köln.
momo
Änderungen:
[EDIT masterG 16.02.2008 09:36]:
Ich hab mir erlaub den Code in einen Codeblock zu packen
ich versuche eine kleine datenbankgestützte Seite für meine Freundin zu programmieren und habe ein kleines Problem.
Info: Ich bin leider kein guter Programmierer und habe nur sehr wenig Erfahrung mit php.
Ich generiere eine Tabelle per for-schleife in php. Die Zellen sind durchnummeriert.
Nun habe ich einige datenbankeinträge, in der jeder Datensatz eine eindeutige Zufallszahl enthält.
Diese Zufallszahl möchte ich gerne mit der Zahl in der Tabellen-Zelle vergleichen und dort ausgeben.
Beispiel:
Meine Tabelle:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
.
.
101 102 103...................................................400
Nun habe ich in meinem Datensatz die zufallszahl "16" und in einem anderen Datensatz die Zufallszahl "102" stehen.
Nun möchte ich gerne, dass die zufallszahl anstelle der Variablen $i der for-Schleife und zwar an der Stelle von $i (z.B. 16 und 102) stehen soll.
Wie mache ich das ? In meinem Code ist irgendwo ein kleiner Fehler. Ich sitze nun seit Wochen daran diesen Fehler herauszufinden aber leider ohne Erfolg.
Anbei mein Code:
<?php
$db_host = "localhost";
$db_user = "xxx";
$db_pass = "yyy";
$db_name = "sternenhimmel";
$conID = mysql_connect( $db_host, $db_user, $db_pass ) or die( "Die Datenbank konnte nicht erreicht werden!" );
if ($conID)
{
mysql_select_db( $db_name, $conID );
}
$sql = "SELECT * FROM sternchen where sternchen>=0 or sternchen<401 order by sternchen";
$ergebnis = mysql_query( $sql, $conID ) or die(mysql_error());
$datensatz = mysql_fetch_array($ergebnis);
$img1 = $datensatz['stern_img1'];
$img2 = $datensatz['stern_img2'];
$name = $datensatz['name'];
?>
<html>
<head>
<title></title>
<style type="text/css">
table { width:305px; }
td { border: 1px solid red; }
</style>
</head>
<body >
<!--background="bg_stars1.gif"-->
<table align="center">
<?php
$tr="<tr>";
$etr="</tr>";
$td="<td>";
$etd="</td>";
?>
<?php
echo $tr;
for ($i=0; $i<401; $i++) {
echo $td;
echo $i;
$sternchen=Array();
while ($datensatz = mysql_fetch_array($ergebnis)) {
$sternchen=$datensatz['sternchen'];
$sternchen = 1;
echo '<a href="zeige_sternchen.php?sende_id='.$sternchen.'">
<img border="0" title="'.$datensatz['name'].'" name="stern_img1" id="stern_img1" src="../';
echo $img2; // <--Der Pfad zu dem Bild
echo '"></a>';
}
echo $etd;
if (($i % 20 == 0) && ($i != 0)) {
echo $etr;
echo $tr;
}
}
?>
</td>
</tr>
</table>
Ein weiteres Problem ist, dass ich aus irgendeinem Grund die erste Zeile aus meiner Tabelle nicht auslesen kann.
Ich würde mich sehr freuen, wenn Ihr mir zu meinem Ziel verhelfen würdet.
Besten Dank und viele Grüße aus Köln.
momo
Änderungen:
[EDIT masterG 16.02.2008 09:36]:
Ich hab mir erlaub den Code in einen Codeblock zu packen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80882
Url: https://administrator.de/contentid/80882
Ausgedruckt am: 15.11.2024 um 19:11 Uhr
15 Kommentare
Neuester Kommentar
Hallo,
Mir ist nicht ganz klar warum Du oben schon den ersten Eintrag rausnimmst?
So springt ja der Zeiger des Resultats auf die Reihe 1 (2te Reihe). Logischerweise beginnt der Zähler dann bei der Reihe 1 unten:
Wenn ich Recht verstehe sieht deine Tabelle so aus:
wobei das Feld sternchen in der Tabelle dann Deine Zufallszahl ist?
Weiterhin sagst Du
Warum arbeitest Du nicht direkt mit $datensatz und ersparst dir den Umweg über $sternchen = $datensatz?
Bei Dir ist $img2 ja immer das Bild aus dem 1ten Datensatz (Reihe 0 von oben).
Wozu dient das $sternchen = 1? Zum einem greifst Du ja nicht direkt darauf zu und zum anderen überschreibst Du ja damit das erste Feld deines Datensatzes.
mfG
Mir ist nicht ganz klar warum Du oben schon den ersten Eintrag rausnimmst?
$datensatz = mysql_fetch_array($ergebnis);
$img1 = $datensatz['stern_img1'];
$img2 = $datensatz['stern_img2'];
$name = $datensatz['name'];
while ($datensatz = mysql_fetch_array($ergebnis)) {
$sternchen=$datensatz['sternchen'];
$sternchen = 1;
...
}
Wenn ich Recht verstehe sieht deine Tabelle so aus:
*******************
** sternchen **
*******************
** stern_img1 **
** stern_img2 **
** name **
** sternchen **
*******************
wobei das Feld sternchen in der Tabelle dann Deine Zufallszahl ist?
Weiterhin sagst Du
while ($datensatz = mysql_fetch_array($ergebnis)) {
$sternchen=$datensatz['sternchen'];
$sternchen = 1;
Warum arbeitest Du nicht direkt mit $datensatz und ersparst dir den Umweg über $sternchen = $datensatz?
while ($datensatz = mysql_fetch_array($ergebnis)) {
$sternchen=$datensatz['sternchen'];
echo '<a href="zeige_sternchen.php?sende_id='$datensatz['sternchen'].'">';
echo '<img border="0" title="'.$datensatz['name'].'" name="stern_img1" id="stern_img1" src="../'.$datensatz['stern_img2'].'">';
echo '</a>';
Bei Dir ist $img2 ja immer das Bild aus dem 1ten Datensatz (Reihe 0 von oben).
Wozu dient das $sternchen = 1? Zum einem greifst Du ja nicht direkt darauf zu und zum anderen überschreibst Du ja damit das erste Feld deines Datensatzes.
mfG
Es ist ja so, dass die Query Dir einzelne Datensätze heraus gibt. Sie sucht Dir also alle Zeilen heraus die der Anfrage entsprechen. Intern wird der Zeiger auf 0 gesetzt.
Dadurch dass Du gleich zu Beginn die erste Zeile ansprichst springt der Zähler auf den 2ten Datensatz.
Nach dieser Zeile steht der Zähler auf dem zweiten Datensatz. In deiner For-Schleife beginnst Du also mit dem 2ten Datensatz. Lass diese Zeilen oben weg.
Der Vergleich geht dann so:
mfG
Dadurch dass Du gleich zu Beginn die erste Zeile ansprichst springt der Zähler auf den 2ten Datensatz.
$datensatz = mysql_fetch_array($ergebnis);
$img1 = $datensatz['stern_img1'];
$img2 = $datensatz['stern_img2'];
$name = $datensatz['name'];
Nach dieser Zeile steht der Zähler auf dem zweiten Datensatz. In deiner For-Schleife beginnst Du also mit dem 2ten Datensatz. Lass diese Zeilen oben weg.
Der Vergleich geht dann so:
if ($i == $datensatz['sternchen']) {
...
}
mfG
Ausserhalb der While-Schleife kann nicht funktionnieren, da $datensatz['sternchen'] nicht definiert ist. Ich gehe jetzt mal davon aus, dass Du die 3 besagten fetch_array Zeilen oben heraus genommen ist.
Prinzipiel kannst Du die Ausgabe testen mit:
Ich würde diese 3 Zeilen gleich hinter die mysql_fetch_array($ergebnis) setzen. So siehst Du wierklich was in jedem Datensatz gespeichert ist.
Es ist so, dass wenn Du einmal durch die While Schleife gelaufen bist, der Zähler bei der letzten Zeile aus deinem $ergebnis angekommen ist. Und da bleibt er auch, es sei denn Du setzt in zurück.
Probier doch mal die While Schleife gegen eine For-Schleife auszubauen.
mfG
Prinzipiel kannst Du die Ausgabe testen mit:
echo '<pre>';
print_r($datensatz);
echo '</pre>';
Ich würde diese 3 Zeilen gleich hinter die mysql_fetch_array($ergebnis) setzen. So siehst Du wierklich was in jedem Datensatz gespeichert ist.
Es ist so, dass wenn Du einmal durch die While Schleife gelaufen bist, der Zähler bei der letzten Zeile aus deinem $ergebnis angekommen ist. Und da bleibt er auch, es sei denn Du setzt in zurück.
Probier doch mal die While Schleife gegen eine For-Schleife auszubauen.
for ($i=0;$i<401;$i++) {
for ($j=0;$j<mysql_num_rows($ergebnis);$j++) {
if ($i == mysql_result($ergebniss, $j, 'sternchen')
...
}
}
}
mfG
@Momo
Hi,
Kann ich dir sagen.
Du eröffnest eine for-Schleife, um eine Tabelle zu konstruieren.
Und im ersten Durchlauf rufst du bereits alle Datensätze ab.
Die for-Schleife kannst du weglassen, und statt dessen die
Tabelle gleich mit der while-Schleife erstellen.
Folg. Code stellt eine Tabelle mit den Vornamen einer
Adress-DB dar, zu jedem Vornamen wird die Zellennummer
angezeigt.
Gruß
Günni
Hi,
Was läuft falsch?
Kann ich dir sagen.
Du eröffnest eine for-Schleife, um eine Tabelle zu konstruieren.
Und im ersten Durchlauf rufst du bereits alle Datensätze ab.
Die for-Schleife kannst du weglassen, und statt dessen die
Tabelle gleich mit der while-Schleife erstellen.
Folg. Code stellt eine Tabelle mit den Vornamen einer
Adress-DB dar, zu jedem Vornamen wird die Zellennummer
angezeigt.
<?
$query="select * from tabelle2";
$result=mysql_query($query);
$i=1;
echo "<table>";
echo "<tr>";
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
/*
Hier den Code zur Überprüfung $i == Sternchen einfügen
*/
echo "<td> %i - Deine Ausgabe </td>";
if($i%10==0){
echo "</tr><tr>";
}
$i++;
}
echo "</tr></table>";
?>
Günni
@Momo
Hi,
Wenn du mit if… prüfst, mußt du auch eine
Alternative mittels else formulieren, falls mit
if keine Übereinstimmung gefunden wird.
Nochmal mein Beispiel:
Wenn zahl(bei dir sternchen) mit $i übereinstimmt, wird ein Link
ausgegeben, ansonsten der Spalteninhalt.
Gruß
Günni
Hi,
Siehst du etwas, was ich übersehen habe.
Wenn du mit if… prüfst, mußt du auch eine
Alternative mittels else formulieren, falls mit
if keine Übereinstimmung gefunden wird.
Nochmal mein Beispiel:
Wenn zahl(bei dir sternchen) mit $i übereinstimmt, wird ein Link
ausgegeben, ansonsten der Spalteninhalt.
<?
include("net-comm/inc/session.inc.php");
$query="select * from tabelle2";
$result=mysql_query($query);
$i=1;
echo "<table>";
echo "<tr>";
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
if($i==$row[zahl]){ // zahl ist bei dir Sternchen
$treffer="<td>$i - <a href=\"link.php?id=$row[id]\">OK</a></td>";
}else{
$treffer="<td>$i - $row[Vorname]</td>";
}
echo $treffer;
if(($i % 5 == 0) && ($i != 0)){
echo "</tr><tr>";
}
$i++;
}
echo "</tr></table>";
?>
Günni
Nimm die Zeile
$datensatz = mysql_fetch_array($ergebnis);
ganz rause. Die brauchst Du nicht. Indem Du mit mysql_result($erg, $j, 'sternchen') arbeitest gibts Du den Zähler selbst an. $j bestimmt welche Zeile ausgelesen wird.
Die Variable $datensatz gibts dann natürlich auch nicht mehr und muss über mysql_result() angesprochen werden.
Ich würde die letzte IF Abfrage so formulieren:
mfG
$datensatz = mysql_fetch_array($ergebnis);
ganz rause. Die brauchst Du nicht. Indem Du mit mysql_result($erg, $j, 'sternchen') arbeitest gibts Du den Zähler selbst an. $j bestimmt welche Zeile ausgelesen wird.
Die Variable $datensatz gibts dann natürlich auch nicht mehr und muss über mysql_result() angesprochen werden.
<?php
echo $tr;
for ($i=0; $i<401; $i++) {
echo $td;
echo $i;
for ($j=0;$j<mysql_num_rows($ergebnis);$j++) {
if ($i == mysql_result($ergebnis, $j, 'sternchen')) {
echo '<a href="zeige_sternchen.php?sende_id='.mysql_result($ergebnis, $j, 'sternchen').'">
<img border="0" title="'.mysql_result($ergebnis, $j,'name').'" name="stern_img1" id="stern_img1" src="../';
echo mysql_result($ergebnis, $j, 'stern_img2)) ; // <--Der Pfad zu dem Bild
echo '"></a>';
}
}
echo $etd;
if (($i % 20 == 0) && ($i != 0)) {
echo $etr;
echo $tr;
}
}
?>
Ich würde die letzte IF Abfrage so formulieren:
if (($i % 20 == 0) && ($i != 0)) echo $etr.$tr;
mfG