Doppelte Ausgabe

Giraffe

Mitglied
hallo
ich habe ein problem mit folgendem script
PHP:
 $abfrage = "SELECT * FROM `user`";
$ergebnis = mysql_query($abfrage);

while($row = mysql_fetch_object($ergebnis)) {
	$id = $row->id;
	if ($i==$id){
                   echo "<td><a href='$i'>$i</a></td>\n";
              }
}

echo "<td>$i</td>\n";
Logischerweise wird $i, falls es der id entspricht doppelt ausgegeben. Das möchte ich aber nicht. Wenn ich in die While schlaufe ein else einhänge bekomme ich $i so viel mal, wie ich Datenbankeinträge habe.
Wie kann ich dies verhindern?
Gruss
Giraffe
 
Hi,

was genau willst Du denn da eigentlich als Ausgabe haben? Wenn Du nicht alle Benutzer ausgeben willst, warum wählst Du dann in der Abfrage alle aus?

LG
 
hoppla, es handelt sich eigentlich um ein Klaenderscript das auf der Datenbanktabelle user befindet...es ghet also um Zahlen die mir doppelt ausgegeben werden.
 
hoppla, es handelt sich eigentlich um ein Klaenderscript das auf der Datenbanktabelle user befindet...es ghet also um Zahlen die mir doppelt ausgegeben werden.

:confused: Sorry, ich verstehe kein Wort... Du musst schon meine Frage beantworten. Welche Ausgabe soll dieser Codeschnipsel überhaupt erzeugen?

LG

EDIT//

Meinst Du vielleicht das:

PHP:
$abfrage = "SELECT * FROM `user`";
$ergebnis = mysql_query($abfrage);

while($row = mysql_fetch_object($ergebnis)) {
    if ($i==$row->id) {
       echo "<td><a href='$i'>$i</a></td>\n";
    } else {
       echo '<td>' . $row->id . "</td>\n";  
    }
}
 
