Hiwi: Wie zwinge ich Leute, eine Antwort zu geben

Hallo miteinander,

ich versuche gerade, eine Umfrage, die wir bisher nur auf ausgedruckten Fragebögen gemacht haben, zu digitalisieren. Leider bin ich aber noch kein allzu erfahrender Programmierer.

Ich habe das ganze in html programmiert und es läuft soweit auch wunderbar:

<form action="http://germa.germsem.uni-kiel.de/vandermeeren/php/auswertung.php" method="get" enctype="text/plain">

<DIV class="sub_headline">Teil A</DIV> Was machen Sie, um deutsche Wörter zu lernen? <br> <br>

<TABLE class="questionnaire">   <TR>     <td class="questionnaire">1. Schreiben Sie deutsche Wörter ein paar Mal auf, um sie zu lernen? </td>              <div style="float: right"><select name="A1" size="1">                 <option selected value="0">Ihre Antwort ...</option>                 <option value="1">nie oder sehr wenig</option>                 <option value="2">wenig</option>

<option value="3">mal wenig, mal viel</option>                 <option value="4">viel</option>                 <option value="5">sehr viel</option>             </select></div>         </tr> </table> <table>         <tr>

<td class="questionnaire">2. Sprechen Sie deutsche Wörter ein paar Mal aus, um sie zu lernen?</td>              <div style="float: right"><select name="A2" size="1">                 <option selected value="0">Ihre Antwort ...</option>                 <option value="1">nie oder sehr wenig</option>                 <option value="2">wenig</option>                 <option value="3">mal wenig, mal viel</option>

<option value="4">viel</option>                 <option value="5">sehr viel</option>             </select></div>         </tr> </table> <table>         <tr>             <td class="questionnaire">3. Was machen Sie (noch), um ein deutsches Wort zu lernen? Denken Sie an einen Satz mit diesem Wort?</td>

<div style="float: right"><select name="A3" size="1">                 <option selected value="0">Ihre Antwort ...</option>                 <option value="1">nie oder sehr wenig</option>                 <option value="2">wenig</option>                 <option value="3">mal wenig, mal viel</option>                 <option value="4">viel</option>

<option value="5">sehr viel</option>             </select></div>         </tr>

</table> <table>      <tr>             <td class="questionnaire">4. Denken Sie darüber nach, wo und wann man dieses Wort sagen kann??</td>              <div style="float: right"><select name="A4" size="1">                 <option selected value="0">Ihre Antwort ...</option>

<option value="1">nie oder sehr wenig</option>                 <option value="2">wenig</option>                 <option value="3">mal wenig, mal viel</option>                 <option value="4">viel</option>                 <option value="5">sehr viel</option>             </select></div>

</tr> </table> <table>           <tr>             <td class="questionnaire">5. Denken Sie bei einem deutschen Wort für eine Sache darüber nach, ob dieses Wort ein Maskulinum, Femininum oder Neutrum ist?</td>              <div style="float: right"><select name="A5" size="1">                 <option selected value="0">Ihre Antwort ...</option>                 <option value="1">nie oder sehr wenig</option>                 <option value="2">wenig</option>

<option value="3">mal wenig, mal viel</option>                 <option value="4">viel</option>                 <option value="5">sehr viel</option>             </select></div>         </tr> </table> <table> <tr>

	<td>6. Machen Sie (noch) etwas Anderes, um deutsche Wörter zu lernen? Bitte schreiben Sie ihre Antwort hier!</td>
</tr>

</table> <textarea name="A6" cols="72" rows="2"></textarea> <table> <tr> <td> 7. Warum lernen Sie Deutsch? Hier können Sie mehr als eine Antwort ankreuzen.</td> </table>     <input type="checkbox" name="A71" value="1"> weil Deutsch schön ist<br>

