Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten eines Formulars in DB schreiben

Einklappen

Neue Werbung 2019

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

  • Daten eines Formulars in DB schreiben

    Hallo erstmal,

    ich bin neu hier im Forum und erhoffe mir Hilfe bei einem kleinen Projekt an dem ich momentan arbeite.
    Es geht dabei um einen Fragebogen, den ich gerade erstelle. Vorgestellt habe ich mir das folgendermaßen:

    Ich erstelle ein Fragebogen in php. Die Antworten werden in eine MySQL Datenbank geschrieben und daraufhin von mir ausgewertet.

    Leider sind meine Programmierkenntnisse marginal. Ich studiere Wirtschaftsingenieurwesen und PHP war leider nicht Teil des Studiums.

    Nun also zu meinem Quellcode:

    PHP-Code:
    <?php
    $db_host 
    "localhost";
    $db_user "root";
    $db_pass "test";
    $db_name "test";
     
    if (isset( 
    $_POST['idee_oder_kommentar_weiter'] ))
    {
        if ((!empty(
    $_POST['Grund_kein_Login1'])) or (!empty($_POST['Grund_kein_Login2'])) or (!empty($_POST['Grund_kein_Login3'])) or (!empty($_POST['Grund_kein_Login4'])) or (!empty($_POST['Anderer_Grund']))) 
        {
        
    // Maskierende Slashes aus POST entfernen
        
    $_POST get_magic_quotes_gpc() ? array_map'stripslashes'$_POST ) : $_POST;
     
        
    // Inhalte der Felder aus POST holen
        
    $Grund_kein_Login1 $_POST['Grund_kein_Login1'];
        
    $Grund_kein_Login2 $_POST['Grund_kein_Login2'];
        
    $Grund_kein_Login3 $_POST['Grund_kein_Login3'];
        
    $Grund_kein_Login4 $_POST['Grund_kein_Login4'];
        
    $Anderer_Grund $_POST['Anderer_Grund'];
     
        
    /* ************************************************************************************************ */
        /* *** Hier sollten und MUESSEN die Benutzereingaben geprueft werden um Schadcode abzufangen!!! *** */
        /* ************************************************************************************************ */
     
        // Sind alle Eingaben durch die Validierung gekommen werden sie in die DB geschrieben
        // Verbindung oeffnen und Datenbank ausweahlen
        
    $conID mysql_connect$db_host$db_user$db_pass ) or die( "Die Datenbank konnte nicht erreicht werden!" );
        if (
    $conID)
        {
            
    mysql_select_db$db_name$conID );
        }
     
        
    // Anfrage zusammenstellen der an die DB geschickt werden soll
        
    $sql "INSERT INTO `warum_keine_idee_kommentar`
                    (`Grund_kein_Login1`, `Grund_kein_Login2`, `Grund_kein_Login3`, `Grund_kein_Login4`, `Anderer_Grund`)
                VALUES(
                '" 
    .mysql_real_escape_string$Grund_kein_Login1 ). "',
                '" 
    .mysql_real_escape_string$Grund_kein_Login2 ). "',
                '" 
    .mysql_real_escape_string$Grund_kein_Login3 ). "',
                '" 
    .mysql_real_escape_string$Grund_kein_Login4 ). "',
                '" 
    .mysql_real_escape_string$Anderer_Grund ). "')";
        
    // Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
        
    mysql_query$sql );
        
        }
        else
        {
            echo 
    "Bitte Grund angeben";
        }
    }
    ?>



    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
    <title>Idee Kommentar</title>
    </head>
    <body>

    <h1>Fragebogen</h1>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="formular" id="formular"> 

      <p>Was ist der Grund dafür, dass Sie bisher noch nicht aktiv waren?</p>
      <p>
        <input type="Checkbox" name="Grund_kein_Login1" value="Grund1"> Ich hatte keine gute Idee / keinen guten Kommentar<br>
        <input type="Checkbox" name="Grund_kein_Login2" value="Grund2"> Ich habe Angst vor negativer Resonanz<br>
        <input type="Checkbox" name="Grund_kein_Login3" value="Grund3"> Ich halte nichts von dem Konzept<br>
        <input type="Checkbox" name="Grund_kein_Login4" value="Grund4"> Grund4 xy<br>
        <br>Anderer Grund:<br>
        <input type="text" name="Anderer_Grund" size="50" maxlength="50"/> 
        </p>
        
    <input type="submit" name="idee_oder_kommentar_weiter" id="idee_oder_kommentar_weiter" value="Weiter" class="bigbutton"/>    

      </p>
    </form>

    </body>
    </html>


    Problem momentan ist, dass wenn ein Teil der Checkboxes nicht angekreuzt wird, folgende Fehlermeldung kommt:

    Notice: Undefined index: Grund_kein_Login2 in C:\xampp\htdocs\Fragebogen\warum_keine_idee_kommen tar.php on line 16

    Notice: Undefined index: Grund_kein_Login3 in C:\xampp\htdocs\Fragebogen\warum_keine_idee_kommen tar.php on line 17

    Notice: Undefined index: Grund_kein_Login4 in C:\xampp\htdocs\Fragebogen\warum_keine_idee_kommen tar.php on line 18


    Die Daten werden zwar richtig in die DB geschrieben, aber diese Fehlermeldung ist einfach unschön. Ich habe bereits nach einer Lösung im Internet gesucht. Es gab zwar einige Lösungsansätze, jedoch habe ich die meisten, auf Grund meiner beschränkten php Fähigkeiten, nicht verstanden.
    Meistens wird es über ein Array gelöst, allerdings steig ich da noch absolut nicht durch. Ich habe die Array-Lösung auch schon versucht zu erstellen, allerdings habe ich es dabei nicht geschafft, dass überhaupt etwas in die DB geschrieben wurde.


    Über Hilfe wäre ich sehr, sehr dankbar.

  • #2
    Wenn eine Checkbox nicht angeklickt wurde dann wird sie gar nicht vom Browser übertragen.

    Stichwort: isset/array_key_exist

    Kommentar


    • #3
      http://php.de/wiki-php/index.php/For..._Auswahlfelder

      Ich studiere Wirtschaftsingenieurwesen und PHP war leider nicht Teil des Studiums.
      Die wenigsten dürften mehr als Grundkenntnisse zu PHP im STudium gelernt haben. Du wirst Dir das also genauso selbst anlernen müssen, wie alle anderen hier.

      Kommentar


      • #4
        Danke schon mal für die schnellen Antworten.

        Was das Anlernen von PHP angeht, da bin ich ja gerade dabei .

        Aber das Problem hab ich leider bisher nicht gelöst gekriegt, obwohl ich schon seeeehr lange an dem Problem sitze.

        Ich werd den Link mal studieren und schauen was sich zu isset/array_key_exist finden lässt.

        Kommentar


        • #5
          Hey,

          diese Fehlermeldung heißt in dem Fall, das nichts mit dem POST wert Grund_kein_Login2 übertragen wurde, das findet dann statt, wenn nichts angeklickt wurde, wie Dark Guardian bereits geschrieben hat,

          prüfe es mit:
          if (isset($Grund_kein_Login1))
          {

          }
          else if (isset($Grund_kein_Login2))
          {
          .......
          Trotzdem solltest du dich dennoch darüber informieren

          Kommentar


          • #6
            Dieser Beitrag ist einfach nur Blödsinn.

            Kommentar


            • #7
              Sorry für die späte Rückmeldung, aber das Projekt lag nun einige Zeit auf Eis, wegen Zeitmangel und Klausuren.

              Habe mich heute wieder einmal länger mit dem Problem beschäftigt, bin allerdings wieder zu keiner funktionierenden Lösung gekommen. Ich habe alle geposteten Links/Informationen gelesen und versucht umzusetzen, leider vergeblich.

              Falls mir noch jemand weiterhelfen kann, wäre ich sehr dankbar. Ansonsten werde ich wohl einen Workaround basteln müssen (evtl. mit Radioboxes "trifft zu" / "trifft nicht zu", wovon ein Feld bereits checked ist). Das wäre zwar unschön, aber hauptsache es funktioniert demnächst.

              Hier nochmal die Logik hinter meiner Idee:
              • Der User wird nach Gründen gefragt
              • Er kann nun zwischen verschiedenen auswählen und diese "ankreuzen" durch Checkboxes
              • Falls keine Checkbox gewählt wurde und "Weiter" geklickt wird, soll nichts in die DB geschrieben werden, stattdessen die Meldung kommen "Bitte Grund angeben"
              • Falls min. 1 Grund angegeben wurde und "Weiter" geklickt wird, soll in die DB geschrieben werden
              • In der DB soll es 5 Spalten geben (Grund1, Grund2, Grund3, etc.), die dann dementsprechend gefüllt werden (falls Grund1 und Grund2 gewählt wurde, soll in Spalte "Grund1" und in Spalte "Grund2" z.B. "ja" geschrieben werden)

              Kommentar


              • #8
                Nun, geh das Problem mal Stück für Stück durch.

                Notice: Undefined index: Grund_kein_Login2
                Zu den PHP Grundlagen gehört das Wissen über Arrays und wie diese funktionieren, genauso das $_POST ein solches ist. Wenn man das weiß, und deinen Code sieht, kommt man mit der Meldung "undefined index" bei $_POST['Grund_kein_Login1'] schnell darauf das dieser Index eben nicht da ist.

                Deswegen solltest du dir das Handbuch zu array_key_exists oder wahlweiße isset durchlesen.

                http://php.net/manual/de/function.array-key-exists.php

                Dort findest du eine detailierte Beschreibung was die Funktion als Parameter erwartet und was sie dafür zurück gibt, sogar mit Beispielen.

                Den Beispielen kannst du entnehmen das ein Arrayindex und ein Array übergeben werden, und die Funktion "true" oder "false" liefert, also ob der Index existiert oder nicht.

                Wenn du daraus also, wie in den Beispielen dort erläutert, eine Bedingung baust ob dein Index im $_POST Array überhaupt vorhanden ist bevor du darauf zugreifst, wird der Fehler nicht entstehen.

                Kommentar

                Lädt...
                X