Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

mysql_fetch_row mehrfach für das gleiche Ergebnis verwenden

Empfohlene Antworten

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]

kannste ma ein bisschen besser umschreiben?

mit weniger worten mehr umschreiben ;-)

ich raffs nicht.

$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

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

@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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.