<input type="checkbox" name="A72" value="1"> weil ich mit deutschen Menschen sprechen möchte<br>     <input type="checkbox" name="A73" value="1"> weil ich in Deutschland lebe<br>     <input type="checkbox" name="A74" value="1"> weil ich gern Deutsch lerne<br> <table> <tr> <td>8. Gibt es noch einen weiteren Grund, wieso Sie Deutsch lernen?</td>

</tr>

</table> <textarea name="A75" cols="72" rows="2"></textarea>

<br>

<DIV class="paragraph"> <input type="submit" name="submit" value="Abschicken"> </DIV>

</form> <br><br><br>

Das ganze sind also einige Fragen, deren Antworten bei uns auf dem Server gespeichert werden, wenn die Leute auf den "Abschicken"-Knopf drücken. Dem Knopf liegt diese php-Datei (meine erste und einzige, die ich bisher geschrieben habe) zugrunde:

<?php $filename = 'ergebnisse.txt'; $somecontent = "A1: ". $_GET["A1"]." A2: ". $_GET["A2"]." A3: ". $_GET["A3"]." A4: ". $_GET["A4"]." A5: ". $_GET["A5"]." A6: ". $_GET["A6"]." A71: ". $_GET["A71"]." A72: ". $_GET["A72"]." A73: ". $_GET["A73"]." A74: ". $_GET["A74"]." A75: ". $_GET["A75"]." B1: ". $_GET["B1"]." B2: ". $_GET["B2"]." B3: ". $_GET["B3"]." B4: ". $_GET["B4"]." B5: ". $_GET["B5"]." B6: ". $_GET["B6"]." B71: ". $_GET["B71"]." B72: ". $_GET["B72"]." B73: ". $_GET["B73"]." B74: ". $_GET["B74"]." B75: ". $_GET["B75"]." B76: ". $_GET["B76"]." B77: ". $_GET["B77"]." B78: ". $_GET["B78"]." C1: ". $_GET["C1"]." C2: ". $_GET["C2"]." C3: ". $_GET["C3"]." C3: ". $_GET["C3"]." C4: ". $_GET["C4"]." C5: ". $_GET["C5"]." C6: ". $_GET["C6"]." C71: ". $_GET["C71"]." C72: ". $_GET["C72"]." C73: ". $_GET["C73"]." C74: ". $_GET["C74"]." C75: ". $_GET["C75"]." C76: ". $_GET["C76"]." D1: ". $_GET["D1"]." D2: ". $_GET["D2"]." D3: ". $_GET["D3"]." D4: ". $_GET["D4"]." D5: ". $_GET["D5"]." D6: ". $_GET["D6"]." D71: ". $_GET["D71"]." D72: ". $_GET["D72"]." D73: ". $_GET["D73"]." D74: ". $_GET["D74"]." D75: ". $_GET["D75"]." D76: ". $_GET["D76"]." D77: ". $_GET["D77"]." D78: ". $_GET["D78"]." E1: ". $_GET["E1"]." E2: ". $_GET["E2"]." E3: ". $_GET["E3"]." E4: ". $_GET["E4"]." E5: ". $_GET["E5"]." E6: ". $_GET["E6"]." E7: ". $_GET["E7"]." E8: ". $_GET["E8"]." E9: ". $_GET["E9"]." F: ". $_GET["F"]."\n";

if (is_writable($filename)) {

if (!$handle = fopen($filename, "a")) {          print "Kann die Datei $filename nicht öffnen";          exit;    }

if (!fwrite($handle, $somecontent)) {        print "Kann in die Datei $filename nicht schreiben";        exit;    }

header("location: http://www.germsem.uni-kiel.de/vandermeeren/php/danke.html");

fclose($handle);

} else {    print "Die Datei $filename ist nicht schreibbar"; }

Nun möchte ich, dass die Leute, bevor sie die eigentlichen Frage beantworten, eine Frage bezüglich ihrer Universität beantworten. Ich möchte, dass sie diese auf jeden Fall beantworten müssen. Die Frage sähe dann so aus:

<TABLE class="questionnaire">   <TR>     <td class="questionnaire">1. An welcher Universität studieren Sie? </td>              <div style="float: right"><select name="Uni" size="1">

