tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
357
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Twoing Twoing ist offline Grünschnabel
    Registriert seit
    Nov 2010
    Beiträge
    3
    Hallo Community

    Ich bin ganz neu hier und dem entsprechend habe ich nicht viel Erfahrung mit PHP.
    An meiner Schule bin ich im Team, welches die Wintersporttage organisiert. Die Kids haben die Auswahl aus circa 10 Sportarten. Bis anhin, mussten wir da ziemlich viel Exceltabellen erstellen. Dies möchte ich ändern.

    Ich habe ein HTML Formular erstellt (dafür reichen meine Kenntnisse noch aus).
    Dafür habe ich mich schon durch etliche Tutorials gekämpft.

    Ich würde gerne die eingegebenen Daten mittels PHP auswerten und sie in eine CSV-Datei speichern, damit wir die dann in Excel importieren können. Doch wie muss ich das machen?

    Wie muss ich die PHP-Datei schreiben?

    Schon hier funktioniert es nicht mehr?

    Durch die Auswahl der post-Methode wurden die Eingaben vom Browser an den Server übertragen und stehen jetzt auf der aufgerufenen Seite im Array $_POST[] als Variablen zur Verfügung. Die Namen der Variablen entsprechen dabei den Namen der Formularfelder. Die Variable $_POST["name"] enthält also "Biff" und die Variable $_POST["nachricht"] den Text "Jemand zu Hause ?".

    Die Eingaben können demnach auch ganz einfach mit dem echo-Befehl ausgegeben werden, z. Bsp. um dem Besucher nochmal anzuzeigen, welche Angaben er gemacht hat:

    <?PHP

    echo "Sie haben folgende Angaben gemacht:<br>";

    echo "Ihr Name: $_POST[name]<br>";

    echo "Ihre Nachricht $_POST[nachricht]";

    ?>
    Wo ist dieses Array? Denn ich bekommen nur folgende Meldung im Browser:

    "; echo "Dein Name: $_POST[nachname] $_POST[vorname]
    "; echo "Deine Klasse: $_POST[klasse]
    "; echo "Deine Sportart: $_POST[sportart]
    "; echo "Skiabo ist $_POST[abo]"; ?>
    Also noch einmal meine Frage: Wie und wo kommt der PHP-Code? Und mit welchen Funktionen kann ich erreichen, dass es die Daten in eine CSV-Datei schreibt, so dass sich etwa 250 Schüler eintragen können?

    Ich wäre euch echt dankbar wenn ihr mir helfen könntet, ich versuche es schon seit etwa 4 Stunden und ich denke mir, dass es eigentlich recht einfach sein müsste.

    Vielen Dank im Voraus
    Twoing

    Formularcode:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    
    <form action="senden.php" method="post">
    <p>
    Name: 
      <input type="text" name="nachname">
      &nbsp;Vorname:
      <input type="text" name="vorname"> 
    <p>
    Schulklasse: <select name="klasse">
                    <option>Bitte Klasse auswählen</option>
                    <option>Klasse 1a</option>
                    <option>Klasse 1b</option>
                    <option>Klasse 1m</option>
                    <option>Klasse 2a</option>
                    <option>Klasse 2b</option>
                    <option>Klasse 2m</option>
                    <option>Klasse 3a</option>
                    <option>Klasse 3b</option>
                    <option>Klasse 3m</option>
                    <option>Klasse 4a</option>
                    <option>Klasse 4b</option>
                    <option>Klasse 4m</option>
                    <option>Klasse 5a</option>
                    <option>Klasse 5b</option>
                    <option>Klasse 5m</option>
                    <option>Klasse 6a</option>
                    <option>Klasse 6b</option>
                    <option>Klasse 6m</option>
                    <option>Klasse 7 Real</option>
                    <option>Klasse 7 Sek</option>
                    <option>Klasse 8 Real</option>
                    <option>Klasse 8 Sek</option>
                    <option>Klasse 9 Real</option>
                    <option>Klasse 9 Sek</option>
                </select>
    <p>
    Sportart:   <select name="sportart">
                    <option>Bitte Sportart auswählen</option>
                    <option>Schlittschuhlaufen (1.-9. Klasse)</option>
                    <option>Schlitteln (1.-9. Klasse)</option>
                    <option>Langlauf / Skating (1.-9. Klasse)</option>
                    <option>Snowboard (1.-9. Klasse, KEINE ANF&Auml;NGER)</option>
                    <option>Skifahren (1.-9. Klasse)</option>
                    <option>Schneeskulpturen (1.-6. Klasse)</option>
                    <option>Eisstock schiessen (3.-9. Klasse)</option>
                    <option>Eishockey (4.-9. Klasse)</option>
                    <option>Schneeschuh wandern (4.-9. Klasse)</option>
                    <option>Curling (6.-9. Klasse)</option>
                </select>
    <p>
    Skiabo:     <select name="abo">
                    <option>Bitte auswählen</option>
                    <option>vorhanden</option>
                    <option>nicht vorhanden</option>
                </select>
    <p>
    <input type="submit" value="Angaben absenden" />&nbsp;<input type="reset" value="Angaben löschen" />
     
    </form>
     

  2. #2
    TanTe TanTe ist offline Bombenleger
    Registriert seit
    Nov 2004
    Beiträge
    160
    Das sieht fuer mich so aus als ob das ganze nicht auf einem Webserver leuft. Jedenfalls nicht auf einem welcher PHP unterstuezt.
     

  3. #3
    Avatar von ComFreek
    ComFreek ComFreek ist gerade online [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.364
    Blog-Einträge
    4
    Da stimme ich TanTe zu.

    Hast du die Dateien nur auf deiner lokalen Festplatte gespeichert und sie nicht über einen Webserver (z.B. XAMPP) aufgerufen?

    Außerdem zum Code:

    Du gibst einfach die Daten aus ohne zu überprüfen, ob z.B. sich JavaScripts da drin befinden, die schädlichen Code ausführen könnten.
    Unbedingt htmlentities() benutzen:
    PHP-Code:
    echo htmlentities($_POST['something']); 
    Und außerdem würde ich die empfehlen den Schlüssel beim Array in Anführungsstriche zu setzen wie im obigen Code.
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  4. #4
    chickenwing chickenwing ist offline Mitglied Silber
    Registriert seit
    Nov 2010
    Beiträge
    56
    Hallo,

    neee, einfach ist es nicht, wenn man sich mit PHP so gut wie gar nicht auskennt.

    Deine POST-Variablen stehen Dir in der "senden.php" zur Verfügung.

    Aber erstmal würde ich Deinem Submit-Button noch einen Namen verpassen. Dann brauchst Du nachher nur noch auf den Namen prüfen und kannst den Inhalt vergessen:
    HTML-Code:
    <input type="submit" value="Angaben absenden" />&nbsp;<input type="reset" value="Angaben löschen" />
    
    <!-- wird zu -->
    
    <input type="submit" name="senden" value="Angaben absenden" />&nbsp;<input type="reset" value="Angaben löschen" />
    Darauf zugreifen kannst Du wie folgt:
    PHP-Code:
    if(isset($_POST['senden'])) {   // Submit-Button gedrückt?
       
    foreach($_POST as $key=>$value) {   // Globales POST-ARRAY der Reihe nach durchlaufen
           
    if($key != 'senden') {  // den Senden-Button brauchen wir nicht
                
    echo $key.' hat den Wert: '.daten_reiniger($value).'<br />';
           }
       }
    }


    // Hauen wir alles raus, was nicht reingehört
    function daten_reiniger($inhalt) {
        if (!empty(
    $inhalt)) {
            
    // HTML- und PHP-Code entfernen.
            
    $inhalt strip_tags($inhalt);
            
    // Umlaute und Sonderzeichen in HTML-Schreibweise umwandeln
            
    $inhalt htmlentities($inhaltENT_QUOTES);
            
    // Entfernt überflüssige Leerzeichen am  Anfang und Ende einer Zeichenkette
            
    $inhalt trim($inhalt);
            
    // Backslashes entfernen
            
    $inhalt stripslashes($inhalt);
        }
    return 
    $inhalt;

    Nu kannste Dir die schon mal anschauen D.h., wenn ich nicht irgendwo 'n Klämmerchen übersehen habe (Mein Lieblingssport).

    Und den Rest machen wir, wenn TanTe unrecht hat.

    Greetz
    cw
     

  5. #5
    Avatar von ComFreek
    ComFreek ComFreek ist gerade online [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.364
    Blog-Einträge
    4
    Zitat Zitat von chickenwing Beitrag anzeigen
    D.h., wenn ich nicht irgendwo 'n Klämmerchen übersehen habe (Mein Lieblingssport).
    Hast du einen Syntax-Highlighter? Bei meinem (PSPad) sehe ich immer sofort, wenn ich eine Klammer vergessen habe.
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  6. #6
    chickenwing chickenwing ist offline Mitglied Silber
    Registriert seit
    Nov 2010
    Beiträge
    56
    @comFreek

    normalerweise mache ich das mit DW-CS5... aber hier beim Schreiben "inner Box" seh ich das erstmal nicht. Und wenn ich mir im Anschluss nicht noch mal alles genau durchlese, sondern gleich "weiterhusche", kann's schon mal passieren. Zumal auf meinem Monitor die ( fast so aussieht wie { - (vielleicht sollte ich auch einfach mal nur meine Brille putzen). Häufiger passiert's mir allerdings, dass ich bei zusammengesetzten Strings schon mal mit den ' und " auf Kriegsfuß stehe. Ganz schlimm wird's, wenn escaped werden muss. Einfach nur gruselig, wie das aussieht.

    Greetz
    cw
     

  7. #7
    Twoing Twoing ist offline Grünschnabel
    Registriert seit
    Nov 2010
    Beiträge
    3
    Guten Abend

    Hm, ich sehe, dass es wohl doch nicht so einfach ist.

    Ich habe nun dem Sende-Button den name-tag verpasst.

    Übrigens verwende ich Dreamweaver 8 und lasse das ganze über XAMPP Lite laufen.

    Ich stehe immer noch vor dem Problem, dass mir die senden.php nicht wirklich was Vernünftiges auswirft. Das heisst, ich weiss nicht wirklich wie ich mit dem Datenreiniger-Skript umgehen muss. Wo muss ich das einbauen? Auf der senden.php oder auf der index.html?

    Ich weiss, dass ich mich im Moment aufführ wie eine totaler Vollidiot. Trotzdem möchte ich es irgendwie gerne hinkriegen, wenn es eine einfachere Lösung zu meinem Wunsch gibt, d.h. ohne PHP wäre das natürlich auch gut.

    Grüsse Twoing
     

  8. #8
    Twoing Twoing ist offline Grünschnabel
    Registriert seit
    Nov 2010
    Beiträge
    3
    So ich habs so hinbekommen wie ich wollte:

    PHP-Code:
    <?php
    $nachname
    =$_POST['nachname'];
    $vorname=$_POST['vorname'];
    $klasse=$_POST['klasse'];
    $sportart=$_POST['sportart'];
    $abo=$_POST['abo'];
    $ausgabe $nachname";"$vorname";"$klasse";"$sportart";"$abo";\n";
    $datei fopen("datei.csv","a");
    $output fwrite($datei,$ausgabe);
    fclose($datei);
    ?> 

    <html>
    <head>
    <title>Bestätigung</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><style type="text/css">
    <!--
    body,td,th {
        font-family: Arial, Helvetica, sans-serif;
    }
    -->
    </style></head>
    <body>
    <?php
    echo "Dein Name ist: "$vorname." "$nachname."<br>" ;
    echo 
    "Du gehst in die "$klasse"."."<br>" ;
    echo 
    "Du hast folgende Sportart gewählt: "$sportart"<br>" ;
    echo 
    "Skiabo: "$abo"<br>" ;
    ?>
    <P>
    <input type="button" value="Zurück zur Eingabeseite" onclick="history.back(-1)" />
    Es ist vielleicht nicht ganz die sicherste Methode, aber sie funktioniert.
    Was ich noch nicht weiss ist, wie ich einen Zurück-Button machen kann, der auf der Seite, auf die er zurück geht, dort das Formular resetet... Gibt es da eine "einfache" Möglichkeit?

    Gute Nacht
    und vielen Dank für die Hilfe
     

  9. #9
    chickenwing chickenwing ist offline Mitglied Silber
    Registriert seit
    Nov 2010
    Beiträge
    56
    Die einfachste Möglichkeit wäre, im Form-Tag action="" anzugeben und den Code der senden.php auf der Formularseite miteinzubauen und die Anzeige des Formulars über ein Flag zusteuern (oder das Formular auslagern und per include() einbinden).
    PHP-Code:
    $senden=false;
    if(isset(
    $_POST['senden'])) {
      
    $senden=true;
    // restlicher Code
    }
    if(
    $senden) {
      include(
    'meinformular.php');
    } else {
      echo 
    "Danke für die Angaben";

    Warum soll per historyback() wieder zurück auf's Formular, wenn's einmal komplett ausgefüllt wurde? Habe ich auch mal gemacht, aber dann wieder sein lassen, weil nicht wenige gedacht haben, irgendwas hätte mit der Übertragung nicht geklappt und mir das Formular doppelt und dreifach zugesandt haben. Sollte wirklich die Notwendigkeit bestehen, dass das Formular erneut ausgefüllt werden soll (weil z.B. 3 Leute vor dem PC sitzen), dann wäre ein (erneuter) Aufruf über einen Link meines Erachtens besser.

    Gut's Nächt'le
    cw
     

  10. #10
    TanTe TanTe ist offline Bombenleger
    Registriert seit
    Nov 2004
    Beiträge
    160
    senden.php
    PHP-Code:
    <?php
    function addCSV($newdata) {
        
    $olddata file_get_contents('file.csv'); //liest den Inhalt der datei 
        
    $newdata str_replace("vorhanden\";""vorhanden\"\r\n"$newdata); //ersetzt am Ende das Komma gegen einen Zeilenumbruch. Achtung das verursacht Fehler falls z.B. ein Schueler den Namen vorhanden traegt^^
        
    $data $olddata $newdata//fuegd die neuen Daten an die alten an
        
    file_put_contents('file.csv'$data); // schreibt die Datei
    }
    // Hauen wir alles raus, was nicht reingehört
    function daten_reiniger($inhalt) {
        if (!empty(
    $inhalt)) {
            
    // HTML- und PHP-Code entfernen.
            
    $inhalt strip_tags($inhalt);
            
    // Umlaute und Sonderzeichen in HTML-Schreibweise umwandeln
            
    $inhalt htmlentities($inhaltENT_QUOTES);
            
    // Entfernt überflüssige Leerzeichen am  Anfang und Ende einer Zeichenkette
            
    $inhalt trim($inhalt);
            
    // Backslashes entfernen
            
    $inhalt stripslashes($inhalt);
        }
    return 
    $inhalt;
    }
    if(isset(
    $_POST['senden'])) {   // Submit-Button gedrückt?
       
    foreach($_POST as $key=>$value) {   // Globales POST-ARRAY der Reihe nach durchlaufen
           
    if($key != 'senden') {  // den Senden-Button brauchen wir nicht
                
    echo $key.' hat den Wert: '.daten_reiniger($value).'<br />';
                
    $mydata .= "\"$value\";"//jedes $value wird mit "" und , versehen und in eine variable geschrieben
           
    }
       }
       
    addCSV($mydata);
    }
    ?>
    <a href="index.html">Zurueck</a>
     

Ähnliche Themen

  1. HTML Formular Daten per PHP in XML speichern
    Von matthiasschnueriger im Forum PHP
    Antworten: 4
    Letzter Beitrag: 26.04.10, 00:07
  2. Antworten: 3
    Letzter Beitrag: 28.07.05, 13:59
  3. Antworten: 5
    Letzter Beitrag: 05.07.04, 21:28
  4. HTML Datei in eine andere HTML Datei einbetten
    Von Bahly im Forum HTML & XHTML
    Antworten: 3
    Letzter Beitrag: 08.07.03, 17:11
  5. Wie kann ich eine ASP Datei in eine Html datei verweisen?
    Von Thimo Grauerholz im Forum HTML & XHTML
    Antworten: 2
    Letzter Beitrag: 12.04.01, 15:57

Stichworte