Zuletzt bearbeitet:
sorry, hab etwas schwirikeiten, mein problem zu erklären :rolleyes:
eine Grafik hilft da warscheindlich abhilfe. Also, ich habe die Datenbank mit id und einem url. Die Tage im Kalender, die identisch mit der id sind, sollten verlikt werden, mit dem url.
Bild 1
wenn ich nun deine Variante anwende bekomme ich diese Tage doppelt, einmal mit und einmal ohne link, da ich weiter oben eine for-Schleife habe.
Bild 2
Ich Poste gleich den ganzen Code.
PHP:
<?
include "../../system/sprachen/de.inc.php";
include "zugriff.inc.php";
$zeit=time(); 
$jahr=date("Y", $zeit);
$monat=date("n", $zeit);;
?>
<style> 
 tr.s {font-family:helvetica;font-size:9pt;} 
 td.h {font-family:helvetica;font-size:10pt;text-align:right;} 
 td.d {font-family:helvetica;font-size:9pt;background-color:white;} 
 td.d0 {font-family:helvetica;font-size:9pt;border-style:solid;text-align:center; 
    border-width:1px;border-color:gray;background-color:white;font-weight:normal;} 
 td.d1 {font-family:helvetica;font-size:9pt;border-style:solid;text-align:center; 
    border-width:1px;border-color:gray;background-color:gold;font-weight:normal;} 
 td.d2 {font-family:helvetica;font-size:9pt;border-style:solid;text-align:center; 
    border-width:1px;border-color:red;background-color:#ffeeee;font-weight:bold;} 
</style> 
<form method="post" action="<? $_SERVER['PHP_SELF'];?>">
<select name="monat"> 
<?php 
$monate = Array("January", "February", "March", "April", 
                "May", "June", "July", "August", "September", 
                "October", "November", "December"); 
for ( $x=1; $x <= count( $monate ); $x++ ) 
    { 
    print "\t<option value=\"$x\""; 
    print ($x == $monat)?" SELECTED":""; 
    print ">".$monate[$x-1]."\n"; 
    } 
?> 
</select> 
<select name="jahr"> 
<?php 
for ( $x=$jahr-2; $x<$jahr+3; $x++ ) 
    { 
    print "\t<option"; 
    print ($x == $jahr)?" SELECTED":""; 
    print ">$x\n"; 
    } 
?> 
</select> 
<input type="submit" name="submit" value="<? echo $lang_8; ?>">
</form>
<?PHP 
if (!empty($_POST["submit"])) {

$mon=$_POST["monat"];
$akt=date("d", $zeit); // ermitteln des aktuellen Tages 
$last=date("t", mktime(0,0,0,$mon,1,$jahr)); // ermitteln des letzten Tages des Monats 

// Arrays für Monate und Wochentage 
$wd = Array("So", "Mo", "Di", "Mi","Do", "Fr", "Sa", "So"); 

// ermitteln des Wochentages für den ersten Tages des Monats 
$first_wd=date("w", mktime(0,0,0,$mon,1,$jahr)); 
if ($first_wd==0) $first_wd=7; // Korrektur für den Sonntag 

echo "<table border=0 cellpadding=1 cellspacing=1>\n"; 

// Monat ausgeben 
echo "<tr><td class=h colspan=7><b>" . $_POST['monat'] . " " .  $jahr . "</b></td>"; 

// Wochentage ausgeben 
echo "<tr class=s><td>Mo</td><td>Di</td><td>Mi</td><td>Do</td><td>Fr</td><td>Sa</td><td>So</td></tr>\n"; 
echo "<tr>"; 


// Leere Zellen ausgeben, bis zum ersten Tag des Monats 
for ($j=1; $j<$first_wd; $j++) { echo "<td class=d> "; } 


for ($i=1; $i<=$last; $i++) 
{ 
 $x=$wd[date("w", mktime(0,0,0,$mon,$i,$jahr))]; // ermitteln des Wochentages 

 $abfrage = "SELECT * FROM `user`"; 
$ergebnis = mysql_query($abfrage); 

while($row = mysql_fetch_object($ergebnis)) { 
    $id = $row->id; 
    if ($i==$id){ 
                   echo "<td><a href='$i'>$i</a></td>\n"; 
              } 
} 

echo "<td>$i</td>\n"; 


 if ($x=="So") echo "</tr>\n<tr>"; // Am Sonntag endet die jeweilige Zeile 


 }

echo "</tr></table>\n"; 
}
?>
Tschuldigung
Giraffe
 
Du solltest deine Abfrage vor der For-Schleife machen die zum Anzeigen dient, und die Daten in einem Array speichern:

PHP:
$abfrage = "SELECT * FROM `user`"; 
$ergebnis = mysql_query($abfrage); 
$daten = array();

while($row = mysql_fetch_assoc($ergebnis))
{
  $daten[$row["id"]] = "";
}

Sonst fragst du 31 mal deine Datenbank ab!

Und die im Array gesammelten Daten kannst du in einer einfachen if innerhalb der for-Schleife nutzen:
PHP:
if (isset($daten[$i]))
{
   echo "<td><a href='$i'>$i</a></td>\n"; 
}
else
{
  echo "<td>$i</td>\n";
}

Du hast vorhin folgendes gemacht:
PHP:
if ($i==$id){ 
                   echo "<td><a href='$i'>$i</a></td>\n"; 
              }
und dann nochmals:

PHP:
echo "<td>$i</td>\n";
Da ist logisch das deine Zahl doppelt ausgegeben wird.
Es fehlt dir einfach der Else-Block, wie in meiner obigen Lösung.
 
Zuletzt bearbeitet:
Hi,

ich frage mich übrigens, wie denn die UserID mit dem Datum, also dem Tag des Monats zusammenhängen soll. Ansonsten siehe ZodiacXP.

LG
 
Wunderbar, so funktioniert es!

tut mir leid, die geburtstage von den usern sollten eingetragen werden, das feld id hat einen etwas unglücklichen namen :-(

Besten Dank für die Geduld!

Giraffe
 
Zurück