• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP-Formular+Array

bluemoon

New member
Hallo,
Ich hab einen Code geschrieben der leider nicht Ganz funktionier *leider*
Würdet ihr vll mal Drübersehn?
PHP:
<!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");
$pflichtfelder = array("Vorname", "Nachname","Email","Betreff",);
$values = array();
$found = array();
$mail= array();
$text = array();
$Text=("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];
list($Vorname,$Nachname)=$pflichtfelder;
$Datei=$Vorname.$Nachname.".txt";
$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 $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>
er schreibt nämlich meine Datei so: VornameNachname.txt Sollte Aber Heissen Beispiel_: HansMeier.txt Jemand ne Idee warum mein Array leer ist, oder hab ichs in die Falsche Anweisung gerückt? Hoffe ihr könnt mir helfen
 
Das die Datei VornameNachname.txt heißt, ist meine Erwartung nach einem Blick auf deinen Code.
Du schreibst einmal in $pflichtfelder, und zwar u.a. die Strings Vorname und Nachname.
Diese Werte liest du dann in die Variablen $Vorname und $Nachname und aus denen baust du deinen Dateinamen. Wie sollte die anders heißen können?

Allerdings kann ich nicht so wirklich nachvollziehen was du da machst. Das liegt zum einen an deiner fehlenden Einrückung (bitte korrigieren), zum anderem an deinem Programmierstil. Du willst doch eigentlich nur Daten aus einem Formular auslesen und wegschreiben, oder nicht?

Tip:
gib dir mal die Inhalte deiner Variablen Schritt für Schritt aus (zb mit var_dump($variable) oder print). Dann kannst du besser nachvollziehen was dein Script eigentlich macht.
 
Skript tut A: Formular sehen ob alles ausgefüllt is. B:Wenn gefüllt is alles in Datei schreiben. C: Meldung ausgeben ob gefüllt oder nicht ^^ D: Mit Farbe umranden was Fehlt.ich denke ich habs gut erklärt. Ich Schreib in Vorname Vorname rein das liegt dann im Array und das sollte dann als Name für die Datei gelten. In meinem Alten Script hab ich alles in Variablen Geschrieben im endeffekt ich muss nur den Array auslesen bzw Splitten mehr nicht.
 
ich habs script jetz eh komplett umgeworfen aber es funktioniert immer noch nicht :icon8: ich möchte es heute endlich fertig bekommen hoffe ihr könnt mir helfen

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 weis nicht was ich falsch mache :/
 
Dein script wirft doch Fehler. Beseitige diese erstmal. Die Arbeit wird dir keiner abnehmen.
Dann, was soll
error_reporting( -1 ); ?
Dafür gibt es vordefinierte Konstanten, z.B. error_reporting( E_ALL ); ist zu empfehlen.
Dann ob_start(); ??
Hast du mal nachgesehen was dieser Aufruf bezweckt ?
 
ja habe ich, er sagt immer Notice: Undefined variable: pflichtfelder in /srv/www/htdocs/test2.php on line 65 Warning: Invalid argument supplied for foreach() in /srv/www/htdocs/test2.php on line 65
aber ich hab ihr doch die Daten übergeben?
Naja ob_start()
HTML:
Eine sehr nützliche Funktion in PHP ist ob_start und ob_get_contents. Es wird damit ermöglicht alles was dazwischen steht in eine Variable zu speichern und so weiterzuverwenden.
Von der Seite http://www.professorweb.de/php-mysql/inhalte-mit-php-abfangen-ob_start-und-ob_get_contents.html
 
Ich bekomme richtige Fehler, wenn ich dein obiges script teste (fehlende Klammern).
Ein (Schreib)Fehler hab ich sofort gesehen §:
PHP:
if (array_key_exists(§pflichtfelder){
Siehst du noch mehr in der einen Zeile? Ich ja.

zu ob_start() :
Dein Zitat stiftet mehr Verwirrung als es zeigt was die Function tut. Schau hier.
Dort solltest du dir auch anschauen wofür z.B. array_key_exists benutzt wird.
 
Und nicht das es heisst ich habs nicht gemacht : <?php
error_reporting( E_ALL );
:)
naja es heisst ja durchsucht array nach key der key muss ja dann das $Vorname z.B sein oder liege ich da Verkehrt?
 
PHP:
$Datei='Die_Datei'..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 = $_POST['Nachricht'];
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='Die_Datei'.".txt";
$FilePointer = fopen($Datei, "w");
echo $_POST[$name];
fwrite($FilePointer, $_POST[$name].$_POST[$name].$_POST[$name]);
fclose($FilePointer);
//$Datei=$_POST[$name].$Trennzeichen.$_POST[$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>
gibt er mir nur die Betreffzeile aus ://
 
PHP:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Supportinfo</title>
</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("Vorname");
$Nname = array("Nachname");
$Email=array("Email");
$Betreff=array("Betreff");
$found = array();
$mail= array();
$text = array();
$Nachricht = $_POST['Nachricht'];
foreach ($pflichtfelder as $name){
if (!array_key_exists("speichern", $_POST)){
$found = $pflichtfelder;
foreach ($pflichtfelder as $name){
$values[$name] = "";
$nname[$name]="";
$Email[$name]="";
$Betreff[$name]="";
}
}
else {
$ok = true;
if (array_key_exists($name, $_POST) && $_POST[$name]){
array_push($found, $name,$mail,$text);
$values[$name] = $_POST[$name];
$nname[$name]=$_POST[$pflichtfelder[$name]];
$Email[$name]=$_POST[$name];
$Betreff[$name]=$_POST[$name];
$Datei=$values["Vorname"].$Trennzeichen.$nname["Nachname"].$Trennzeichen.$Datum.$Trennzeichen.$Uhrzeit.".txt";
$File = fopen($Datei, "w+");
fwrite($File,$Betreff["Betreff"].$Nachricht);
fclose($File);
}
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>
Funktioniert schreibt nur Daten so: Vorname__datum_zeit.txt und so
Vorname_Nachname_zeit.txt
 
PHP:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Supportinfo</title>
</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("Vorname");
 $Nname = array("Nachname");
 $Email=array("Email");
 $Betreff=array("Betreff");
 $found = array();
 $mail= array();
 $text = array();
 $Nachricht = $_POST['Nachricht'];
foreach ($pflichtfelder as $name){
   if (!array_key_exists("speichern", $_POST)){
   $found = $pflichtfelder;
foreach ($pflichtfelder as $name){
  $values[$name] = "";
  $nname[$name]="";
  $Email[$name]="";
  $Betreff[$name]="";
  }
}
else {
   $ok = true;
   if (array_key_exists($name, $_POST) && $_POST[$name]){
   array_push($found, $name,$mail,$text);
   $values[$name] = $_POST[$name];
   $nname[$name]=$_POST[$pflichtfelder[$name]];
   $Email[$name]=$_POST[$name];
   $Betreff[$name]=$_POST[$name];
   $Datei=$values["Vorname"].$Trennzeichen.$nname["Nachname"].$Trennzeichen.$Datum.$Trennzeichen.$Uhrzeit.".txt";
   $File = fopen($Datei, "w+");
   fwrite($File,$Betreff["Betreff"].$Nachricht);
   fclose($File);
   }
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>

ists besser für euch ? :)
 
ists besser für euch ? :)
Bevor Du Deinen Quellcode noch 5 mal postest: Du kannst Deine Beiträge auch editieren und eine bereinigte, formatierte Version nachliefern.

Was Du auch nachliefern solltest, wäre eine Beschreibung des aktuellen Fehlers, weil irgendwie kann ich überhaupt nicht nachvollziehen, was denn nu das Problem sein soll (allerdings habe ich mir auch den Code nicht näher angeschaut).
Idealerweise wäre diese Beschreibung nicht im Telegrammstil verfasst, sondern ausführlicher.

Eine Anmerkung zu ob_start: Es ist ja schön, dass Du Dich in diverse Thematiken einlesen möchtest und auch das eine oder andere ausprobieren willst, aber gerade ob_start ist für sich alleine genommen völlig nutzlos oder sogar hinderlich, denn es verhindert zunächst die Ausgabe. Ob PHP so nett ist die gepufferte Ausgabe auch ohne die dafür vorgesehenen Funktionsaufrufe trotzdem an den Browser auszuliefern, kann ich mangels eigener Tests nicht sagen, aber darauf verlassen würde ich mich nicht.
Im Zweifelsfall würde ich vorschlagen, dass Du Befehle deren Wirkung Du nicht kennst oder deren Bedeutung Du nicht verstanden oder nicht im PHP Manual nachgeschlagen hast, einfach mal weglässt.
 
Zurück
Oben