Zum Inhalt springen

mysql_fetch_row mehrfach für das gleiche Ergebnis verwenden


Empfohlene Beiträge

Hallo zusammen.

ich möchte über das Ergebnis einer Select-Abfrage mehrfach den Befehl mysql_fetch_row laufen lassen. Je nach gegebenen Parametern sollen nämlich andere Werte aus dem Result gezogen werden.

Ich habe erstmal mit zwei Beispielfällen angefangen um Fehler besser aufzuspüren und Promt gabs auch einen, den ich mir aber nicht erklären kann, bzw. keinen Lösungsansatz gefunden habe.

Man wählt auf einer HTML-Seite aus, welche Felder man sich anzeigen lassen will. Wähle ich nur Rechnungsdatum oder nur Garantieende klappt alles wunderbar. Wähle ich aber beide aus, bleibt die Spalte für Garantieende leer.

Ich habe verschiedene Kontrollpunkte eingebaut um zu sehen, ob alle Variablen einwandfrei übergeben werden, das ist auch der Fall.

Nun weis ich nicht mehr weiter, hab auch schon probiert, das result vor jedem neuen mysql_fetch_row in eine temp-Variable zu packen, aber auch das klappte nicht.

Hier mal ein Auszug des Quelltextes, vielleicht weis ja jemand rat.


$anzahl = count($felder);

if ($haus == "reinoldi" or $haus == "Reinolidstrasse")
{
$select = "select * from hardware where standort < '1000' or standort like 'Info%' or (standort = 'Empfang' and persnr = '20383')";
$result = mysql_db_query("newinventory", $select);
$num = mysql_num_rows($result);

$haus = "Reinoldistrasse";

if ($felder[0] == "rechdate")
{
$beschr[0] = "Rechnungsdatum";
$i = 0;
$resulttemp = $result;

while ($row = mysql_fetch_row($resulttemp))
{
$rechdate[$i] = mysql_result($resulttemp, $i, "rechdate");
$i++;
}

}
if ($felder[0] == "garantieende")
{
$beschr[0] = "Garantieende";
$i = 0;
$resulttemp = $result;

while ($row = mysql_fetch_row($resulttemp))
{
$garantieende[$i] = mysql_result($resulttemp, $i, "garantiedate");
$i++;
}
}
elseif ($felder[1] == "garantieende")
{
$beschr[1] = "Garantieende";
$i = 0;
$resulttemp = $result;

while ($row = mysql_fetch_row($resulttemp))
{
$garantieende[$i] = mysql_result($resulttemp, $i, "garantiedate");
$i++;
}
}



for ($h=0; $h < $anzahl; $h++)
{
echo '*'.$beschr[$h].'*'.$felder[$h].'*';
}
echo '<br>';
for ($j=0; $j < $num; $j++)
{
echo '#'.$rechdate[$j].'#'.$garantieende[$j].'#<br>';
}
}

[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

$a=MYSQL_FETCH_ROW(..)

^^ das spuckt doch ein indiziertes array aus, oder täusch ich mich?

das bedeutet, dass du EINEN datensatz abfrägst und die inhalte der spalten über einen index angesprochen werden.

MYSQL_FETCH_ARRAY(...)

liefert ein assoziatives array, d.h. die Spaltennamen entsprechen den indexnamen.

beispiel

+---------+-------------+

|spalte1  |   spalte2   |

+---------+-------------+

| test1   |    blabla   |

+---------+-------------+


$a=MYSQL_FETCH_ARRAY($ergebnisID)

echo $a['spalte1'];      // liefert test1

echo $a['spalte2'];      // liefert blabla


$a=MYSQL_FETCH_ROW($ergebnisID)

echo $a[0];      // liefert test1

echo $a[1];      // liefert blabla

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also, soweit ich deinen Code verstehen kann, passiert folgendes:

Angenommen, du hast sowohl Rechnungsdatum als auch Garantieende ausgewählt:

Er springt natürlich erstmal in if (...=="rechdate") rein.

Dort liest der das komplette Ergebnis der Abfrage aus und zwar schon mit

while ($row = mysql_fetch_row($resulttemp))

. In der Schleife benutzt du unsinnigerweise den Aufruf "mysql_result", der ersten SEEEHHHR langsam ist und du zweitens die aktuelle Spalte auch schon in $row drinstehen hast.

Nach Bearbeitung dieser Schleife steht der Abfrage-Cursor sozusagen auf dem Ende der Abfrage. Das heißt, wenn du dann in if (...=="garantieende") (und zwar solltest du das mit dem index 1 nehmen) reinspringst, liefert dir

while ($row = mysql_fetch_row($resulttemp))

false zurück.

Du müsstest also zwischen den if-Abfragen den Cursor mit mysql_data_seek zurücksetzen. Ich hielte es allerdings für sinnvoller, die fetchrow-Schleife um diese If-Dinger zu machen, und für jeden Datensatz einzeln zu entscheiden, ob was ausgewählt wurde und was dann machen usw...

HTH

Benjamin

Link zu diesem Kommentar
Auf anderen Seiten teilen

@kLeiner_HobBes

Ja, Du hast recht. Ich war da gestern etwas Quelltextblind glaube ich. Das mit dem $row / mysql_result habe ich auch gemerkt und die Idee die while-Schleife um die ifs zu bauen ist einfach simpel-genial, dass ich da nicht selbst drauf gekommen bin. *kopfschüttel*

Aber trotzdem Danke, an alle Antworter. Manchmal muss man seine Probleme glaub ich anderen mitteilen um selbst wieder einen besseren Betrachtungswinkel zu bekommen.

THX

Twiggy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...