PHP-Parameter und schleife

P

puschelchen

Hallo guten Morgen, Jetzt muss ich doch die Parameter über browserzeile übergeben.
Das funktioniert auch aber er macht sofort wenn man die Seite öffnet mit Parameter Die Datei.
PHP:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Supportinfo</title>
<style type="text/css">
 .text {font-color="yellow";
}
.toFill {
border: 1px solid red;
img.background{
position: absolute;
top: 0px;
left:0px;
width: 400px;
height: 100px;
}
}
</style>
</head>
<body style="background: #362272 url(hintergrundfertig.png) top center no-repeat; background-attachment:scroll;">

<form action="" method="GET">
<div align="center" style=" width: 343px; margin: 180px auto 0px auto; text-align:right;">
    <font color="yellow">
        <b>
<?php
ob_start();
setlocale(LC_TIME, "de_DE");
date_default_timezone_set("Europe/Berlin");
$ok=true;
$Datum = date('d-m-y');
$Uhrzeit = date('h-i-s');
$Trennzeichen= ("_");
$pflichtfelder = array("Vorname", "Nachname", "Email", "Betreff");
$values = array("Vorname");
$Nachname = array("Nachname");
$Email=array("Email");
$Betreff=array("Betreff");
$Nachricht=array("Nachricht");
$found = array();
$mail= array();
$text = array();
$Nachricht="";
if (isset($_GET["Nachricht"])){
$Nachricht=$_GET["Nachricht"];
}
if (!array_key_exists("speichern", $_GET)){
  $found = $pflichtfelder;
  foreach ($pflichtfelder as $name){
  $values[$name] = "";
   $Nachname[$name]=$_GET[$name];
   $Email[$name]=$_GET[$name];
   $Betreff[$name]=$_GET[$name];
   }
 else {
  $ok = false;
  $values[$name] = "";
   }
  }
}
if (!empty($_GET)) {
  if (!$ok)echo '<script type="text/javascript">alert("Bitte fuellen Sie alle Felder aus");</script>';
  else{ echo '<script type="text/javascript">alert("Ihre Mail wurde versendet");</script>';
    $Datei=$values["Vorname"].$Trennzeichen.$Nachname["Nachname"].$Trennzeichen.$Datum.$Trennzeichen.$Uhrzeit.".txt";
    $File = fopen($Datei, "w+");
    fwrite($File,$Email["Email"]."\n\r".$Betreff["Betreff"]."\n\r");
    fwrite($File,$Seriennummer."\n\r".$Macadresse."\n\r");
    fwrite($File,$Nachricht);
    fclose($File);}
}
foreach ($pflichtfelder as $name){
 echo $name . ': <input name="' . $name . '" value="' . $values[$name] . '"';
 if (array_search($name, $found) === false) {
  echo ' class="toFill"';
}
echo "><br>\n";
}
?>
Macadresse: <input type="text" name="Macadresse"  readonly disable><br>
Seriennummer:<input type="text" name="Seriennummer"  readonly disable><br>
<textarea name="Nachricht" cols="40" rows="20"></textarea><br />
<input id ="Send" name="speichern" value="speichern" type="submit"><input type="reset" value="abbrechen">
<script type="text/javascript">
<!--
var Sekunden = 30;
var Buttonbeschriftung = "Abschicken";

document.getElementById('Send').disabled = true;

for(i = 1; i <= Sekunden; i++)
{
    window.setTimeout("ButtonAktualisieren(" + i + ")", i*1000);
}

window.setTimeout("ButtonFreigeben()", Sekunden*1000);

function ButtonAktualisieren(VergangeneSekunden)
{
    if(VergangeneSekunden == Sekunden)
    {
        document.getElementById('Send').value = Buttonbeschriftung;
    }
    else
    {
        Restsekunden = Sekunden-VergangeneSekunden;
        document.getElementById('Send').value = Buttonbeschriftung + " (" + Restsekunden + ") ";
    }
}
function ButtonFreigeben()
{
    document.getElementById('Send').disabled = false;
}
</script>
</div>
</form>
</body>
</html>
Ihr könnt gern mal es versuchen. Das Problem wie gesagt
http://img264.imageshack.us/f/testgp.jpg/ ich hoffe ihr könnt es erkennen also oben hab ich die Parameter eingegeben und eskam sofort ihre Email wurde versendet
jemand ne Idee wie ich die parameter in die Box reinschreiben kann und nicht abgeschickt wird? Liebe Grüße Puschel.
 
Ich kürze es mal auf die Zeilen die das ganze verursachen
Das du kein Parameter mit dem Namen speichern übergeben hast, jedoch $_GET nicht leer ist .....

