Hi!
das array wo steht $pflichtfelder= array('vorname','nachname','Email','betreff)
denn weiter unten will ich ne datei schreiben in der prüfung die soll heissen: hans_müller_datum_uhrzeit.txt und das will ich so definieren:$datei= $pflichtfelder.$pflichtfelder.date.time.".txt"; nur das Pflichtfelder ja das Vorname etc enthält
$pflichtfelder ist ein Array. Wenn du das einfah so in einen String-Kontext bringst, kommt da nur das Wort 'Array' raus. Aus allen Werten des Arrays einen String zu erzeugen geht unter anderem mit der Funktion implode(). Aber du willst eigentlich gar nicht das Array $pflichtfelder nehmen, denn das enthält nur die Feldnamen und nicht die Inhalte. Diese trägst du in $values ein, also müsstest du daraus den Dateinamen generieren, oder nicht?
und wo soll ich sonst die daten herbekommen die der Benutzer einträgt`?
Brauchst du jetzt einen PHP-Grundlagenkurs, der dir sagt, wie du an die Daten aus den Input-Feldern kommst?
Insgesamt sieht dein Code (abgesehen von den nicht vorhandenen Einrückungen, die der Lesbarkeit stark abträglich sind) so aus, als ob du einfach mal was machst, aber gar nicht genau weißt, was dabei rauskommt. Du solltest dir ein paar Debugging-Fähigkeiten zulegen, damit du nachvollziehen kannst, was wann wo steht, um so deinen Wunsch mit der Wirklichkeit vergleichen zu können. Mitunter reicht ein einfaches echo $var, um sich den Inhalt von $var anzeigen zu lassen, aber deutlich genauer ist die Funktion var_dump(). Diese erzeugt immer eine Ausgabe, auch bei nicht sichtbaren Inhalten, wie Leerstring oder null. Zudem solltest du beim Entwickeln immer das error_reporting auf E_ALL (und display_errors auf on) stellen, damit dir Zugriffe auf nicht vorhandene Variablen angezeigt werden. Solch ein Zugriff deutet üblicherweise auf einen Fehler hin, auch wenn PHP das nicht so eng sieht.
Noch drei Anmerkungen
<div align="right" style="position:absolute;top:190px; right:10px;"><font color="yellow"><b>
Warum schreibst du die Farbe und das Fett nicht ebenfalls als CSS-Eigenschaften? Seit die CSS-unfähigen Browser ausgestorben sind, besteht noch nicht mal mehr die Notwendigkeit, sich zu erinnern, dass es das font-Element jemals in HTML gab.
if (array_key_exists($name, $_POST) && $_POST[$name]){
Teste lieber mit isset($_POST[$name]) statt mit array_key_exists(), denn das ist einfacher zu lesen und kürzer zu tippen. Mit dem && $_POST[$name] möchtest du sicher einen von Leerstring verschiedenen Inhalt testen. So notiert ist das aber kein Stringtest sondern ein Test auf boolschen Inhalt. Das ist eigentlich kein Problem, weil PHPs automatische Typumwandlung zum tragen kommt. Du bringst aber deine Intention deutlicher einfacher rüber, wenn du nicht solche Um-die-Ecke-Denk-Konstrukte verwendest, sonder eher auf die Stringlänge prüfst. In deinem Fall kannst du aber das gesamte Konstrukt durch ein
if (!empty($_POST[$name]))
ersetzen, das vereint die isset()- mit der Nicht-Leer-Prüfung.
array_push($found, $name,$mail,$text);
array_push() ist eigentlich auch eine Funktion, die man zugunsten der "$array[] = wert"-Schreibweise meiden sollte. In deinem Fall bringt sie jedoch einen kleinen Vorteil, weil du nur eine statt drei Zeilen notieren muss. Aber willst du wirklich die Inhalte aus $name, $mail und $text in $found ablegen? Wenn ich nichts übersehen habe, ist da jeweils nur ein leeres Array drin abgelegt.
Versuch doch auch noch deinen Code mit Kommentaren zu versehen. Kommentiere aber nicht, was der Code macht - denn das sieht man - sondern was deine Intention ist, was du jeweils beabsichtigst. Den Code allein zu betrachten, bringt nicht unbedingt alle Fehler zu Tage. Einige gravierende Dinge kann man sicher auf Anhieb erkennen, aber nicht immer kann man zweifelsfrei sehen, was Absicht und was Fehler ist.
Und als Abschluss sei auch dir die Lektüre des Kontextwechsel-Artikels empfohlen, denn du zeigst einen der häufigsten sicherheitsrelevanten Programmierfehler beim Einfügen von Variableninhalten in andere Kontexte. Speziell ist es bei dir das Erzeugen der HTML-Elemente des Formulars sowie das Zusammenbauen des Dateinamens aus Benutzereingaben. Man muss da nur mal ein paar ../ und noch ein paar Pfadeingaben einbauen und kann alle erreichbaren und auf .txt endenden Dateien überschreiben.
Lo!