Fabian: Select in Array speichern und spezielle Reihe ausgeben

Hallo Forum-User,

ich habe ein kleines Problem mit dem auslesen einer bestimmten Array Reihe, wenn es überhaupt ein Array ist.

Mittels Select .. bekomme ich Datensätze die sich in der Variablen
$result befinden.
    $result = mysql_query($sql);

Da ich gelesen habe, dass es sich bei dieser Variable $result nicht um ein Array handelt, möchte ich daraus gern ein Array generieren.

while ($res = mysql_fetch_array($result)){
$xyz=$res["xyz"];}

Nun möchte ich z.B. auf die Datenreihe 12 zugreifen.
$www= $xyz[12];
echo "$www";

Leider werden jedoch keine Werte angezeigt.

Mein Ursprungsproblem war es, dass ich auf der Seite A ein Auswahl-Formular bereitstelle in welchem verschiedene Vornamen angezeigt werden. (Die Vornamen sind aus einer Select Abfrage generiert.) Zu jedem Vornamen gibt es auch eine spezielle ID.

Auf der Folgeseite würde ich nun gern wissen, welche ID angeklickt wurde.
Hierzu habe ich die Vornamen, die in dem Formular auf Seite A angezeigt werden durchnummeriert(die ID sollte versteckt bleiben) und lese die Nummer auf der Seite B wieder aus.
Nun mache ich die gleiche Abfrage wie auf Seite A und lasse mir speziell den Datensatz mit der übergebenen und ausgelesenen Nummer anzeigen. Damit habe ich auch die ID.

Das ganze scheint mir aber sehr kompliziert. Vielleicht gibt es ja noch eine andere Möglichkeit, per Auswahlmenü einen zweiten(verdeckten) Wert zu übergeben?

Vielen Dank für Dein Interesse

