Ankündigung

Einklappen
Keine Ankündigung bisher.

Fragenkatalog

Einklappen

Neue Werbung 2019

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

  • Fragenkatalog

    Hallo,
    ich möchte gerne einen Fragenkatalog über ein Formular in die MySQL DB speichen.
    Der Fragenkatalog enthält ca. 150 Fragen.
    Ich hab einiges im Netz gefunden.

    Was soll passieren:
    Entweder sollen die Fragen einzeln im Form angezeigt werden oder z.B. immer 10 Fragen immer auf einmal.
    Ich habe eine Tabelle (user) mit den Feldern id, frage, abtwort, comment.

    UNten habe ich zwar soweit hinbekommen, dass die Fragen angezeigt bekommen, nur werden die Antworten nicht gespeichert Immer nur die letzte.

    Für einen Tipp wäre ich dankbar.

    PHP-Code:
     <?php
        
    /*
        * Created on 14.01.2010 by Nico Schubert
        */
        /**
        * Der Host von der MySQL Datenbank, worauf ein
            Zugriff gemacht werden soll.
        */
        
    $datenbank_host 'localhost';
        
    /**
        * Der MySQL User womit eine Verbindung zur MySQL
            Datenbank hergestellt werden soll.
        */
        
    $datenbank_user 'root';
        
    /**
        * Das entsprechende Datenbankpasswort, vom MySQL
            User.
        */
        
    $datenbank_passwort 'root';
        
    /**
        * Der Name von der MySQL Datenbank
        */
        
    $datenbank_name 'qa1986';
        
        
        
    /**
        * Definieren von den Variablen
        */
        
    if (!isset($_POST['senden'])) $_POST['senden'] = '';
        
        
    $nr 1;
        while(
    $row mysql_fetch_assoc($result)) {
            if (!isset(
    $_POST['answer[$nr]'])) $_POST['answer[$nr]'] = '';
            if (!isset(
    $_POST['comment[$nr]'])) $_POST['comment[$nr]'] = '';
        }    
        
        
    /**
        * Prüfen, ob die Variablen einem Wert gespeichert
            haben. Wenn dies der Fall ist speichern wir
            den Eintrag in der MySQL Datenbank.
        */
        
    if ($_POST['senden'] != '' AND $_POST['answer'] != '' AND $_POST['comment'] != '') {
            
    /**
            * Aufbau der MySQL Verbindung anhand der MySQL
                Verbindungsdaten, der Rückgabewert von
                der PHP Funktion mysql_connect() ist die
                Verbindungskennung. Die
                Verbindungskennung wird in der Variable
                $link gespeichert. Damit keine PHP
                Fehlermeldung ausgegeben wird, stellen
                die ein @ Zeichen vor die PHP Funktion.
            */
            
    $link = @mysql_connect($datenbank_host$datenbank_user$datenbank_passwort);
            
    /**
            * Prüfen ob eine Verbindungskennung in der
                Variable $link enthalten ist, wenn keine
                Verbindung aufgebaut werden konnte, steht
                in der Variable ein false, wofür man
                entsprechend eine Fehlermeldung ausgeben
                kann und anschließend das Script
                abbrechen kann.
            */
            
    if (!$link) {
                die(
    'keine Verbindung möglich: ' .mysql_error());
            }
            
    /**
            * Die Datenbank auswählen anhand der der
                Verbindungskennung, die PHP-Funktion
                mysql_select_db() gibt in Fehlerfall ein
                false zurück. Damit wir diesen Status
                überprüfen können, speichern wir den
                Rückgabewert in der Variable $db_selected.
            */
            
    $db_selected = @mysql_select_db($datenbank_name$link);
            
    /**
            * Prüfen ob in der Variable $db_selected kein
                false steht, wenn ein false hinterlegt
                ist, wird automatisch mit der PHP
                Funktion die() das Script abgebrochen und
                entsprechend eine Fehlermeldung ausgegeben.
            */
            
    if (!$db_selected) {
                die (
    'Kann '.$datenbank_name.' nicht benutzen : ' mysql_error());
            }
            
    /**
            * Nun speichern wir in der Variable
                $sql_insert unserer SQL Abfrage, die wir
                an die MySQL Datenbank stellen möchten.
                Zum speichern von neun Datensätzen müssen
                wir INSERT INTO angeben um einen neuen
                Datensatz zu speichern, nach INSERT INTO
                muss der Name der Tabelle folgen. In
                unserem Beispiel lautet der Name `user`.
                Anschließend geben wir in den ersten
                Klammerbereich an, für welche Felder
                entsprechende Daten im zweiten
                Klammerbereich liefern. Wir möchten einen
                Eintrag in den Feldern `answer` und
                `name` machen, daher müssen wir diese im
                ersten Klammerbereich angeben.
            *
            * Im zweiten Klammerbereich übermitteln wir
                unsere entsprechenden Daten. Die Daten
                sind in den Variablen $_POST['answer']
                und $_POST['name'] gespeichert. Bevor wir
                diese Daten in der Datenbank speichern
                können, sollte man mit der PHP Funktion
                mysql_escape_string() die Daten escapen,
                damit kein Fehler bei falsch eingegebenen
                Daten erfolgt.
            *
            * Hinweis: Bitte gewöhnen sie sich für die
                Zukunft an, alle Daten von den speichern
                oder updaten mit der PHP Funktion
                mysql_escape_string() zu escapen.
                Ansonsten ist es möglich ein so genannte
                SQL Injection zu machen. Mehr zu diesem
                Thema finden sie unter der Adresse:
                http://de.wikipedia.org/wiki/SQL-Injection
            */
            
    $sql_insert "INSERT INTO `user` (`answer`,`comment`) VALUES('".mysql_escape_string($_POST['answer'])."', '".mysql_escape_string($_POST['comment'])."');";
            
    /**
            * Wenn wir nun unser SQL Statement
                zusammengesetzt haben, können wir dieser
                Anfrage mit der PHP Funktion
                mysql_query() an die MySQL Datenbank
                senden. Um die PHP-Funktion mysql_query()
                zu verwenden, geben wir im ersten
                Parameter die Variable $sql_insert an, wo
                unser SQL Statement darin gespeichert
                ist. Im zweiten Parameter geben wir
                unsere Verbindungskennung mit an. Somit
                wird unserer geöffnete Verbindung verwendet.
            *
            * Die PHP-Funktion mysql_query() liefert in
                Fehlerfall ein false zurück. Um dieses
                false abzufangen prüfen wir mit einer IF
                Anweisung, ob kein false zurückgeliefert
                wird. Zusätzlich stellen wir vor der
                Funktion mysql_query() ein @ Zeichen,
                damit keine PHP Fehlermeldung ausgegeben
                wird. Wenn sie ein neues PHP-Script
                entwickeln, sollten sie vorher das @
                Zeichen entfernen. Denn mit dieser
                Fehlermeldung kommt man sehr häufig den
                Fehler auf die Schliche.
            */
            
    if (@mysql_query($sql_insert$link) != false) {
                
    /**
                * Wenn kein Fehler aufgetreten ist, geben
                    wir eine Meldung mit den Befehl echo
                    aus, dass die Daten erfolgreich
                    gespeichert wurden. Zusätzlich leeren
                    wir die Variable $_POST['answer']
                    und $_POST['name'], damit das
                    Formular automatisch wieder leer ist.
                */
                
    echo 'Der Eintrag wurde gespeichert!';
                
    $_POST['answer'] = '';
                
    $_POST['comment'] = '';
            } else {
                
    /**
                * Sollte ein Fehler beim Speichern des
                    Eintrags aufgetreten sein, geben wir
                    eine entsprechende Fehlermeldung aus.
                */
                
    echo 'Der Eintrag wurde nicht gespeichert!';
            }
            
    /**
            * Jetzt schließen wir die aktuelle Verbindung
                zur MySQL Datenbank mit dem Befehl
                mysql_close(), hierzu geben wir die
                aktuelle Verbindungskennung, die wir in
                der Variable $link gespeichert haben als
                ersten Parameter an.
            */
            
    @mysql_close($link);
        }
        
    /**
        * So zu guter letzt benötigen wir noch das
            Formular, was wir absenden möchten. Dies
            erstellen wir und geben dies mit Echo aus. Da
            dieses Formular dynamisch generiert wird und
            mehrere Variablen hat, trennen wir das
            Formular nicht von PHP Code.
        *
        * Als erstes benötigen wir bei unserem Formular,
            die Angabe wohin das Formular gesendet werden
            soll. Hierzu geben wir action="" die Adresse
            über die globale Servervariable
            $_SERVER['PHP_SELF'] an, dass die gleiche
            Adresse verwendet werden soll, wie das
            aktuelle Script aufgerufen wurde. Da man an
            dieser Stelle zum Beispiel Variablen an die
            Adresse hängen könnte, wandeln wir mit der
            PHP Funktion htmlspecialchars() alles
            Sonderzeichen in den entsprechenden HTML Code um.
        *
        * Nun müssen wir noch zusätzlich in form Tag die
            Übertragungsmethode angeben, dies machen wir
            mit method="post" und dadurch werden auch nur
            Postdaten an unser Script übermittelt. Als
            nächstes müssen wir noch zusätzlich die zwei
            Formularfelder ausgeben und den
            entsprechenden Absender Button, um das
            Formular abzusenden.
        */
        
    echo '<form action="'.htmlspecialchars($_SERVER['PHP_SELF']).'" method="post">';
        
        
    /* echo ' answer: <input type="text" name="answer" value="'.htmlspecialchars($_POST['answer']).'"/><br/>'; */
        
        
        
    $dbhandle mysql_connect("localhost","root","root");
        
    $db mysql_select_db("qa1986"$dbhandle);
        
    $result mysql_query("SELECT * FROM user");
        echo 
    mysql_num_rows($result).'<br/>'
        
        
    $count 1;
        while(
    $row mysql_fetch_assoc($result)) {
        
            echo 
    '<br/>' $count '/' mysql_num_rows($result) . ' (' $row['id'].')<br/>';

            echo 
    'Frage: ' $row['frage'].'<br/>';
             
            echo 
    ' Antwort: 
            <input type="radio" name="answer" value="Ja" />Ja
            <input type="radio" name="answer" value="Vielleicht" />Vielleicht
            <input type="radio" name="answer" value="Nein" />Nein<br />'
    ;
            
    $answer = isset($_POST['answer']);
        
            echo 
    ' Kommentar: <input type="text" name="comment" value="'.htmlspecialchars($_POST['comment']).'"/><br/>';
            echo 
    ' <input type="submit" name="senden" value="absenden"/><br/>';
            
    $count++;
        }      
        
        echo 
    '</form>';
    ?>


  • #2
    Code:
     
    <input type="radio" name="answer" value="Ja" />Ja
    <input type="radio" name="answer" value="Vielleicht" />Vielleicht
    <input type="radio" name="answer" value="Nein" />Nein<br />';
    PHP-Code:
    if (!isset($_POST['answer[$nr]'])) $_POST['answer[$nr]'] = '';
    if (!isset(
    $_POST['comment[$nr]'])) $_POST['comment[$nr]'] = ''
    Dein PHP Code erwartet etwas anderes, als das HTML Formular sendet.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      ergänzend zu Istegelitz:

      - bitte mysqli oder PDO nutzen. mysql_* ist veraltet.
      - bitte keine Original Daten (z.B. Datenbankname) hier posten
      - @-Zeichen entfernen. Unterdrücken nur Fehler.
      - hier

      echo '<form action="'.htmlspecialchars($_SERVER['PHP_SELF']).'" method="post">';
      kannst du auch das action Attribut leer lassen um mit einem Affenformular zu arbeiten und versuche, Html und PHP zu trennen und möglichst wenig html in PHP auszuführen.

      - statt
      if ($_POST['senden'] != ''
      empty() nutzen (eleganter). Bspw.:
      PHP-Code:
      if (!empty($_POST['senden'])){ 
      - Datenbank Verbindung nur einmal öffnen und nicht 2x und jeweils wieder schließen.
      - bitte keine </ br > nutzen sondern lieber korrekt mit CSS und z.B. div's arbeiten

      mfg Wolf29
      while (!asleep()) sheep++;

      Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

      Kommentar


      • #4
        Hm, okay - vielen dank für die Infos.
        Ist für mich leider ein böhmisches Dorf.

        Hast jemand zufällig Codeschnipsel die das folgende machen:
        1. Aus einer Tabelle (feld 1,2) zeilenweise die Daten auslesen (Felder 3-6 sind leer)
        2. Die Datenfelder (3-6) sollen dann über ein Form geändert werden und dann wieder alles speichern
        3. Click (Nächster datensatz)

        Wenn ich ein Gerüst hätte, werde ich den Rest wahrscheinlich selbst schaffen.
        Mir ist es jedoch nicht gelungen die DB zeilenweise auszulesen, zu ändern und wieder abzuspeichern.

        GRuss
        kuzco

        Kommentar


        • #5
          vielen dank für die Infos.
          Ist für mich leider ein böhmisches Dorf.

          Hast jemand zufällig Codeschnipsel die das folgende machen:
          "Schnispel" ist gut.. wirst du hier sehr warscheinlich nicht bekommen. Hier heißt es entweder Grundlagen lernen und selber machen, oder machen lassen.

          LG
          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            OK, kann ich verstehen.

            Ich habe mich an einen neuen Versuch gemacht und bin so soweit, dass die Fragen random-mässig ausgelesen werden und die Ergebnisse auch entsprechend gespeichert werden.
            Leider wird, wenn man eine Frage abspeichert (drücken des Speichern -Button) und dann per random eine neue Frage angezeigt wird, nicht die vorhandenen Werte dieser Frage angezeigt, sondern die der Frage die vorher dran war.

            Die Tabelle quiz hat 3 Felder: questions, aa_1 und aa_2.
            In aa_1 wird Ja, Vllt, oder Nein per Radio abgespeichert, aa_2 ist ein normales Textfeld.

            Wenn man die Fragen normal durchklickt (also immer wieder Refresh der Seite) OHNE zu speicehrn werden die richtigen Werte angezeigt.

            Vllt. hat hier jemand einen Tipp:

            PHP-Code:
            <?php
            include("config.php");
            ?>
            <?php
            $question 
            "";
            $answer "";
            $answer2 "";
            $sql "SELECT * FROM quiz ORDER BY rand() LIMIT 1";
            $result mysql_query($sql);
            $row mysql_fetch_object($result);
            $question "$row->questions";
            $answer "$row->aa_1";
            $answer2 "$row->aa_2";


            //dient nur zur Überprüfung
            echo $question;
            echo 
            $answer;
            echo 
            $answer2;


            if (isset(
            $_POST['submitted'])) 
                {
                if (empty(
            $_POST['answer2']) || empty($_POST['id'])) {
                    echo 
            '<p><span style="color: red;">You must enter an answer!</span></p>';
                    } 
                    else 
                    {
                        
            $answer $_POST['answer'];
                        
            $answer2 $_POST['answer2'];
                        
            $sql3"UPDATE quiz Set aa_1 = '$answer', aa_2 = '$answer2' where id = '".addslashes($_POST["id"])."'";
                        
            $res3 mysql_query($sql3);
                        
                    }
                }
            ?>

            <form action="<?php $_SERVER['PHP_SELF'?>" method="post">
            <table>
            <tr>
                <td>Frage: </td>
                <td><?php echo "$question"?><?php echo "$answer"?><?php echo "$answer2"?></td>
            </tr>
            <tr>
                <td>Antwort: </td><td><input type="radio" name="answer" value="Ja" <?php if (($answer) == 'Ja') echo 'checked="checked"'?> />Ja
                    <input type="radio" name="answer" value="Vielleicht" <?php if (($answer) == 'Vielleicht') echo 'checked="checked"'?> />Vielleicht
                    <input type="radio" name="answer" value="Nein" <?php if (($answer) == 'Nein') echo 'checked="checked"'?> />Nein</td>
            </tr>
            <tr>
                <td>Kommentar: </td><td><input maxlength="255" name="answer2" value="<?php echo"$answer2"?>" size="80" type="input"></td>
            </tr>    
            </table>
            <input name="id" value="<?php echo $row->id ?>" type="hidden">
            <input name="submit" value="Speichern" type="submit">
            <input name="submitted" value="TRUE" type="hidden"></td>

            </form>

            Auf PDO würde ich später umstellen. Ebenso die Trennung von html und php.

            Kommentar

            Lädt...
            X