Andi123: Formularvariablen auslesen, aber wie?

Hallo,

ich habe eine Tabelle, in der ich verschiedene Sprachen speichere.
Eine weitere Tabelle enthaelt Personendaten.

In einem Formular moechte ich nun abfragen, ob die Person die jeweilige Sprache gut/mittel/schlecht spricht.

Da die Sprachtabelle erweiterbar sein soll, werden die Formularfelder dynamisch erzeugt:
<?
$erg=mysql_db_query($datenbank,"select * from m_sprachen",$verbindung);
while ($row = mysql_fetch_object($erg))
{
?>
Sprache: <?=$row->sprache?>
<inpt type=hidden name ="m_sprache[]" value="<?=$row->sprachen_id?>">
<input type=radio name="m_sprache_wert_<?=$row->sprachen_id?>[]" value="1">
<input type=radio name="m_sprache_wert_<?=$row->sprachen_id?>[]" value="2">
<input type=radio name="m_sprache_wert_<?=$row->sprachen_id?>[]" value="3">
<?
}
?>

Danach moechte ich die eingetragenen Werte auslesen und in eine weitere Tabelle eintragen.
Diese Tabelle hat die Felder PERSONEN_ID,SPRACHE_ID,SPRACHE_WERT.
(SPRACHE_WERT ist der Wert, wie gut die Person die Sprache spricht)

Ich habe keine Ahnung, wie ich das realisieren kann.
Ist das Problem ueberhaupt so loesbar? Oder muss das HTML-Formular anders gebaut sein?

Als Knackpunkt fuer mich sehe ich, das ich nicht weiss, wie ich die dynamisch erzeugten Namen der Radiobuttons in PHP auslesen kann, da die Namen an sich ja eigentlich Variablen sind. Wie stehen mir diese in PHP zur Abfrage zur Verfuegung?

Noch eine Frage: ist es moeglich, mir alle per POST uebergebenen Formularvariablen zu Debugzwecken auf einmal ausgeben zu lassen?