Das folgende ist nur die Analyse warum es so ist wie es ist.
PHP:
$ok=true;
//$ok ist nun auf true
if (!array_key_exists("speichern", $_GET)){
    //speichern wurde nicht gefunden
}else {
  //Wird nicht durchlaufen, da speichern nicht gefunden wurde
  $ok = false;
}
//$ok ist nun immer noch auf true
if (!empty($_GET)) {
  //$_GET ist nicht empty
  //$ok ist immer noch auf true, ergo geht er hier in den else-Teil.
  if (!$ok)echo '<script type="text/javascript">alert("Bitte fuellen Sie alle Felder aus");</script>';
  else{ echo '<script type="text/javascript">alert("Ihre Mail wurde versendet");</script>';
  }
}
 
ja ich dachte mir schon das es in der zeile liegt vll sollte ich die Zeile umstellen mh
 
PHP:
if (!array_key_exists("speichern", $_GET)){
  $found = $pflichtfelder;
  foreach ($pflichtfelder as $name){
  $values[$name] = "";
  $Nachname[$name]="";
  $Email[$name]="";
  $Betreff[$name]="";
}
}
speichern kommt von:
PHP:
<input id ="Send" name="speichern" value="speichern" type="submit"><input type="reset" value="abbrechen">
PHP:
$ok=true;
if (isset($_GET)) {
  if (!$ok)echo '<script type="text/javascript">alert("Bitte fuellen Sie alle Felder aus");</script>';
  else{ echo '<script type="text/javascript">alert("Ihre Mail wurde versendet");</script>';
    $Datei=$values["Vorname"].$Trennzeichen.$Nachname["Nachname"].$Trennzeichen.$Datum.$Trennzeichen.$Uhrzeit.".txt";
    $File = fopen($Datei, "w+");
    fwrite($File,$Email["Email"]."\n\r".$Betreff["Betreff"]."\n\r");
    fwrite($File,$Seriennummer."\n\r".$Macadresse."\n\r");
    fwrite($File,$Nachricht);
    fclose($File);}
wie willst das sonst anders machen das is mein Problem
 
Also einen Schritt bin ich nun weiter if(isset($_GET['speichern'])){
funktioniert es, schreibt mir nur keine Macadresse und keine Seriennummer in die Felder oder in die Textdatei ch bin langsam wirklich am verzweifeln :(
 
Mein Formular hat funktioniert bis ich get genommen hab un an die Browserzeile übergeben hab
http://localhost/supportinfo.php?Vor...ern=Abschicken steht alles drin vergeben bis auf Macadresse und Seriennummer die stehn einfach so da =?
OK, Ich reiss mir am Freitag Morgen den ***** auf ein verständliches Beispiel zu schreiben und der Gastzugang hält es nicht für nötig auch nur ein Wort meinen Bemühungen zu widmen.

Um ignoreirt zu werden muss ich hier nicht mher weiter schreiben
 
Zuletzt bearbeitet:
Nimms mir doch nich übel aber ich Überprüfe doch schon ob die Variablen Vorname Nachname
etc gefüllt sind.
Ich hab mir überlegt über adresszeile nun auszulesen und an variable weiter zu geben.
Sry wenn du nun böse auf mich bist :(
 
PHP:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Supportinfo</title>
<style type="text/css">
 .text {font-color="yellow";
}
.toFill {
border: 1px solid red;
img.background{
position: absolute;
top: 0px;
left:0px;
width: 400px;
height: 100px;
}
}
</style>
</head>
<body style="background: #362272 url(hintergrundfertig.png) top center no-repeat; background-attachment:scroll;">
<form action="" method="GET">
<div align="center" style=" width: 343px; margin: 180px auto 0px auto; text-align:right;">
    <font color="yellow">
        <b>
<?php
setlocale(LC_TIME, "de_DE");
date_default_timezone_set("Europe/Berlin");
$ok=true;
$Datum = date('d-m-y');
$Uhrzeit = date('h-i-s');
$Trennzeichen= ("_");
$pflichtfelder = array("Vorname", "Nachname", "Email", "Betreff");
$values = array("Vorname");
$Nachname = array("Nachname");
$Email=array("Email");
$Betreff=array("Betreff");
$Nachricht=array("Nachricht");
$found = array();
$mail= array();
$text = array();
$Nachricht="";
$Seriennummer=" ";
$Macadresse=" ";
$path="./Nachrichten";
if (isset($_GET["dpSrn"])){
$Seriennummer=$_GET["dpSrn"];
}
if (isset($_GET["dpMac"])){
$Macadresse=$_GET["dpMac"];
}
if (isset($_GET["Nachricht"])){
$Nachricht=$_GET["Nachricht"];
}
if (!array_key_exists("speichern", $_GET)){
  $found = $pflichtfelder;
  foreach ($pflichtfelder as $name){
  $values[$name] = "";
  $Nachname[$name]="";
  $Email[$name]="";
  $Betreff[$name]="";
}
}
else {
 $ok = true;
foreach ($pflichtfelder as $name){
 if (array_key_exists($name, $_GET) && $_GET[$name]){
   array_push($found, $name);
   $values[$name] = $_GET[$name];
   $Nachname[$name]=$_GET[$name];
   $Email[$name]=$_GET[$name];
   $Betreff[$name]=$_GET[$name];
}
 else {
  $ok = false;
  $values[$name] = "";
   }
  }
}
$ok=true;
if(isset($_GET['speichern'])){
  if (!$ok)echo '<script type="text/javascript">alert("Bitte fuellen Sie alle Felder aus");</script>';
   else{ echo '<script type="text/javascript">alert("Ihre Mail wurde versendet");</script>';
   $Datei=$values["Vorname"].$Trennzeichen.$Nachname["Nachname"].$Trennzeichen.$Datum.$Trennzeichen.$Uhrzeit.".txt";
    $File = fopen($Datei, "w+");
    fwrite($File,$Email["Email"]."\n\r".$Betreff["Betreff"]."\n\r");
    fwrite($File,$Seriennummer."\n\r".$Macadresse."\n\r");
    fwrite($File,$Nachricht);
    fclose($File);}
}
foreach ($pflichtfelder as $name){
 echo $name . ': <input name="' . $name . '" value="' . $values[$name] . '"';
 if (array_search($name, $found) === false) {
  echo ' class="toFill"';
}
echo "><br>\n";
}
?>
Macadresse: <input type="text" name="dpMac" value="<?php echo $Macadresse; ?>" readonly disable><br>
Seriennummer:<input type="text" name="dpSrn" value="<?php echo $Seriennummer; ?>" readonly disable><br>
<textarea name="Nachricht" cols="40" rows="20"></textarea><br />
<input id ="Send" name="speichern" value="speichern" type="submit"><input type="reset" value="abbrechen">
<script type="text/javascript">
<!--
var Sekunden = 30;
var Buttonbeschriftung = "Abschicken";

document.getElementById('Send').disabled = true;

for(i = 1; i <= Sekunden; i++)
{
    window.setTimeout("ButtonAktualisieren(" + i + ")", i*1000);
}

window.setTimeout("ButtonFreigeben()", Sekunden*1000);

function ButtonAktualisieren(VergangeneSekunden)
{
    if(VergangeneSekunden == Sekunden)
    {
        document.getElementById('Send').value = Buttonbeschriftung;
    }
    else
    {
        Restsekunden = Sekunden-VergangeneSekunden;
        document.getElementById('Send').value = Buttonbeschriftung + " (" + Restsekunden + ") ";
    }
}
           function ButtonFreigeben()
{
    document.getElementById('Send').disabled = false;
}
</script>
</div>
</form>
</body>
</html>
 
Hallöle,

Also entweder habe ich was nicht verstanden oder.....

wieso musst Du denn die Parameter überhaupt per GET übergeben? $_POST[] erfüllt doch genauso seinen Zweck. Zumal ich nach Möglichkeit immer auf GET verzichte; dann kann wenigstens keiner in der URL "rumpfuschen". Ausserdem werden beim "submit" alle Felder übertragen, da muss dann nicht nochmal geprüft werden, ob dieses oder jenes POST überhaupt da ist (Okay, Checkboxen spielen da 'ne Sonderrolle). Beim GET allerdings macht's Sinn, denn da könnte Hinz oder Kunz schon mal was aus dem Querystring rauslöschen.
Du prüfst die ersten Posts (Deine Pflichtfelder) auf Inhalt und schreibst die restlichen in die Datei. Und wenn die Felder nicht korrekt ausgefüllt wurden, dann erscheint das Formular eben nochmal. Ich habe aus solchen Gründen Formular und Auswertcode meist getrennt und binde bei Bedarf das Formular per Include() ein. Ist einfach übersichtlicher als alles zu verwurschteln.
Und ich würde auch die verkürzte Schreibweise deiner If-Abfragen nehmen:
PHP:
$_GET['dummy'] = isset($_GET['dummy'] ? $_GET['dummy'] : "";
das entspannt optisch ungemein und hält denn Quellcode kleiner.
Und Du erparst Dir das vorherige zuweisen Deiner ganzen Variablen, sondern kannst anstelle von "<?php echo $Macadresse; ?>" "<?php echo $_GET['dpMac']; ?> schreiben.
Ich gehe mal stillschweigend davon aus, dass Du in dem Fall Deine GETs trotzdem validierst.
Und wozu brauchst Du das Javascript (rhetorische Frage)? Ich gehöre z.B. zu der Sorte, die im FF Noscript installiert haben. Und damit funktioniert bei mir auf keiner Seite (erstmal) Javascript. Somit greift das schon mal nicht.

Greetz
cw
 
Zuletzt bearbeitet:
Zurück