Hilfe beim Programieren

  • Hallo Leute,


    ich bin ein absoluter Programierer Laie.


    Ich würde gerne eine Art Quiz Spiel erstellen. Ich stelle mir die Seite so vor, dass eine Frage mit einem Bild auftaucht und derjenige in einem freien Feld darunter seine Antwort schreiben kann.

    Die Antwort soll dann an eine Email Adresse geschickt werden oder in einer Datei auf dem Server gepeichert werden. Wie kriege ich das hin?

    Wie gesagt habe ich überhaupt keine Ahnung vom programmieren.

    Wenn mir jemand helfen könnte, wäre ich sehr dankbar.


    LG

  • So. Nochmal:


    <style>

    P {

    display: block;

    border: 1px solid #222;

    }


    </style>


    <p id="frage">Frage, welche beantwortet werden soll.</p>

    <p><img src="bilderordner/fragebild.dateiendung" /></p>

    <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post" enctype="multipart/form-data" accept-charset="<?php echo CHARSET; ?>">

    <fieldset>

    <p>

    <label for="Antwort">Antwort: </label>

    <input name="Antwort" id="Antwort" size="66" value="<?php Formular_Eingabe('Antwort'); ?>" />

    </p>

    <p>

    <input id="input" type="submit" value="senden" />

    </p>

    </fieldset>

    </form>



    <?php

    define ('MAILTO', "Antwort@deinemail.endung"); // Empfänger hier eintragen

    define ('MAILFROM', "Quizspiel"); // ggfls. Absender hier eintragen

    define ('CHARSET', "utf-8"); // Zeichenkodierung ggfls. anpassen

    $Pflichtfelder = array('Nachricht'); // ggfls. weitere Pflichtfelder angeben

    $AddHeader = 'Content-Type: text/plain; charset='.CHARSET;

    if(MAILFROM) $AddHeader .= chr(13).chr(10).'From: '.MAILFROM;

    if($Formular_abgeschickt = !empty($_POST)) { $Formular_leer = true; if(ini_get('magic_quotes_runtime')) ini_set('magic_quotes_runtime',0);

    $_POST = array_map('Formular_Daten', $_POST);

    }

    function Formular_Daten($val) { global $Formular_leer; if(is_array($val)) return array_map('Formular_Daten', $val); if(ini_get('magic_quotes_gpc')) $val = stripslashes($val); if($val = trim($val)) $Formular_leer = false; return $val;

    }

    function Formular_Pflichtfelder() { global $Pflichtfelder; $Fehler = '';

    foreach ($Pflichtfelder as $Feld) { $key = str_replace(' ','_',$Feld);

    if(!(isset($_POST[$key]) && trim($_POST[$key])!=='')) { if($Fehler) $Fehler .= '<br />'; $Fehler .= 'Pflichtfeld "' . $Feld . '" nicht ausgefüllt.';

    }

    }

    return $Fehler;

    }

    function Formular_neu($log='.htPOSTdata.txt') { if(file_exists($log) && is_readable($log) && file_get_contents($log) == print_r($_POST,true))

    return false;

    if($handle=@fopen($log, 'w')) {

    fwrite($handle, print_r($_POST,true)); fclose($handle);

    }

    return true;

    }

    function Formular_Check() {

    global $Formular_leer;

    if($Formular_leer) $Fehler = 'Keine Daten eingetragen. <a id="formlink" href="http://www.quizspiel.endung">Erneut versuchen?</a>';

    elseif(!$Fehler = Formular_Pflichtfelder()) {

    if(!Formular_neu()) $Fehler = 'Nachricht war bereits verschickt.';

    }

    return $Fehler;

    }

    function Formular_Eingabe($Feldname, $def='') {

    if(isset($_POST[$Feldname]) && $_POST[$Feldname]!=='')

    echo htmlspecialchars($_POST[$Feldname],ENT_COMPAT,CHARSET);

    else echo $def;

    }

    ?>

  • Falls ich mich "einmischen" darf.
    Ich habe den Code getestet. 2 Probleme:

    1. Warning: htmlspecialchars(): charset `CHARSET' not supported, assuming utf-8 in /home/httpd/vhosts/ms.ch/my-web-test.ch/quiz.php on line 115Warning: htmlspecialchars(): charset `CHARSET' not supported, assuming utf-8 in /home/httpd/vhosts/ms.ch/my-web-test.ch/quiz.php on line 115Warning: htmlspecialchars(): charset `CHARSET' not supported, assuming utf-8 in /home/httpd/vhosts/ms.ch/my-web-test.ch/quiz.php on line 115Warning: htmlspecialchars(): charset `CHARSET' not supported, assuming utf-8 in /home/httpd/vhosts/ms.ch/my-web-test.ch/quiz.php on line 115Test Antwort


    Muss in Linie utf-8 noch definiert werden?

    2. Meine Emailadresse (Empfänger) mutiert, aber das Email kommt nicht an.

  • Hi,


    sorry.


    2. Unter den ersten php Code gehört noch ein zweiter:

    Hab den beim kopieren übersehen.


    <?php

    if($Formular_abgeschickt) {

    if($Formular_Fehler = Formular_Check())

    echo '<p class="Meldung" id="Fehler">',$Formular_Fehler,'</p>';

    elseif(@mail(MAILTO, "Nachricht", print_r($_POST,true), $AddHeader))

    echo '<p class="Meldung" id="OK">Nachricht verschickt.</p>';

    else echo '<p class="Meldung" id="Fehler">Server-Fehler !</p>';

    }

    ?>


    1. Das mit dem Charset ist kommentiert im PHP.


    Danke für deine Hinweise.:thumbup:

  • Hey,


    sonert :

    Das kannst du mit PHP, HTML und CSS realisieren. Ich erwarte jedoch von jemanden der sowas vorhat auch Eigeninitiative zeigt und sich selbst bemüht und dazu lernen möchte. Wenn nicht wirst du von mir jedenfalls keine Hilfestellung bekommen.


    Huhu :

    Bitte poste dein Code in die Code tags. Somit ist der Code lesbarer. Danke.

    Nun zu dem Code (der sieht meines Erachtens Gruselig aus. Man kann den viel einfacher und ordentlicher Scripten. )


    PHP-Code vor HTML-Code!


    HTML-Teil:

    • <image> tag heißt in html <img>
    • Warum packst du label und input feld in die <p>-tags? Zum Zeilenumbruch reicht einfach ein display:block; in css
    • Für was : enctype="multipart/form-data" ? Dies benötigt man nach meinen Kenntnissen bei Bilder Uploads. Du ladest dort aber nirgendswo ein bild hoch. Du greifst intern auf dem server auf einem ordner mit den vorhandne bildern zu.

    PHP-Teil:

    • Du benutzt teilsweise schon funktionen die deprecated sind. Siehe z.b. http://php.net/manual/de/info.…#ini.magic-quotes-runtime
    • Für was brauchst du denn ini_get?
    • Ebenso würde ich zum Mail-Versand eine Mailklasse wie Swift- oder PHP-Mailer verwenden.
    • Was willst du denn damit erreichen ? Du vergleichst bei diesem statement nicht. Du machst ne Zuweisung.
    PHP
    1. if(MAILFROM) $AddHeader .= chr(13).chr(10).'From: '.MAILFROM;
    2. if($Formular_abgeschickt = !empty($_POST)) { $Formular_leer = true; if(ini_get('magic_quotes_runtime')) ini_set('magic_quotes_runtime',0);

    • Niemals @ benutzen! @ unterdrückt fehlermeldungen.
    PHP
    1. if($handle=@fopen($log, 'w')) {
    2. fwrite($handle, print_r($_POST,true)); fclose($handle);
    3. }

    Es gibt dazu ebenso neue Funktionen wie file_put_contents und file_get_contents. Ist viel leichter.

    • Folgender codeschnipsel:
    PHP
    1. elseif(!$Fehler = Formular_Pflichtfelder()) {
    2. if(!Formular_neu()) $Fehler = 'Nachricht war bereits verschickt.';
    3. }

    du machst da schonwieder ne zuweisung. Und wenn du angenommen == benutzt hättest überprüfst du die nicht exsistierende variable fehler mit der funktion. Macht das ein Sinn? Meines Erachtens nicht.

    • Darüberhinaus würde ich nie sofort die Daten ausgeben. Erst in variablen speichern und dann weiterverarbeiten


    Villt. gibt es in diesem script noch mehr zuweisungen als vergleichungen. Habe nicht vertieft drübergeschaut.



    Ich kann mich auch in manchen sachen irren. Wenn es so ist bitte ich um Kenntnisnahme. Aber ich denke das wesentliche ist gesagt und richtig.


    Stef

  • Hi Stef,


    danke für deine Hinweise. Das mit dem img Tag war wohl wieder die **** Autokorrektur. ( Weiß zufällig jemand warum das unter iOS 7 erst nach 2-3 Sekunden mittlerweile korrigiert wird? Da ist man schon längst weiter. )

    Ich hätte ja gerne den Code lesbarer gepostet, aber wie? Mit dem ersten Icon hier hatte es dann den Code ausgeführt.

    Mit <p> als Ummandelung habe ich bessere Erfahrungen gemacht.

    Zu PHP darfst du mich nicht fragen. Der Code stammt aus dem Netz, ich habe den bloß für mich "konfiguriert" und das funktioniert. Zum Glück finden sich aber hier Menschen, die gerne anderen helfen und nötige Hinweise geben.

  • Hi,


    aso ok. Du kannst in der Navbar oben (in dem Editor) neben der Sprechblase auf die code tags (</>) klicken dann deine Programmiersprache angeben in welcher das script ist und dann in den erstellten container einfügen.


    Ja ich wollte nur mal meine Ansicht dazu geben.