Vielen Dank
Andi

  1. Hallo Andi,

    <?

    <?php waere besser, falls die Kurzformen abgeschaltet sind
    warum machst du in der Schleife php dauernd auf und zu, besser faende ich die Anfuehrungszeichen ein fach auszuescapieren (" statt "), aber das nur mal am Rande.

    ist es moeglich, mir alle per POST uebergebenen Formularvariablen zu Debugzwecken auf einmal ausgeben zu lassen?

    alle Arrays kann man ausdrucken mit print_r($arrayname), wenn man davor noch ein <pre> macht, ist es auch gut leserlich.

    Als Knackpunkt fuer mich sehe ich, das ich nicht weiss, wie ich die dynamisch erzeugten Namen der Radiobuttons in PHP auslesen kann,

    Der Wert von <input type=... name='foo'> steht Dir nach dem posten als
    $_POST['foo'] zur Verfuegung, also kannst Du Deine Query in der Art
    INSERT INTO tabelle VALUES ('$_POST[foo]'...) machen.

    Es gibt dazu einen Artikel http://aktuell.de.selfhtml.org/tippstricks/php/checkboxen/index.htm
    Ausserdem waere so ein Blick ins PHP-, bzw MySQL-Manual auch kein Fehler.

    Dieter

    1. warum machst du in der Schleife php dauernd auf und zu, besser faende ich die Anfuehrungszeichen ein fach auszuescapieren (" statt "), aber das nur mal am Rande.

      Hm, fuer mich ist es uebersichtlicher, wenn ich nicht escapen muss.

      ist es moeglich, mir alle per POST uebergebenen Formularvariablen zu Debugzwecken auf einmal ausgeben zu lassen?
      alle Arrays kann man ausdrucken mit print_r($arrayname), wenn man davor noch ein <pre> macht, ist es auch gut leserlich.

      Danke. Hab es auch mal ohne den $arrayname probiert, da ich nicht genau wusste, was denn wirklich uebertragen wurde und auch da werden mir alle Werte ausgegeben.
      Vielen Dank fuer den Tipp!!!

      » »» Als Knackpunkt fuer mich sehe ich, das ich nicht weiss, wie ich die dynamisch erzeugten Namen der Radiobuttons in PHP auslesen kann,

      Der Wert von <input type=... name='foo'> steht Dir nach dem posten als
      $_POST['foo'] zur Verfuegung, also kannst Du Deine Query in der Art

      Hm, das wusste ich, aber die Schwierigkeit ist doch die dynamische Sache. Wenn ich nicht weiss, wieviele Felder uebergeben werden (da die Anzahl der Sprachen variieren kann, wenn z.B. neue Sprachen hinzugefuegt werden), weiss ich beim Programmieren der Auswertung ja auch nicht, wie die uebergebenen Felder heissen bzw. wieviele Felder auszuwerten sind.

      Nochmal vielen Dank
      Andi

      1. hi,

        Wenn ich nicht weiss, wieviele Felder uebergeben werden (da die Anzahl der Sprachen variieren kann, wenn z.B. neue Sprachen hinzugefuegt werden), weiss ich beim Programmieren der Auswertung ja auch nicht, wie die uebergebenen Felder heissen bzw. wieviele Felder auszuwerten sind.

        wenn du radio-buttons verwendest, solltest du allen, die zu einer gruppe gehören (und die sprache ist ja eine gruppe), den selben namen geben. denn der user soll doch nur eine auswahl treffen können, oder?

        und in php fragst du dann nur ab, welcher value für diesen namen übergeben wurde.

        gruss,
        wahsaga

        1. wenn du radio-buttons verwendest, solltest du allen, die zu einer gruppe gehören (und die sprache ist ja eine gruppe), den selben namen geben. denn der user soll doch nur eine auswahl treffen können, oder?

          Ja, aber ist es nicht so. Ich programmiere heute die Abfrage und in der Sprach DB sind 3 Sprachen enthalten.
          Wenn aber der Webseitenbesitzer es sich ueberlegt und jetzt noch 2 Sprachen mit aufnimmt, dann funktioniert ja die Abfrage, wenn ich die fest codiere ja immer nur noch fuer die ersten 3 Sprachen, die anderen beiden kennt das Formular ja gar nicht. Es sei denn ich hole die Sprachfelder aus einer DB (wie ich es machen will), aber damit weiss ich von vornherein ja nicht, wie die Felder, die ich auswerten muss, heissen.
          Oder hab ich nen ganz groben Denkfehler?

          Danke Andi

          1. hi,

            Ich programmiere heute die Abfrage und in der Sprach DB sind 3 Sprachen enthalten.
            Wenn aber der Webseitenbesitzer es sich ueberlegt und jetzt noch 2 Sprachen mit aufnimmt, dann funktioniert ja die Abfrage, wenn ich die fest codiere ja immer nur noch fuer die ersten 3 Sprachen, die anderen beiden kennt das Formular ja gar nicht.

            das ändert doch aber nichts daran, dass es keinen grossen sinn macht, dem user die möglichkeit zu geben, mehr als eine sprache auszuwählen, oder?

            Es sei denn ich hole die Sprachfelder aus einer DB (wie ich es machen will), aber damit weiss ich von vornherein ja nicht, wie die Felder, die ich auswerten muss, heissen.

            alle radiobuttons aus dieser gruppe bekommen _einen_ gemeinsamen namen, meinetwegen "sprache". als _value_ bekommen sie die werte der einzelnen sprachen. das lässt sich ja ohne weiteres auch mit dynamisch aus der DB gelesenen werten machen.

            im script bekommst du jetzt immer nur einen einzige variable unter dem namen "sprache" geliefert ($_GET['sprache'] oder $_POST['sprache']). deren _wert_ entspricht jetzt wieder einer deiner sprachkenunngen, wie sie in der DB vorhanden sind.

            gruss,
            wahsaga

            1. das ändert doch aber nichts daran, dass es keinen grossen sinn macht, dem user die möglichkeit zu geben, mehr als eine sprache auszuwählen, oder?

              Okay, wir haben aneinander vorbeigeredet.
              Jeder Person werden zu den angegebenen Sprachen, die Sprachkenntnisse (gut/mittel/schlecht) zugeordnet.
              Deshalb gibt es fuer jeden Benutzer mehr als eine Sprache.
              Innerhalb jeder Sprache sind dann Radiobuttons, die den Grad der Sprachkenntniss angeben.
              Und das macht es ein bissl tricky, zumindest fuer mich.
              Habe das jetzt loesen koennen, indem die Buttons wie Arrays behandelt werden und zu jedem Radiobutton ein hidden-Feld mit der Sprach-ID mitgeliefert wird.
              Sieht kompliziert aus, aber ich wuesst nicht, wie ich es haette anders loesen koennen...

              Danke Andi

      2. Hallo,

        $_POST['foo'] zur Verfuegung, also kannst Du Deine Query in der Art
        Hm, das wusste ich, aber die Schwierigkeit ist doch die dynamische Sache. Wenn ich nicht weiss, wieviele Felder uebergeben werden (da die Anzahl der Sprachen variieren kann, wenn z.B. neue Sprachen hinzugefuegt werden), weiss ich beim Programmieren der Auswertung ja auch nicht, wie die uebergebenen Felder heissen bzw. wieviele Felder auszuwerten sind.

        wie waer's mit einem Schleifchen?
        foreach ($_POST['foo'] as $value)
        {
        ..
        }
        Wie Du erreichst, dass die Werte als Array kommen, findest Du in dem Artikel, den ich gepostet habe.

        Dieter