Wertübergabe bei Formularen

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

  • Wertübergabe bei Formularen

    Hallo alle miteinander.

    Ich bin ganz neu im Forum und auch noch dazu ein totaler Anfänger in PHP (ok, das steht ja in fast jedem 2. Thread =P ).

    Ich habe ein Problem mit der Übergabe von Werten aus einem Formular:

    Ich lasse eine MySQL-Tabelle auslesen und anzeigen mit der Zusatzoption, dass am Ende jeder Zeile ein 'Bestell'-Button ist, der die jeweilige Zeile zu einer neuen Tabelle hinzufügen soll. Eine Auswahl findet durch Radio-Buttons statt.

    Zur Veranschaulichung:

    Nummer* | Bezeichnung* | Größe-klein# | Größe-mittel# | Größe-groß#

    * = Die Daten dazu werden aus der Tabelle ausgelesen
    # = Hier gibt es 3 Radio-Buttons; einer ist zu markieren

    Damit ich die Daten übertragen kann, die aus der Tabelle eingelesen werden, habe ich mich für 'unsichtbare' Buttons entschieden ('type=hidden').

    Wie ich in diesem Thread gelesen habe, liegt mein Problem daran, dass ich die Werte bei jedem Schleifendurchlauf wieder überschreibe und ich ein Array nutzen muss.

    Bei Quakenet steht, dass hinter das name-Attribut '[]' hinmüssen, um die Daten in einem Unterarray zu speichern, aber irgendwie habe ich das nicht so ganz gecheckt.


    Mein Problem ist jetzt eigentlich folgendes:
    Der Wert für den Radio Button wird korrekt übergeben, nur die hidden-Felder eben nicht.

    Kann mir vielleicht jemand weiterhelfen?

    Hier ein Ausschnitt meines Quelltextes:

    Die Übergabe von bestellung.php

    PHP-Code:
    for ($i=0$i $num_results$i++) 
    {
                
    $row mysqli_fetch_assoc($result);

                echo 
    "<tr>\n <td align='left'>" .  
                
    stripslashes($row['sp_nr']) .     
                
    "<input type='hidden' name='sp_nr' value='" $row['sp_nr'
                . 
    " '>" "</td>\n";
                echo 
    "\n <td align='left'>" .
                
    stripslashes($row['bezeichnung']) . 
                
    "<input type='hidden' name='bezeichnung' value='" .
                
    $row['bezeichnung'] . "'>" "</td>\n";
     } 
    Und die Seite, auf die die Werte übergeben werden:

    PHP-Code:
    $db = new mysqli(MYSQL_HOSTMYSQL_USER
    MYSQL_PASSMYSQL_DATABASE);

        if (
    mysqli_connect_errno()) {
        echo 
    'Fehler: Verbindung zur Datenbank nicht möglich!';
        exit;
        }

        
    $groesse $_POST['groesse'];
        
    $sp_nr $_POST['sp_nr'];
        
    $bezeichnung $_POST['bezeichnung']; 
    Zuletzt geändert von Fisi; 22.11.2006, 14:21.

  • #2
    du hast das problem richtig erkannt und eine lösung gefunden. jetzt nur noch umsetzen.

    setze das "[]" hinter die namen deiner input-felder und lasse dir den inhalt von $_POST auf der ziel-seite mittels print_r() ausgeben, dann wirst du verstehen, wie du die daten richtig empfängst und verarbeitest.

    Kommentar


    • #3
      name='sp_nr' wird zu name='sp_nr[]' oder name='sp_nr[n]'

      Kommentar


      • #4
        Wow, danke für die superschnellen Antworten. =)

        Also ich habe jetzt den name in 'sp_nr[]' geändert und mir alles mit print_r() ausgeben lassen.

        Ich habe folgende Ausgabe:
        Array ( [sp_nr] => Array ( [0] => 100 [1] => 101 [2] => 102 [3] => 103 )

        Daraus nehme ich mir, dass die Daten nacheinander in das Array gespeichert werden, also auf Platz 0 kommt die sp_nr 100 usw.

        Um jetzt den richtigen Wert auszugeben müsste ich das richtige Element aus dem Array aufrufen, oder?

        Mit
        PHP-Code:
        $sp_nr $_POST['sp_nr[]']; 
        funktioniert das aber leider nicht, auch wenn ich einen relativen Wert (z.B. 'i' aus der Zählschleife (siehe oben)) oder gar einen absoluten Wert (z.B.[2]) angebe, wird immer nur der letzte Datensatz ausgegeben.

        Ich gehe davon aus, dass die anderen Datensätze jetzt nicht mehr überschrieben werden, nur mit der Ausgabe stimmt etwas nicht, sehe ich das richtig?

        Kommentar


        • #5
          Original geschrieben von Fisi
          Ich gehe davon aus, dass die anderen Datensätze jetzt nicht mehr überschrieben werden, nur mit der Ausgabe stimmt etwas nicht, sehe ich das richtig?
          $_POST musst du als ein mehrdimensionales array ansprechen, also 'sp_nr' ist ein unterarray:

          $_POST['sp_nr'][0]

          Kommentar


          • #6
            Ok, danke!
            Soweit funktioniert das erstmal.

            Aber eigentlich wollte ich ja keinen absoluten Wert in das Array eingeben, wie $_POST['sp_nr'][0] .

            Ich habe versucht meine Variable 'i' zusätzlich zu übergeben und diese dann als relativen Arraywert einzutragen, aber erstens wird nun nichts ausgegeben und zweitens bekomme ich folgende Fehlermeldung:

            Warning: Illegal offset type

            In der Zeile, in der nun der relative i-Wert steht.

            Irgendwo habe ich sicher noch einen totalen Denkfehler!
            Tut mir leid, wenn ich euch damit nerve =(

            Kommentar


            • #7
              welches ist der erste benutzte i wert? 0 oder 1?

              Kommentar


              • #8
                Der erste benutzte i-Wert ist laut Ausgabe '0'.

                Kommentar


                • #9
                  dann zeig mal nen codeauszug und die genaue fehlermeldung.

                  die zeile mit dem Fehler bitte markieren

                  Kommentar


                  • #10
                    Also ich habe jetzt noch als Zusatzwert i übergeben und wollte den im Array auslesen lassen:

                    Die bestellung.php

                    PHP-Code:
                                for ($i=0$i $num_results$i++) 
                               {

                                
                    $row mysqli_fetch_assoc($result);

                                echo 
                    "<tr>\n <td align='left'>" .  stripslashes($row['sp_nr']) .  "
                                <input type='hidden' name='sp_nr[]' value='" 
                    $row['sp_nr'] . "'>" "</td>\n";

                                echo 
                    "\n <td align='left'>"stripslashes($row['bezeichnung']).
                                
                    "<input type='hidden' name='bezeichnung[]' value='" .
                                
                    $row['bezeichnung'] . "'>" "</td>\n";

                                echo 
                    "\n <td align='center'>"stripslashes($row['preis_klein']),"
                                <input type='radio' name='groesse' value='klein'>
                                </td>\n"
                    ;

                                echo 
                    "\n <td align='center'>"stripslashes($row['preis_mittel']),"
                                <input type='radio' name='groesse' value='mittel'>
                                </td>\n"
                    ;

                                echo 
                    "\n <td align='center'>"stripslashes($row['preis_gro']),"
                                <input type='radio' name='groesse' value='gro'></td>\n"
                    ;

                                echo 
                    "<input type='hidden' name='i' value='" $i "'>";
                                echo 
                    "\n <td align='left'><input type='submit' value='Bestellen'></td>\n";

                                } 
                    Die betroffene Datei

                    PHP-Code:
                        $groesse $_POST['groesse'];
                        
                    $i $_POST['i'];

                    -> 
                    $sp_nr $_POST['sp_nr'][$i]; 
                    -> 
                    $bezeichnung $_POST['bezeichnung'][$i];

                        echo 
                    '<br>';
                        
                    print_r($_POST);
                        echo 
                    '<br>'
                    Diese Zeilen sind betroffen (aus dem zweiten, kürzeren Quelltext, mit '->' markiert):


                    $sp_nr = $_POST['sp_nr'][$i];
                    $bezeichnung = $_POST['bezeichnung'][$i];

                    Kommentar


                    • #11
                      Na ja, mit Deinem "i" machst Du ja jetzt den alten Fehler. Es wird nur der letzte Wert übertragen.
                      Wenn Du Deinen Feldern die Information mitgeben musst, zu welcher Datensatz-ID sie gehören, kannst Du diese ID auch in die [] schreiben.
                      Also ungefähr so:
                      PHP-Code:
                      $id $row['sp_nr'];
                      echo 
                      "<input type='hidden' name='bezeichnung[" $id "]' value='" $row['bezeichnung'] . "'>"
                      LG

                      Kommentar


                      • #12
                        Also ich kann die Werte zwar jetzt in die Arrays speichern (auch bei i), aber ausgegeben wird dennoch immer die letzte Zeile. Das liegt daran, dass ich nach wie vor nur einen absoluten Wert angeben kann. Wenn ich i als Array übergebe und dann eben dieses i als Array in einer anderen Variable aufrufe funktioniert das nicht, bzw. es kommen die falschen Daten.

                        Wenn ich i als Arrayelement angebe, dann steht die Ausgabe "Array" da.

                        Auf der 1. Seite lasse ich mir dieses i-Array ausgeben und es werden die richtigen Daten hineingeschrieben, nur auslesen kann ich sie auf relativen Wege nicht >_<

                        Übergabe i:

                        PHP-Code:
                        echo "<input type='hidden' name='zaehler[$i]' value='" $i "'>"
                        Auslesen der Übergabe:

                        PHP-Code:
                        $i $_POST['zaehler']; 
                        Einsetzen von i:

                        PHP-Code:
                        $sp_nr = array($i);

                        echo 
                        'Speisenummer:' $sp_nr  '<br>'
                        Ja und die Ausgabe ist dann: 'Array'....

                        Kommentar


                        • #13
                          Original geschrieben von Fisi
                          Übergabe i:
                          PHP-Code:
                          echo "<input type='hidden' name='zaehler[$i]' value='" $i "'>"
                          Was genau ist in diesem Falle $i?

                          Auslesen der Übergabe:
                          PHP-Code:
                          $i $_POST['zaehler']; 
                          Also ist $i jetzt ein Array.
                          Einsetzen von i:
                          PHP-Code:
                          $sp_nr = array($i);

                          echo 
                          'Speisenummer:' $sp_nr  '<br>'
                          Ja und die Ausgabe ist dann: 'Array'....
                          Was bezweckst du mit array($i), wenn $i selber doch schon ein Array ist?
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Nun ja, das ist eine gute Frage...
                            Ich will ja nur die Nummer der Zeile haben, aus der die Werte übergeben werden...mehr will ich ja gar nicht...

                            Wenn ich
                            PHP-Code:
                            $sp_nr = array($i); 
                            nicht hinschreibe, dann wird auch 'Array' ausgegeben.

                            Kommentar


                            • #15
                              Machst du print_r($_POST),
                              verstehst du die Struktur der übergebenen Daten,
                              erstellst du sinnvolle Lösung.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X