Sabine: Hilfe! Mein Skript vertauscht mir Spalten!!!

Hallo!

Ich brauche mal wieder eine Hilfe , denn entweder es spukt bei mir oder ich bin blind. Ich sitze jetzt geschlagene 2 Stunden bei meinem Problemchen und komme nicht drauf was da los ist. Ich habe folgendes PHP-Skript und das tut überhaupt nicht wie ich will. Erstens zeigt es mir bei Mouseover nicht das Bild, das in der Spalte buttonover gespeichert ist an, sondern das, das in der Spalte button gespeichert ist und das eigentlich Bild (also ohne Mouseover), das in der Spalte Button gespeichert ist, wird gar nicht angezeigt.

Bitte, bitte Hilfe!
Danke
Sabine

<?php
$query = "select * from category";
$result = safe_query($query) or die(mysql_error());
$x=1;
$y=220;
$z=15;

while (list($cat_id, $category, $button, $buttonover) = mysql_fetch_array($result))
    {
        echo ("<div id="h$x" style="position:absolute; left:8px; top:".$y."px; width:135px; height:40px; z-index:$z">\n");
        echo ("<a href="edit_story.php?cat_id=$cat_id" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('$category','../images/".$buttonover."','../images/".$buttonover."')">\n");
        echo ("<img src="../images/".$button."" name="$category" border=0 height=40 width=135>\n");
         echo ("</a></div>\n\n");

$x++;
        $y=$y+50;
        $z=$z-1;

}
 ?>

  1. Moin!

    Zwei Dinge fallen mir auf:

    $result = safe_query($query) or die(mysql_error());

    Erstens: Was tut "safe_query"? Ist jedenfalls kein Standardbefehl von PHP.

    while (list($cat_id, $category, $button, $buttonover) = mysql_fetch_array($result))

    Hast du schonmal das Array angeschaut, welches mysql_fetch_array zurückliefert? Da sind zum einen Hash-Schlüssel der Spaltennamen drin, aber auch numerische Indices! Also ungefähr doppelt soviele Daten, wie du deiner Liste zuweist, und auch in einer völlig beliebigen Reihenfolge (wie das bei einem Hash eben so ist).

    Also solltest du entweder sowas machen:
    $resulthash = mysql_fetch_array($result);
    ...
    echo $resulthash['cat_id']; // Angenommen die Spalte heißt auch so

    oder explizit den kurzen Variablennamen die Inhalte des Hashes zuweisen, oder durch Verwendung eines Ergebnistyps die Funktion dazu bewegen, nur ein numerisches Array oder einen Hash zurückzugeben. Siehe auch http://www.php.net/manual/de/function.mysql-fetch-array.php.

    - Sven Rautenberg

    1. Nochmal kurz Moin!

      oder explizit den kurzen Variablennamen die Inhalte des Hashes zuweisen, oder durch Verwendung eines Ergebnistyps die Funktion dazu bewegen, nur ein numerisches Array oder einen Hash zurückzugeben. Siehe auch http://www.php.net/manual/de/function.mysql-fetch-array.php.

      ...oder gleich mysql_fetch_row benutzen, welches ein numerisches Array liefert, oder mysql_fetch_assoc, welches den Hash liefert. :)

      - Sven Rautenberg

    2. Hi!

      Moin!

      Zwei Dinge fallen mir auf:

      $result = safe_query($query) or die(mysql_error());

      Nein, ist eine selbstdefinierte Funktion

      Erstens: Was tut "safe_query"? Ist jedenfalls kein Standardbefehl von PHP.

      Hast du schonmal das Array angeschaut, welches mysql_fetch_array zurückliefert? Da sind zum einen Hash-Schlüssel der Spaltennamen drin, aber auch numerische Indices! Also ungefähr doppelt soviele Daten, wie du deiner Liste zuweist, und auch in einer völlig beliebigen Reihenfolge (wie das bei einem Hash eben so ist).

      Also solltest du entweder sowas machen:
      $resulthash = mysql_fetch_array($result);
      ...
      echo $resulthash['cat_id']; // Angenommen die Spalte heißt auch so

      Danke für den Tipp, das versuche ich gleich mal!

      lg
      Sabine

      • Sven Rautenberg
  2. Hallo Sabine,

    was spricht denn Dein Skript, wenn Du bei Select die abzufragenden Spalten mit angibst? Wie es aussieht scheint ja in der Liste irgendwo die Reihenfolge der Werte nicht zu stimmen (oder schon mal Testausgaben angeschaut?).

    Grüße aus Würzburg
    Julian

    1. Hallo Julian!

      Hallo Sabine,

      was spricht denn Dein Skript, wenn Du bei Select die abzufragenden Spalten mit angibst?

      Leider auch das Gleiche :(

      Wie es aussieht scheint ja in der Liste irgendwo die Reihenfolge der Werte nicht zu stimmen (oder schon mal Testausgaben angeschaut?).
      Sieht so aus - aber wie kann das sein? Testausgaben habe ich angesehen - bei der Ausgabe mit den Inhalten der Spalte Button ist der Wert leer, bei Buttonover der Inhalt von Button.

      ... Ich verstehe es nicht.

      lg
      Sabine

      Grüße aus Würzburg
      Julian

  3. Hallo nochmals!!

    Es ist geschafft - danke für die Tipps. Ich habe vorhin bei select mit Spaltennamen ein Leerzeichen vergessen - hab es jetzt korrigiert und jetzt klappt es.

    Dankeschön!!

    lg
    Sabine