• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP & ich

php-newbie

Neues Mitglied
stehn wohl auf Kriegsfuß,:twisted:
Hallo erstma bin Neu hier auch nicht so erfahren vll könntet ihr euch meinen Code ansehen:
Code:
<!DOCTYPE html>

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Supportinfo</title>
<style type="text/css">
.toFill {
border: 1px solid red;
}
</style>
</head>
<body background="hintergrundfertig.png" alt="Bild">
<form action="" method="POST">
<div align="right" style="position:absolute;top:190px; right:10px;"><font color="yellow"><b>
<?php
ob_start();
setlocale(LC_TIME, "de_DE");
date_default_timezone_set("Europe/Berlin");
$Datum = date('d-m-y');
$Uhrzeit = date('h-i-s');
$Trennzeichen= ("_");
$pflichtfelder = array("Vorname","Nachname","Email","Betreff");
$values = array();
$found = array();
$mail= array();
$text = array();
$Nachricht =("Hallo");
if (!array_key_exists("speichern", $_POST)){
$found = $pflichtfelder;
foreach ($pflichtfelder as $name){
$values[$name] = "";
}
}
else {
$ok = true;
foreach ($pflichtfelder as $name){
if (array_key_exists($name, $_POST) && $_POST[$name]){
array_push($found, $name,$mail,$text);
$values[$name] = $_POST[$name];
$Datei=$name.$Trennzeichen.$name.$Trennzeichen.$Datum.$Trennzeichen.$Uhrzeit.".txt";
$FilePointer = fopen($Datei, "w");
fwrite($FilePointer, $Nachricht);
fclose($FilePointer);
}
else {
$ok = false;
$values[$name] = "";
}
}
if (!$ok) echo '<script type="text/javascript">alert("Bitte alle Felder ausfüllen!");</script>';
else echo '<script type="text/javascript">alert("Ihre Mail wurde versendet");</script>';
}
foreach ($pflichtfelder as $name){
echo $name . ': <input name="' . $name . '" value="' . $values[$name] . '"';
if (array_search($name, $found) === false) {
echo ' class="toFill"';
}
echo "><br>\n";
}
?>
<textarea name="Nachricht" cols="40" rows="20"></textarea><br />
<input name="speichern" value="speichern" type="submit"><input type="reset" value="abbrechen">
</div>
</form>
</body>
</html>
Mein Array bleibt leer ich weis aber nicht Warum
die datei nennt er Vorname_Vorname_datum_uhrzeit.txt
aber das was die Nutzer eingeben sollte dort stehn wie: Hans_Meier_Datum_Uhrzeit.txt
Hoffe ihr könnt mir Helfen :(
 
Böse zungen könnten behaupten, dass du wahrscheinlich in deinem Code ebenso auf Interpunktion verzichtet hast wie in deiner Hilfeanfrage!
Deine Hilfeanfrage liest sich sehr anstrengend und ist schwer bis garnicht verständlich.

Editier mal deinen Beitrag und
- mach den Text verständlich und lesbar
- benutze statt dem
Code:
-Tag einen mit Syntaxhighlighting ([PHP] oder [HTML])

Deine Chancen auf Hilfe steigern sich dann ungemein ;)
So wie es ist, wird sich dem kaum jemand annehmen...ich zumindest nicht!
 
Willkommen im Forum.

Ein aussagekräftigerer Threadtitel wäre auch gut. Ansonsten: Debuggen. Lass dir den Inhalt wichtiger Variablen per var_dump ausgeben und überprüfe, ob er korrekt ist. Falls nicht, gehe im Quellcode rückwärts und vollziehe nach, wieso der Inhalt nicht stimmt.

Du solltest zudem als erste Zeile im Script error_reporting(-1); setzen, dann zeigt der PHP-Interpreter alle Fehler und Unschönheiten an.

HTML-Tags wie font und b sind veraltet und sollten nicht mehr verwendet werden. Nutze CSS.
 
ok mach ich das nächste mal ich hab nun meinen Code umbearbeitet komm aber nicht weiter :/
PHP:
<?php
error_reporting( -1 );
ini_set('display_errors', TRUE);
ob_start();
setlocale(LC_TIME, "de_DE");
date_default_timezone_set("Europe/Berlin");
?>

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

<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<style type="text/css">
<!--
.text {
        position: relative;
        margin-top: 160px;
        height: 160px;
        font-color: yellow;
}
.toFill {
border: 1px solid red;
} 
-->
</style>
 <title>Supportinfo</title>
