Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Radio-Button in While-Schleife

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Radio-Button in While-Schleife

    Hallo Kollegen,

    habe wohl mal wieder Tomaten auf den Augen, aber vielleicht habt ihr einen Tipp für mich?

    Ich lasse mir aus der Datenbank in einer while-Schleife alle Bilder in einer Tabelle untereinander ausgeben, die einem bestimmten Ort zugewiesen wurden - mittels

    PHP-Code:
    $query_Foto "SELECT BNr, BName, Kommentar, Bild, ref_Location, Vorschau FROM fc_loc_fotos WHERE fc_loc_fotos.ref_Location=".$_GET["selectedNr"]." ORDER BY BNr"
    wobei "ref.Location" jeweils die ID des Ortes enthält, der abgerufen wird.

    In "Vorschau" möchte ich nun mittels eines Formulars und einem Radio-Button eine Auswhl treffen lassen, um ein Vorschaubild fest zu legen.

    Hier der Abschnitt:

    PHP-Code:
    <input name="Vorschau" type="radio" id="Vorschau" value="1" <? if ($row_Foto['Vorschau']=='1')echo "checked"; ?> />
    <input name="selBild" type="hidden" id="selBild" value="<? echo $row_Foto['BNr']; ?>" />
    Dies wird auf der Seite dann auch wunderbar neben jedem Datensatz angezeigt. Ich übergebe dann die Werte:

    Code:
    <input name="insertvorschau" type="submit" class="taste" id="insertvorschau" value="Speichern">
    <input name="mm_form1" type="hidden" id="mm_form1" value="mm_form1">
    und verarbeite sie SO weiter:

    PHP-Code:

    if ((isset($_POST["mm_form1"])) && ($_POST["mm_form1"] == "mm_form1")) {
        
    $selBild $_POST["selBild"];
          
    $updateSQL sprintf("UPDATE fc_loc_fotos SET Vorschau=%s WHERE BNr=".$selBild,
                                                                 
                           
    GetSQLValueString($_POST['Vorschau'], "int"));

      
    mysql_select_db($database_connect$connect);
      
    $Result2 mysql_query($updateSQL$connect) or die(mysql_error());

     


    Nun habe ich mir vorgestellt, dass beim Update in die Datenbank ($updateSQL ) überall dort, wo der Radio-Button nicht ausgewählt war, eine "0" geschrieben wird und dort, wo der Radio-Button angewählt war ein "1".
    Aber genau dies passiert nicht. Es wird stattdessen nur beim Bild mit der höchsten Bildnummer eine "1" in die Datenbank geschrieben.

    Was habe ich übersehen?

    Danke für hilfreiche Gedanken.
    Gruß

    estebu


  • #2
    Du musst bei deinem RadioButton die Bild Nummer übergeben.
    Wenn es immer nur ein Bild sein soll..

    Ansonsten eine Checkbox als Array übergeben mit den Bild Nummern als value(s)

    Kommentar


    • #3
      Hmm, erstmal Respekt für den gut strukturierten Beitrag, das sieht man leider selten.

      Zum Problem:
      Code:
      <input name="selBild" type="hidden" id="selBild" value="<? echo $row_Foto['BNr']; ?>" />
      Wenn diese Zeile in einer Schleife steht, hast du mehrere Felder mit dem Namen selBild. Schickst du nun dein Formular ab, erhälst du nur den Wert des letzten Elements, das ausgegeben wurde. Ich würde dir empfehlen, die ID des Bildes in das value="" - Attribut des Radio-Buttons zu schreiben und dann lediglich den Button auszuwerten.
      http://hallophp.de

      Kommentar


      • #4
        @ Papst:

        Nun, ich übergebe die Bildnummer ja bereits mit
        PHP-Code:
        <input name="selBild" type="hidden" id="selBild" value="<? echo $row_Foto['BNr']; ?>" />
        Es werden in der Schleife immer ca. 10 Bilder ausgegeben. Nur EINES davon kann ja Vorschaubild sein, nicht 2 gleichzeitig. Das bedeutet: sobald ich ein Vorschaubild mittles Radio-Button auswähle, sollte der vorherige Eintrag, der bereits eine "1" war, nun wieder eine "0" werden. Also quasi: Wenn Radio-Button als "checked" markiert, dann schreibe "1" , falls nicht: schreibe "0"

        Kommentar


        • #5
          durch das ausgeben des hidden input per schleife setzt du 10x den wert von $_POST['selBild'] und schätzungsweise wird der letzte geschriebene (Vermutung) übertragen.
          Du sendest also jedesmal die ID des letzten Bildes mit, egal welche Radio-Box angewählt ist.

          Kommentar


          • #6
            Wäre es denn möglich , dafür ein Array zu bilden?

            Z.B.

            PHP-Code:
            <input name="Vorschau" type="radio" id="Vorschau" value="<? echo $row_Foto['BNr']; ?>" <? if ($row_Foto['Vorschau'] > '0')echo "checked"; ?> />
            <input name="selBild[]" type="hidden" id="selBild[]" value="<? echo $row_Foto['BNr']; ?>" />
            und dann irgendwie SO weiter verarbeiten?

            PHP-Code:
            if ((isset($HTTP_POST_VARS["mm_form1"])) && ($HTTP_POST_VARS["mm_form1"]=="mm_form1")) {
                
            $arrSizeVor=sizeof($_POST["selBild"]);
                
            $selBild=$_POST["selBild"];
                if (
            $arrSizeVor>0) {
                    for (
            $i=0;$i<$arrSizeVor;$i++) {
                        
                        
            $selBNrVor=$selBild[$i];
                        
            mysql_select_db($database_connect$connect);
                        
            $query_Foto_Vor "SELECT Bild FROM fc_loc_fotos WHERE BNr=".$selBNrVor;
                        
            $Foto_Vor mysql_query($query_Foto_Vor$connect) or die(mysql_error());
                        
            $row_Foto_Vor mysql_fetch_assoc($Foto_Vor);
                        
            $numb_image_Vor mysql_num_rows($Foto_Vor);
                        
                        
                  
            $updateSQL sprintf("UPDATE fc_loc_fotos SET Vorschau=%s WHERE BNr=".$selBild,
                                                                         
                                   
            GetSQLValueString($_POST['Vorschau'], "int"));

              
            mysql_select_db($database_connect$connect);
              
            $Result2 mysql_query($updateSQL$connect) or die(mysql_error());

                }
             
              }


            Obiges Beispiel ist aber leider noch nicht funktionstüchtig.

            Kommentar


            • #7
              Wozu? Du brauchst doch nur die ID des Bildes, dass dir als Vorschaubild dienen soll. Hau zuerst ein Update raus, das die entsprechende Spalte für alle Einträge auf 0 setzt und eine zweite Abfrage, die den Wert der Zeile auf 1 setzt, deren ID du übermittelt hast.
              http://hallophp.de

              Kommentar


              • #8
                Ja, das ist ja mein Problem - ich verstehe hier jetzt nicht ganz, wie ich das praktisch mache.

                Du meinst also, diese Zeile reicht aus?

                PHP-Code:
                <input name="Vorschau" type="radio" id="Vorschau" value="<? echo $row_Foto['BNr']; ?>" <? if ($row_Foto['Vorschau'] > '0')echo "checked"; ?> />
                Dann habe ich doch wieder 10 x den Wert für "Vorschau" - auch wenn jedesmal in der value eine andere Bildnummer steht....

                *grübel*

                Oder meinst du, DARAUS dann ein Array bilden? Falls ja - sagst du mir, wie?

                Kommentar


                • #9
                  Werden Radiobuttons mit identischem Namen definiert, kann nur ein Button von ihnen ausgewählt werden. Entsprechend wird auch nur der Wert eines Buttons beim Absenden des Formulars übertragen.
                  http://hallophp.de

                  Kommentar


                  • #10
                    Hast Recht. Dafür sind Radio-Buttons ja auch da
                    Es funktioniert nun folgendermaßen:

                    Formularfeld:
                    PHP-Code:
                    <input name="Vorschau" type="radio" id="Vorschau" value="<? echo $row_Foto['BNr']; ?>" <? if ($row_Foto['Vorschau'] > '0')echo "checked"; ?> />
                    Auswerung (mit nur EINEM UPDATE)

                    PHP-Code:
                    if ((isset($_POST["mm_form1"])) && ($_POST["mm_form1"] == "mm_form1")) {

                        
                    $selBild $_POST["Vorschau"];
                          
                    $updateSQL sprintf("UPDATE fc_loc_fotos SET Vorschau=%s WHERE BNr=".$selBild,
                                                                                 
                                           
                    GetSQLValueString($_POST["Vorschau"], "int"));

                      
                    mysql_select_db($database_connect$connect);
                      
                    $Result2 mysql_query($updateSQL$connect) or die(mysql_error());

                     


                    Dabei wird aber leider der zuvor eingetragene Wert nicht gelöscht bzw. auf "0" zurückgesetzt. *grmbl* Aber ich spüre, dass ich nahe dran bin Vielleicht doch zuerst alles mit "0" updaten? Aber wie??

                    Ich musste dann nur den INT -Wert in der Datenbank (weil ich ja ursprünglich nur "1" oder "0" eintragen lassen wollte) von "1" nun auf "6" stellen, da die Bilder mittlerweile 4-stellige Nummern haben und noch kein Ende abzusehen ist.
                    Gibt es wirklich keine Variante, bei der nur eine "1" oder eine "0" eingetragen wird? Momentan wird ja die Bildnummer in die Spalte "Vorschau" eingetragen.

                    Kommentar


                    • #11
                      Zitat von estebu Beitrag anzeigen
                      Dabei wird aber leider der zuvor eingetragene Wert nicht gelöscht bzw. auf "0" zurückgesetzt.
                      Welcher zuvor eingetragene Wert?

                      Wir reden hier von einem UPDATE, welches den Wert einer Spalte auf 1 setzen soll - das klappt entweder, oder es klappt nicht.
                      Hast du eine entsprechende Fehlerüberprüfung/-behandlung in deinem Code drin?

                      Ich musste dann nur den INT -Wert in der Datenbank (weil ich ja ursprünglich nur "1" oder "0" eintragen lassen wollte) von "1" nun auf "6" stellen, da die Bilder mittlerweile 4-stellige Nummern haben und noch kein Ende abzusehen ist.
                      Was soll dieser Int-Wert denn repräsentieren?
                      Wenn deine Bilder „vierstellige Nummern“ haben, was auch immer das jetzt wieder bedeuten soll - was willst du dann wie mit einem Wert aus dem Bereich 1 bis 6 darauf abbilden?
                      Meinst du gar nicht den Wert der Spalte, sondern den Wertebereich?

                      Kommentar


                      • #12
                        Ne, also ich habe dich so verstanden, dass über die Spalte Vorschau ein Status gesetzt werden soll, der signalisiert, ob das Bild ein Vorschaubild ist oder nicht. Das ist auch gut so. Jetzt schreibst du aber offensichtlich die ID des Bildes dort rein. Warum? Schreib dort eine 1 rein, die ID braucht du nur für die WHERE - Klausel. Vorher setzt du alle Einträge in der Spalte Vorschau auf 0.
                        http://hallophp.de

                        Kommentar


                        • #13
                          nun, ich kam darauf, weil du vorerst meintest

                          Ich würde dir empfehlen, die ID des Bildes in das value="" - Attribut des Radio-Buttons zu schreiben und dann lediglich den Button auszuwerten.
                          Das habe ich ja nun gemacht, also ist die ID des Bildes nun das value, also der Wert, der dann übergeben wird. Und dieser Wert wird mittels

                          PHP-Code:
                          GetSQLValueString($_POST["Vorschau"], "int"
                          in die Datenbank geschrieben.

                          Ich prüfe dann bei nochmaligem Aufrufen der Seite (also nach dem UPDATE) mittels

                          PHP-Code:
                          <? if ($row_Foto['Vorschau'] > '0')echo "checked"; ?>
                          ob der Wert größer "0" ist (was ja bei der Bildnummer auf jeden Fall der Fall ist) und demnach wird dann hinter dem betreffenden Bild der Radio-Button als "checked" angezeigt. Wähle ich nun aber ein Bild darüber aus und setze den Button dort auf "checked", wird zwar in der Datenbank auch dort die zugehörige Bildnummer eingetragen, aber folgender Code

                          PHP-Code:
                          if ((isset($_POST["mm_form1"])) && ($_POST["mm_form1"] == "mm_form1")) {
                              
                          $location $_POST["ref_location"];
                              
                          $null "0";
                              
                          $selBild $_POST["Vorschau"];
                              
                              
                          $updateSQL sprintf("UPDATE fc_loc_fotos SET Vorschau=%s WHERE ref_location=".$location,
                                                                                       
                                                 
                          GetSQLValueString($null"int"));
                              
                              
                                
                          $updateSQL sprintf("UPDATE fc_loc_fotos SET Vorschau=%s WHERE BNr=".$selBild,
                                                                                       
                                                 
                          GetSQLValueString($_POST["Vorschau"], "int"));

                            
                          mysql_select_db($database_connect$connect);
                            
                          $Result2 mysql_query($updateSQL$connect) or die(mysql_error());

                           


                          bewirkt leider nicht, was er soll, nämlich zuerst alle Einträge unter "Vorschau" in der Tabelle auf "0" setzen und dann das UPDATE des neuen Eintrages machen. Kann ich denn in dieser Form keine zwei UPDATES hintereinander machen?

                          Kommentar


                          • #14
                            Alles richtig, nur was willst du damit erreichen, wenn du die Bild-ID in die Spalte Vorschau einträgst? Du willst doch lediglich ein Flag setzen, damit du entscheiden kannst, welches Bild als Vorschaubild angezeigt werden soll, oder nicht? Und da tut es nun mal auch eine 1.

                            Kann ich denn in dieser Form keine zwei UPDATES hintereinander machen?
                            Du musst natürlich beide Abfragen auch an die Datenbank senden!
                            http://hallophp.de

                            Kommentar


                            • #15
                              Zitat von estebu Beitrag anzeigen
                              Kann ich denn in dieser Form keine zwei UPDATES hintereinander machen?
                              Doch kannst du - allerdings machst du es ja nicht.

                              Du weißt der Variablen $updateSQL einen Wert zu.
                              Dann überschreibst du diesen, in dem du der Variablen $updateSQL einen neuen Wert zuweist.
                              Erst anschliessend übergibst du das, was in $updateSQL steht, der Datenbank zur Ausführung ...

                              Kommentar

                              Lädt...
                              X