[Ajax] Dynamisch erstellte inputs in DB übernehmen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Leon, 4. Dezember 2008 .

  1. 4. Dezember 2008
    Dynamisch erstellte inputs in DB übernehmen

    Hallo,
    habe folgendes Problem:
    Ich habe ein Formular mit dem ich eine Expertennummer aufnehmen und die Spezialisierung des Experten aus einer dropdown box auswählen kann.
    Der Experte kann mehrere Spezialisierungen haben.
    Nun habe ich mit prototype ermöglicht dass die select box mehrmals hinzugefügt werden kann.
    Jetzt habe ich aber Probleme beim einlesen der Daten aus den SELECT-Boxen, da diese ja nun alle gleich heißen und er mir da schon bei der ersten Prüfung einen fehler ausgibt.
    Wie kann ich das lösen?

    Formular:
    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script src="prototype.js" type="text/javascript"></script>
    <script type="text/javascript">
    function hol_dropdown() {
     var myAjax = new Ajax.Request(
     "dropdown.php",
     { method: 'get', 
     onComplete: zeige_dropdown }
     );
    }
    
    function zeige_dropdown( originalRequest ) {
     document.getElementById('dropdowns').innerHTML += originalRequest.responseText;
    }
    
    </script>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Unbenanntes Dokument</title>
    </head>
    <form name="experte" action="eintragen.php" method="POST">
    <div class="beschreibung">
    Expertennummer:
    </div>
    <div class="eingabe"><input name="expertennummer"type="text" size="5"/></div>
    <?php
     include('dropdown.php');
    ?>
    <div id="dropdowns">
    </div>
    <br />
    <input type="button" value="Neues DropDown" onClick="hol_dropdown()" />
    <br />
    <input type="submit" value="Absenden" name"senden" />
    </form>
    
    <body>
    </body>
    </html>
    
    PHP zum erzeugen der dropdowns:
    Code:
    <?php
    echo "<div class=\"beschreibung\">Spezialgebiet</div>";
    $db = @new mysqli('localhost', 'root', '', 'experten');
    if (mysqli_connect_errno()) {
     die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
    }
    $sql = 'SELECT
     schlagwort
    FROM
     schlagworte';
    $result = $db->query($sql);
    if (!$result) {
     die ('Etwas stimmte mit dem Query nicht: '.$db->error);
    }
    
     echo "<select name=\"Spezialisierung\">\n";
     echo "<option value=\"NULL\">Bitte waehlen</option>\n";
    
    
    while ($row = $result->fetch_assoc()) { // NULL ist äquivalent zu false
     // $row ist nun das Array mit den Werten
     $string=$row['schlagwort'];
     echo "<option value=\"$string\">$string</option>\n";
    }
    echo "</select><br>";
    $result->close();
    unset($result); // und referenz zum objekt löschen, brauchen wir ja nicht mehr...
    ?>
    
    PHP zum einlesen der Werte in DB:
    Code:
    
    <?php
    // [...]
    $db = @new mysqli('localhost', 'root', '', 'experten');
    if (mysqli_connect_errno()) {
     die('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
    }
    
    if ('POST' == $_SERVER['REQUEST_METHOD']) {
     if (!isset($_POST['expertennummer'], $_POST['Spezialisierung'])) {
     die ('Benutzen sie nur Formulare von der Homepage.');
     }
     if (('' == $expertennummer = trim($_POST['expertennummer'])) or 
     ('' == $schlagwort = trim($_POST['Spezialisierung']))
     ) {
     die ('Bitte füllen sie das Formular vollständig aus.');
     }
     $sql = 'INSERT INTO
     experten_schlagworte
     VALUES
     (?,?)';
     $stmt = $db->prepare($sql);
     if (!$stmt) {
     die ('Es konnte kein SQL-Query vorbereitet werden: '.$db->error);
     }
     $stmt->bind_param('si', $schlagwort, $expertennummer);
     if (!$stmt->execute()) {
     die ('Query konnte nicht ausgeführt werden: '.$stmt->error);
     }
     echo '<p class="info">Experte hinzugefügt. <a href="blub.php">Zurück zum Formular</a>.</p>';
    } else {
    echo"FALSCHE METHODE";
    }
    ?>
     
  2. 4. Dezember 2008
    AW: Dynamisch erstellte inputs in DB übernehmen

    Ähm tut mir leid aber ich hab echt kein Bock mir den kompletten Code anzugucken und damit sprech ich glaube ich vielen aus der Seele
    Nein wirklich. Versuch erstmal selber den Fehler einzugrenzen indem du dir an sinnvollen stellen den Inhalt von wichtigen Variablen ausgeben lässt. Du weisst nunmal am besten wie dein Code arbeiten soll.
    Wenn du den Fehler dann eingegrentzt hast oder du allgemein ein Problem mit der nötigen Programmlogik hast, dann aktuallisier das hier nochmal.
     
  3. 4. Dezember 2008
    AW: Dynamisch erstellte inputs in DB übernehmen

    Also was halt das eigentliche Problem ist:
    wenn ich einen select habe funktioniert das auswerte php skript , wenn jedoch mehr als ein select feld mit dem gleichen namen vorhanden ist, kann nicht mehr ausgewertet werden, ist ja klar, da anschenend das auswerte skript nicht mehr die werte von den selects übernimmt. ich möchte also eine variable anzahl an selects per post in einer php datei auswerten und ind die db schreiben.
     
  4. 4. Dezember 2008
    AW: Dynamisch erstellte inputs in DB übernehmen

    du kannst das ganze mit arrays gestelten wenn ich dich richtig verstanden habe:

    PHP:
    <form>
    <select name="Spezialisierung[]">
    <option>1</option>
    </select>

    <select name="Spezialisierung[]">
    <option>2</option>
    </select>
    </form>

    <?php

    // nächstes script
    $array  $_POST [ 'Spezialisierung' ];
    ?>
    Also $_POST schließt keine arrays aus. somit kannst du auch hier mit unterschiedlich vielen selects arbeiten
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.