</head>
<body background="hintergrundfertig.png" alt="Bild">
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<div align="right" style="position:absolute;top:190px; right:0px;"><font color="yellow"><b>
Nachname:<input type="text" name="Nachname" size="50" /><br />
Vorname:<input type="text" name="Vorname" size="50" /><br />
E-Mail:<input type="text" name="Email" size="50" /><br />
Betreff:<input type="text" name="Betreff" size="50" /><br />
<textarea name="Nachricht" cols="60" rows="20"></textarea><br />
<input type="submit" value="Senden" /><input type="reset" value="Abbrechen" />

</div>
</form>

<?php
if(isset($_POST['Nachname']))
{ $Email = $_POST['Email'];
  $Betreff = $_POST['Betreff'];
  $Nachricht = $_POST['Nachricht'];
  $Nachname = $_POST['Nachname'];
  $Vorname = $_POST['Vorname'];
  $Datum = date('d-m-y');
  $Uhrzeit = date('h-i-s');
  $Trennzeichen= ("_");
  $Leerzeichen = (" ");
  $pflichtfelder = array('$Vorname,$Nachname,$Email,$Betreff,$Nachricht');
  $Datei=$Vorname.$Nachname.$Datum.$Uhrzeit.".txt";
  $Text=$Nachricht;
  $values = array();
  $found = array(); 
  foreach ($pflichtfelder as $name){
if (array_key_exists(§pflichtfelder){
$FilePointer = fopen($Datei, "w");
fwrite($FilePointer, $Text);
fclose($FilePointer);
}
else {
$ok = false;
$values[$name] = "";
}
}
if (!$ok) echo '<script type="text/javascript">alert("Bitte alle Felder ausfüllen!");</script>';
}
foreach ($pflichtfelder as $name){
echo 'Nur ein Test';
if (array_search($name, $found) === false) {
echo ' class="toFill"';
}
echo "><br>\n";
}
?>
</body>
</html>
Ich glaub meine Schleife passt nicht mehr :( Hoffe ihr könnt mir helfen
 
Was ich auf Anhieb sehen kann, du benutzt in deinem Array einfache statt doppelte Anführungszeichen. Dadurch werden die Variablen nicht interpretiert, d.h. $Vorname ist ein Text, keine Variable. Außerdem solltest du für Variablen immer ein Dollar-Zeichen ($) benutzen und kein Paragraphen-Zeichen (§). Kleiner Verbesserungsvorschlag für dein Script noch:

Benutze statt 4 Variablen und einem Trennzeichen einfach einen Array und implode, d.h. lade die $_POST-Daten in einen Array (1 => Vorname, 2 => Nachname, 3 => Datum, 4 => Uhrzeit) und mach einen implode und definiere als Trennzeichen einfach '_'.

Sieht ungefähr so aus:
PHP:
$deinarray[0] = $_POST['Vorname'];
$deinarray[1] = $_POST['Nachname'];
$deinarray[2] = date('d-m-y_h-i-s');  // Datum und Uhrzeit zusammengefasst
$Datei = implode('_', $deinarray) . '.txt';
 
Ich habe mal versucht, eine Grundlage zu bauen, die funktioniert:

PHP:
<?php
error_reporting(-1);
ini_set('display_errors', true);

setlocale(LC_TIME, 'de_DE');
date_default_timezone_set('Europe/Berlin');

$pflichtfelder = array('Vorname', 'Nachname', 'Email', 'Betreff', 'Nachricht');
$ok = true;

if (isset($_POST['submit'])) {
    foreach ($pflichtfelder as $name) {
        if (!array_key_exists($name, $_POST) || empty($_POST[$name])) {
            $ok = false;
        }
    }

    if ($ok) {
        $Datei = $_POST['Vorname'] . $_POST['Nachname']
               . date('d-m-y') . date('h-i-s') . '.txt';        
    
        $FilePointer = fopen($Datei, 'w');
        fwrite($FilePointer, $_POST['Nachricht']);
        fclose($FilePointer);
    }
}

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

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>

        <style type="text/css">
            <!--
            .text {
                position: relative;
                margin-top: 160px;
                height: 160px;
                color: yellow;
            }
            .toFill {
                border: 1px solid red;
            }
            -->
        </style>
        <title>Supportinfo</title>
    </head>
    <body background="hintergrundfertig.png" alt="Bild">
        <form action="" method="post">
            <div align="right" style="position:absolute;top:190px; right:0px;">
                Nachname:<input type="text" name="Nachname" size="50" /><br />
                Vorname:<input type="text" name="Vorname" size="50" /><br />
                E-Mail:<input type="text" name="Email" size="50" /><br />
                Betreff:<input type="text" name="Betreff" size="50" /><br />
                <textarea name="Nachricht" cols="60" rows="20"></textarea><br />
                <input type="submit" name="submit" value="Senden" /><input type="reset" name="reset" value="Abbrechen" />
            </div>
        </form>

<?php
    if (!$ok) {
        echo '<script type="text/javascript">alert("Bitte alle Felder ausfüllen!");</script>';
    }
?>

    </body>
</html>

Der Code hat allerdings Schwachstellen. Die Werte aus $_POST, die für die Zusammensetzung des Dateinamens verwendet werden, müssen gefiltert werden, damit zum Beispiel niemand Anteile wie "../" einbaut.
 
Das ist leider nicht mit wenig Code elegant zu lösen (Stichwort „Formbuilder“).

Hier eine unelegante Lösung:

PHP:
<?php

function escape($text)
{
    return htmlspecialchars($text, ENT_QUOTES);
}

error_reporting(-1);
ini_set('display_errors', true);

setlocale(LC_TIME, 'de_DE');
date_default_timezone_set('Europe/Berlin');

$pflichtfelder = array('Vorname', 'Nachname', 'Email', 'Betreff', 'Nachricht');
$ok = true;

if (isset($_POST['submit'])) {
    foreach ($pflichtfelder as $name) {
        if (empty($_POST[$name])) {
            $ok = false;
        }
    }

    if ($ok) {
        $Datei = $_POST['Vorname'] . $_POST['Nachname']
               . date('d-m-y') . date('h-i-s') . '.txt';

        $FilePointer = fopen($Datei, 'w');
        fwrite($FilePointer, $_POST['Nachricht']);
        fclose($FilePointer);
    }
}

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

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>

        <style type="text/css">
            <!--
            .text {
                position: relative;
                margin-top: 160px;
                height: 160px;
                color: yellow;
            }
            .toFill {
                border: 1px solid red;
            }
            -->
        </style>
        <title>Supportinfo</title>
    </head>
    <body background="hintergrundfertig.png" alt="Bild">
        <form action="" method="post">
            <div align="right" style="position:absolute;top:190px; right:0px;">
                Nachname:
                <input type="text"
                       name="Nachname"
                       class="<?php echo (!$ok && empty($_POST['Nachname'])) ? 'toFill' : ''; ?>"
                       value="<?php echo (!empty($_POST['Nachname'])) ? escape($_POST['Nachname']) : ''; ?>"
                       size="50" /><br />

                Vorname:
                <input type="text"
                       name="Vorname"
                       class="<?php echo (!$ok && empty($_POST['Vorname'])) ? 'toFill' : ''; ?>"
                       value="<?php echo (!empty($_POST['Vorname'])) ? escape($_POST['Vorname']) : ''; ?>"
                       size="50" /><br />

                E-Mail:
                <input type="text"
                       name="Email"
                       class="<?php echo (!$ok && empty($_POST['Email'])) ? 'toFill' : ''; ?>"
                       value="<?php echo (!empty($_POST['Email'])) ? escape($_POST['Email']) : ''; ?>"
                       size="50" /><br />

                Betreff:
                <input type="text"
                       name="Betreff"
                       class="<?php echo (!$ok && empty($_POST['Betreff'])) ? 'toFill' : ''; ?>"
                       value="<?php echo (!empty($_POST['Betreff'])) ? escape($_POST['Betreff']) : ''; ?>"
                       size="50" /><br />

                <textarea name="Nachricht"
                          class="<?php echo (!$ok && empty($_POST['Nachricht'])) ? 'toFill' : ''; ?>"
                          cols="60"
                          rows="20"><?php echo (!empty($_POST['Nachricht'])) ? escape($_POST['Nachricht']) : ''; ?></textarea><br />

                <input type="submit" name="submit" value="Senden" /><input type="reset" name="reset" value="Abbrechen" />
            </div>
        </form>

<?php
    if (!$ok) {
        echo '<script type="text/javascript">alert("Bitte alle Felder ausfüllen!");</script>';
    }
?>

    </body>
</html>
 
Zurück
Oben