Ankündigung

Einklappen
Keine Ankündigung bisher.

Mit Array Datenbank abrufen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mit Array Datenbank abrufen

    Hallo zusammen,

    also das ist mein erstes Posting - zumindest in diesem Forum - also nicht gleich den Kopf abreißen. Ich ringe nach Worten.

    Mein Problem ist das Folgende: Ich habe mehrere Checkboxen auf einer Seite eingebaut und möchte diese - natürlich auch bei Mehrfachauswahl - noch einmal auf einer anderen Seite ausgeben.
    Die Checkboxen:
    Code:
    <td align='center'><input class='box' type='checkbox' name='id[]' value='$row->id'>
    Nun habe ich zumindest den Array auf die nächste Seite übergeben.
    Code:
    if (isset($id)) {
      reset($id);
    for ($i=0;$i<sizeof($id);$i++) {
           $checked=$id[$i];
    	echo "$checked";
            }
    } else {
      echo 'Sie haben keine Auswahl getroffen.';
    }
    Zumindest werden über echo "$checked" alle ids der ausgewählten Checkboxen ausgegeben.

    Nun möchte ich das Ganze gerne wieder aus der Datenbank aufrufen. Das funktioniert natürlich nicht so, wie angedacht, denn nur der jeweils letzte Wert wird ausgelesen.

    Code:
    global $database;
    $database->setQuery( "SELECT * FROM #__rent"
            . "\nWHERE $checked = id"
            . "\nORDER BY id"
            );
            $rows = $database->loadObjectList();
            foreach ( $rows AS $row) {
    Wie kann man also die ausgewählten checkboxen noch einmal anzeigen lassen? Ist die Umwandlung vom String in Array überhaupt sinnvoll? Oder habe ich einen anderen Fehler gemacht.

    P.S. nicht wundern, das Ganze läuft in einer 'Mamboumgebung' und in Sachen php bin ich nun 24 Stunden dabei. :wink:

    Gruß
    ec

  • #2
    $checked=$id[$i];
    $checked wird immer wieder überschrieben und hält somit immer nur einen Wert; wenn die Schleife beendet ist, hält es den letzten Wert.

    Du arbeitest mit register_globals=On. Ich nicht. $id => $_POST['id']

    PHP-Code:
    <?php

    if (!isset($_POST['id'])) {
        
    // Formular anzeigen oder Fehler oder oder oder
    }
    else if (!
    is_array($_POST['id']) || empty($_POST['id'])) {
        
    // Fehler anzeigen
        // entweder falsche Eingabe - nicht über das Formular
        // oder keine Auswahl getroffen
    }
    else
    {
        
    // Verarbeitung der augenscheinlich korrekten Eingabe
        // nur Zahlen sollen behandelt werden, nicht-Zahlen werden zu 0
        
    $ids array_map('intval'$_POST['id']);
        
    // 0 gibt es nicht als id. Alles was 0 ist, ist ungültig. Aussortieren
        
    $ids array_filter($ids);

        
    // <-- hier ist es sicher gut, nocheinmal auf empty($ids) abzutesten -->

        
    $sql 'SELECT * FROM #__rent WHERE id in ('join(','$ids) .')id \nORDER BY id":
        echo $sql;
    }

    ?>
    Unbekannte Funktionen im Handbuch nachschlagen: http://www.php.net/manual/

    Kommentar


    • #3
      Schon einmal vielen Dank für deine Antwort.
      Also kann ich theoretisch auch mit $id arbeiten oder ist das nicht möglich?
      Würde das dann so ausehen?

      Code:
      <?php
      
      if (!isset($id)) {
         // Formular anzeigen oder Fehler oder oder oder
      }
      else if (!is_array($id) || empty($id)) {
         // Fehler anzeigen
         // entweder falsche Eingabe - nicht über das Formular
         // oder keine Auswahl getroffen
      }
      else
      {
         // Verarbeitung der augenscheinlich korrekten Eingabe
         // nur Zahlen sollen behandelt werden, nicht-Zahlen werden zu 0
         $ids = array_map('intval', $id);
         // 0 gibt es nicht als id. Alles was 0 ist, ist ungültig. Aussortieren
         $ids = array_filter($ids);
      
         // <-- hier ist es sicher gut, nocheinmal auf empty($ids) abzutesten -->
      
         $sql = 'SELECT * FROM #__rent WHERE id in ('. join(',', $ids) .')id \nORDER BY id":
         echo $sql;
      }
      
      ?>
      Zumindest passiert nicht das was passieren soll. if (!isset($id)) wird zum Beispiel "aktiv" bzw. ist erfüllt, wenn ich keine Checkbox auswähle. Das soll doch aber nicht so sein.

      Und die Datenbankabfrage läuft irgendwie auch nicht.

      Wenn du sagst ich soll nach unbekannten Funktionen suchen - ist das nicht ganz so einfach wie es sich anhört. Zumindest müsste man wissen wonach man wo suchen sollte.

      Gruß
      ec

      Kommentar


      • #4
        Also kann ich theoretisch auch mit $id arbeiten oder ist das nicht möglich?
        Forensuche benutzen, Stichwort regsiter_globals
        ebenfalls http://faq-phpfriend.de/q/q-formular...r-globals.html

        Zumindest passiert nicht das was passieren soll. if (!isset($id)) wird zum Beispiel "aktiv" bzw. ist erfüllt, wenn ich keine Checkbox auswähle. Das soll doch aber nicht so sein.
        keine checkbox, kein $id. Doch genauso soll das sein.

        Und die Datenbankabfrage läuft irgendwie auch nicht.
        Es wird ja auch nur das sql Statement ausgegeben. Was wird denn ausgegeben?

        Wenn du sagst ich soll nach unbekannten Funktionen suchen - ist das nicht ganz so einfach wie es sich anhört. Zumindest müsste man wissen wonach man wo suchen sollte.
        Wenn Du zB array_map nicht kennst/verstehst, sollst Du bei http://www.php.net/manual/de eben diesen Funktionsnamen im Suchfeld eingeben und abschicken.

        Kommentar

        Lädt...
        X