<option value="1">Uni A</option>                 <option value="2">Uni B</option>

<option value="3">Uni C</option>                 <option value="4">Uni D</option>                 <option value="5">Uni E</option>             </select></div>         </tr> </table>

Man kennt das ja schon aus anderen Online-Formularen, bei denen hinter manchen Angaben ein * ist, was anzeigt, dass man diese Angabe machen muss. Wie kann ich das hier lösen. Mein Problem im Moment ist, dass Leute, die bei dieser Frage nicht angeben, in meiner Datenbank immer den Wert "Uni A" bekommen (auch, wenn das gar nicht stimmt).

Alternativ habe ich mir überlegt, dass man erst eine Seite machen könnte, in der nut nach der Uni gefragt wird (was jeder beantworten muss). Wenn man auf dieser Seite auf "abschicken" klickt wird man dann auf die Umfrage-Seite für die jeweilige Universität weitergeleitet. Ich würde dann also 5 htlm-Seiten machen (für jede Uni eine) und 5 php-Dateien (für jede Uni eine). Leider weiß ich halt nicht, wie man bei dieser einzelnen Frage eine Antwort erzwingen kann.

Ich hoffe, ihr erfahrenen Programmierer könnt mir da weiterhelfen.

Gruß Hiwi

  1. <form action="http://germa.germsem.uni-kiel.de/vandermeeren/php/auswertung.php" method="get"
    enctype="text/plain">

    Was soll enctype an dieser Stelle? Entferne es.

    <DIV class="sub_headline">Teil A</DIV>

    Überdenke deinen Codestyle. UPPERCASE gür HTML-Syntax ist eine Sackgasse.

    Verwende label Elemente!

    <br><br><br>

    Verwende CSS!

    Das ganze sind also einige Fragen, deren Antworten bei uns auf dem Server gespeichert werden, wenn die Leute auf den "Abschicken"-Knopf drücken. Dem Knopf liegt diese php-Datei (meine erste und einzige, die ich bisher geschrieben habe) zugrunde:

    <?php
    $filename = 'ergebnisse.txt';
    $somecontent = "A1: ". $_GET["A1"].

    Gehe nie blind davon aus, dass die Daten, die du erwartest, auch geliefert werden. Verwende isset();

    header("location: http://www.germsem.uni-kiel.de/vandermeeren/php/danke.html");

    Nö. Wie kommst du darauf, dass ein erster Submit automatisch zu einer Dankeseite berechtigt?

    Nun möchte ich, dass die Leute, bevor sie die eigentlichen Frage beantworten, eine Frage bezüglich ihrer Universität beantworten. Ich möchte, dass sie diese auf jeden Fall beantworten müssen. Die Frage sähe dann so aus:

    ...

    Man kennt das ja schon aus anderen Online-Formularen, bei denen hinter manchen Angaben ein * ist, was anzeigt, dass man diese Angabe machen muss. Wie kann ich das hier lösen.
    Mein Problem im Moment ist, dass Leute, die bei dieser Frage nicht angeben, in meiner Datenbank immer den Wert "Uni A" bekommen (auch, wenn das gar nicht stimmt).

    Dann gib deinen Felder vernünftige defaultwerte
      <input type="text" value="nicht beantwortet">
    bzw.
      <option selected>nicht beantwortet</option>

    Wer ein Formular ausfüllt, sollte nämlich sehen, ob er die Frage bereits beantwortet hat.

    Alternativ habe ich mir überlegt, dass man erst eine Seite machen könnte, in der nut nach der Uni gefragt wird (was jeder beantworten muss). Wenn man auf dieser Seite auf "abschicken" klickt wird man dann auf die Umfrage-Seite für die jeweilige Universität weitergeleitet. Ich würde dann also 5 htlm-Seiten machen (für jede Uni eine) und 5 php-Dateien (für jede Uni eine).

    Du wirst sowieso alle Pflichtfelder, die nicht beantwortet wurden, noch einmal unterbreiten müssen, bevor du die Daten akzeptierst.

    Leider weiß ich halt nicht, wie man bei dieser einzelnen Frage eine Antwort erzwingen kann.

    Erzwingen kannst du nichts. Aber du kannst die Annahme der Datenverweigern, bis alle Pflichtangaben getätigt sind.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
  2. Hallo, Hiwi!

    Das Stichwort, nach dem Du suchen solltest, heißt "Formularvalidierung". Die Technik, auf die Du keinesfalls verzichten solltest, ist die Serverseitige (in Deinem Fall mit PHP). Was Du optional noch machen kannst, ist eine Validierung per JavaScript.

    Gruß, LX

    --
    RFC 1925, Satz 1: Es muss funktionieren.
  3. Hallo miteinander,

    Wie zwinge ich Leute, eine Antwort zu geben

    Wenn du einen Virus auf deren Rechner bringst und ihn nur dann unschädlich machst, wenn sie antworten.

    Gast

    1. Moin Moin!

      Wie zwinge ich Leute, eine Antwort zu geben

      Wenn du einen Virus auf deren Rechner bringst und ihn nur dann unschädlich machst, wenn sie antworten.

      Hilft nicht bei Leuten, die Backups haben.

      Eine große, vor die Nase gehaltene Waffe, wie z.B. ein großes Messer, könnte funktionieren. Aber auch wieder nicht bei allen:

      * Irgendwelche depressiven Selbstmord-Kandidaten sagen nur: "Mach doch, stech mich ab, auch egal."
      * Security-Leute bringen Dich schneller auf den Boden und in eine äußerst unbequeme Lage, als Du auch nur "pieps" sagen kannst.
      * Crocodile Dundee-Typen kommen mit "Das ist doch keine Messer. DAS ist eine Messer."
      * Rambo-Typen nehmen Dir das Messer weg, brechen Dir zehn bis zwanzig Knochen und schießen Dir als freundlichen Abschiedsgruß noch ein paar Löcher in wichtige Körperteile.
      * Leute, die glauben, in diesem Teil des Threads irgendwas gelernt zu haben, zieben plötzlich ihrerseits eine Knarre und wollen unbedingt erfahren, wo und wie Du Dein Liebesleben auslebst, oder wo Du am liebsten einkaufen gehst.
      * Schweden aus einem Paralleluniversum schreien "Odin ist groß! Odin ist mächtig!", und das letzte, was Du siehst ist, dass der Schwede einen kleinen Taster betätigt, bevor Dein Körper über das halbe Viertel verteilt wird.

      Und im Web endet das einfach mit "gesehen, gelacht, F8".

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
      1. Hi, Alexander,

        * Irgendwelche depressiven Selbstmord-Kandidaten sagen nur: "Mach doch, stech mich ab, auch egal."
        * Security-Leute bringen Dich schneller auf den Boden und in eine äußerst unbequeme Lage, als Du auch nur "pieps" sagen kannst.
        * Crocodile Dundee-Typen kommen mit "Das ist doch keine Messer. DAS ist eine Messer."
        * Rambo-Typen nehmen Dir das Messer weg, brechen Dir zehn bis zwanzig Knochen und schießen Dir als freundlichen Abschiedsgruß noch ein paar Löcher in wichtige Körperteile.
        * Leute, die glauben, in diesem Teil des Threads irgendwas gelernt zu haben, zieben plötzlich ihrerseits eine Knarre und wollen unbedingt erfahren, wo und wie Du Dein Liebesleben auslebst, oder wo Du am liebsten einkaufen gehst.
        * Schweden aus einem Paralleluniversum schreien "Odin ist groß! Odin ist mächtig!", und das letzte, was Du siehst ist, dass der Schwede einen kleinen Taster betätigt, bevor Dein Körper über das halbe Viertel verteilt wird.

        Whow - Du bist Spiele-Autor, Schriftsteller, Magier, Terrorist?

        Gast