Fabian

  1. Moin

    Da ich gelesen habe, dass es sich bei dieser Variable $result nicht um ein Array handelt, möchte ich daraus gern ein Array generieren.

    Genau. In $result liegt ein "Ressource Identifier". Das ist einfach eine intern verwendete Datenstruktur mit der sich PHP merkt was du gerne ansprechen möchtest. In diesem Fall also das Ergebnis der Datenbank abfrage.

    while ($res = mysql_fetch_array($result)){
    $xyz=$res["xyz"];}

    Nun möchte ich z.B. auf die Datenreihe 12 zugreifen.
    $www= $xyz[12];
    echo "$www";

    Dein Code ist etwas verwirrt. Zunächst mal erzeugt mysql_fetch_array ein Array mit der aktuell ausgelesenen Datenzeile. Das scheinst du erkannt zu haben und benutzt dementsprechend eine Schleife die Zeile für Zeile ausliest. Allerdings ist deine Schleife kaputt: Sie überschreibt den Inhalt der Variablen $xyz bei jedem Durchlauf mit dem Wert der Spalte xyz in der aktuell ausgelesenen Zeile. Am Ende ist $xyz also nur eine Variable, die den letzten Wert enthält.

    Das $xyz[12] würde dann die Stringvariable in ein Array aus Zeichen umwandeln und die das 13. Zeichen zurückgeben. Das willst du sicher nicht?

    Du musst deine Schleife verändern ($xyz durch $xyz[] ersetzen). Und da sie im aktuellen Zustand die Zeilen einfach nur durchnummerieren würde, was dann die Nummerierung durcheinanderbringt wenn du Zeilen löscht, umsortierst etc., würde ich da auch noch gleich die ID-Spalte die du erwähnt hast, benutzen um ein assoziatives Array aufzubauen.

    Deine Schleife müsste ungefähr so aussehen:
    while($tmp = mysql_fetch_array($result)) $xyz[$tmp["id"]] = $tmp;
     (ich hab das $res mal umbenannt, damit der Sinn deutlicher wird, ausserdem müsstest du "id" durch das ersetzen, was bei dir die ID-Spalte ist)

    Leider werden jedoch keine Werte angezeigt.

    Wie gesagt, es gibt den 13. Buchstaben des Feldes xyz der letzen Zeile aus. Wenn das Wort dadrin kürzer ist, wird nix ausgegeben.

    [snipp]
    Das ganze scheint mir aber sehr kompliziert. Vielleicht gibt es ja noch eine andere Möglichkeit, per Auswahlmenü einen zweiten(verdeckten) Wert zu übergeben?

    Das habe ich nicht ganz verstanden.

    --
    Henryk Plötz
    Grüße aus Berlin

  2. Hallo,

    while ($res = mysql_fetch_array($result)){
    $xyz=$res["xyz"];}

    $xyz[]=$res["xyz"]; }

    Nun möchte ich z.B. auf die Datenreihe 12 zugreifen.
    $www= $xyz[12];
    echo "$www";

    warum net gleich
    echo $xyz[12];

    btw. keine " um variablen, bremmst den parser aus
    echo $www; genügt vollkomen.

    Leider werden jedoch keine Werte angezeigt.

    jetzt schon, wenn es einen 12 index im array gibt (also mindestens 13 einträge im array sind)

    Mein Ursprungsproblem war es, dass ich auf der Seite A ein Auswahl-Formular bereitstelle in welchem verschiedene Vornamen angezeigt werden. (Die Vornamen sind aus einer Select Abfrage generiert.) Zu jedem Vornamen gibt es auch eine spezielle ID.

    Auf der Folgeseite würde ich nun gern wissen, welche ID angeklickt wurde.

    nichts einfacher als das...
    die sql query bitte deiner umgebung anpassen:
    Das formular mit den Vornamen:

    echo "<select name="foo">";
    $result=mysql_query("SELECT id,vorname FROM table ORDER By vorname");
    while(list($id,$vorname)=mysql_fetch_row($result)){
       echo "<option value="".$id."">".$vorname."</option>\n";
    }
    echo "</select>";

    Die nach dem absenden verarbeitende routine:
    $result=mysql_query("SELECT vorname FROM table WHERE id='$foo'");
    list($vorname)=mysql_fetch_row($result);

    echo "Du hast ".$vorname." ausgewählt";

    lg
    Ludwig

  3. Danke Ludwig und Henryk für Eure Hilfe,

    es hat nun endlich funktioniert und ich konnte den Wert abfragen.

    Nochmal zum Sinn des Ganzen:

    Auf Seite A habe ich ein Auswahl-Formular, bei welchem die Einträge z.B. Vornamen automatisch aus einer Select Abfrage generiert werden.

    Aus diesem Formular soll sich der User einen Vornamen aussuchen.

    Die ID zu diesem Vornamen möchte ich auf der Seite B passend wieder ausgeben. Da es womöglich 2x den gleichen Vornamen gibt, kann ich diesen ja nicht allein als Referenz hernehmen.

    Die ID möchte ich jedoch geheim halten und dem User nicht zeigen.

    Ich habe also nun dem Formular Nummern zugewiesen:

    (1) Paul
    (2) Werner
     ...
    (122) Claudia

    Auf Seite B lasse ich mir die Zeichenstelle des ")" ausgeben und weiß wie viele Stellen die Nummer hat. Danach lasse ich mir den entsprechenden String d.h. die Nummer z.B. 122 ausgeben.

    Nun führe ich die gleiche Select Abfrage wie von Seite A auch auf Seite B durch. Diese speichere ich in ein Array.

    Nun Frage ich anstatt dem Vornamen Claudia, die ID mit der Nummer bzw.Position im Array 122 ab.

    Damit habe ich wieder die ID erhalten.

    Wie gesagt, dass finde ich ein wenig kompliziert.

    Viel einfacher wäre es, wenn es ein Formular
    mit:
    (<option>$vorname</option> <hidden field>$ID</hidden field>)

    geben würde oder so etwas ähnliches um den Wert gleich mit durchzuschleifen.

    Mit anderen Formularen gibt es ja die Möglichkeit, doch bei List-Auswahlformularen habe ich das noch nicht gesehen.

    Danke nochmal...

    Grüße aus Braunschweig

    Fabian

    1. Moin

      Was hast du gegen
      <select name="namensid">
       <option value="1">Paul</option>
       <option value="2">Werner</option>
      ...
       <option value="122">Claudia</option>
      </select>

      Nach dem Submit befindet sich jetzt die ID-Nummer direkt in $namensid. Ist zwar nicht besonders "geheim", aber dafür müsstest du ohne mit irgendwas kryptographischem aufwarten oder dir zumindest intern eine Zuordnung von IDs zu jeweils einem zufälligen String, der dann statt der ID verwendet wird, merken.

      --
      Henryk Plötz
      Grüße aus Berlin

      1. Mist,
        das habe ich absolut übersehen, das ginge ja auch...

        Ich habe das Beispiel aus der SHTML-Seite übernommen, da wird die Option Value erst weiter unten beschrieben.

        Natürlich sollte ich das eigentlich kennen, aber es ist mir einfach nicht eingefallen, bei den vielen Möglichkeiten, die PHP bietet, das Problem anzugehen.

        Jedenfalls habe ich schon jetzt eine Lösung ausgetüffelt, für das das zukünftigen PHP Problem auch sicher noch kommen wird.

        Nochmals danke

        Fabian