setcookie Befehl in if Abfrage

treibstoff

Grünschnabel
liebe leuts,
habe mein Script von vor zwei Wochen um eine Abfrage ob das Login schon erfolgt ist um einen Cookie erweitert.
http://www.tutorials.de/forum/php/331432-mailabfrage-fuer-download-eintrag-mit-fputs.html

Allerdings wird er setcookie Befehl
PHP:
<?php setcookie("laser",'logged', time()+3600); ?>
wenn ich den ans Ende aller Abfragen setze, also dort wo dann die Eintragungen in die Text-Datei und die Weiterleitung erfolgen nicht ausgeführt.
Setze ich den setcookie Befehl ganz an den Anfang vom Script wird er ausgeführt - was mir aber wenig nützt.

Habe mich zunächst damit ausgeholfen, das ich bei der erfolgreichen Abfrage ob das Cookie gesetzt ist die Weiterleitung erfolgen lasse - und den eigentlichen setCookie Befehl über eine Zwischenseite (mit Weiterleitung an die Zieladresse) erfolgen lasse, die am Ende aller erfolgreichen Eingaben aufgerufen wird.

PHP:
<html><head><meta http-equiv="expires" content="0" /></head><body>
<?PHP

//echo "Herzlich willkommen " . $_COOKIE["laser"];
function checkEmail($email) { 
if (!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)*.([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/" , $email)) { 
return false; 
} 
return true; 
} 
function pruefung($string) {
$eregi = eregi_replace("([A-Z0-9]+)","",$string);
if(empty($eregi)){
return true;
}
return false;
}


if ($_COOKIE["laser"]== "logged"){echo "Cookie ist &nbsp; OK!";echo "<meta http-equiv=\"refresh\" content=\"5; url=http://www.xyz..de/ziel.html\">";}else {
if($werbinich==''){  
$werBinIchValue ="value=' Bitte Ihren Namen!' onfocus=\"if (this.value == ' Bitte Ihren Namen!') {this.value = '';}\" onblur=\"if (this.value == '') {this.value = ' Bitte Ihren Namen!';}\"";  
} 
else{  
$werBinIchValue = "value='".$werbinich."' onfocus=\"if (this.value == ' Bitte Ihren Namen!') {this.value = '';}\" onblur=\"if (this.value == '') {this.value = ' Bitte Ihren Namen!';}\""; 
}  
if($name==''){  
$mailValue ="value=' Bitte Ihre MailAdresse!' onfocus=\"if (this.value == ' Bitte Ihre MailAdresse!') {this.value = '';}\" onblur=\"if (this.value == '') {this.value = ' Bitte Ihre MailAdresse!';}\""; 
} 
else{  
$mailValue = "value='".$name."'onfocus=\"if (this.value == ' Bitte Ihren Namen!') {this.value = '';}\" onblur=\"if (this.value == '') {this.value = ' Bitte Ihren Namen!';}\""; 
}
if($aktion=='eingabe'){
ausgabe($name, $werbinich);
}

echo "<form name='formular' action='$PHP_SELF'>\n";
echo "bitte ihren namen <br />";
echo "<input type='text' name='werbinich' size='25' ". $werBinIchValue . " >\n"; 

echo "<br />bitte ihre mail <br />";
echo "<input type='text' name='name' size='25' ". $mailValue . "  >\n";
echo "<input type='hidden' name='aktion' value='eingabe' >\n";
echo "<input type='submit' value='los!'>\n";
echo "</form>\n";
}

function ausgabe($name,$werbinich){
$fp = fopen("namen.txt", "a+");
$name1 = "\n\n".$name;
$name2 = "\n".$werbinich;
$email = trim($name);
$string = trim($werbinich);    
if(!checkEmail($email)) {  
echo 'Invalid email address!';
}
else {
   if(($string == "Bitte Ihren Namen!") or ($string == "")) { 
    echo 'Bitte geben Sie Ihren Namen ein!';} 
        else {  

	fputs($fp, $name1.$name2);fclose($fp);echo "<meta http-equiv=\"refresh\" content=\"0; url=http://www.xyz..de/setcook.php\">"; }

}}

?> </body></html>

Würde allerdings gerne wissen, warum der setCookie Befehlt in der If Abfrage am Ende nicht ausgeführt wird

liebe grüße
thomas
 
Zuletzt bearbeitet:
Vor setcookie() darf keine Ausgabe stehen. Steht auch im Manual. Du musst Dein Script so umschreiben, dass die Ausgaben nach dem Befehl setcookie() stehen.
 
Vor setcookie() darf keine Ausgabe stehen. Steht auch im Manual. Du musst Dein Script so umschreiben, dass die Ausgaben nach dem Befehl setcookie() stehen.

ja danke - das hab ich da auch schon gemerckt.

Script umschreiben sagst du so leicht.

setcookie soll ja erst nach erfolgter Überprüfung der Ausgaben erfolgen.

- und da helfe ich mit i.A. mit der ZwischenSeite wo der setcookie dann ausgeführt wird.

hmm

thomas
 
Hi

das umschreiben klingt schwerer als es ist.
Du musst einfach nur den PHPcode ausschneiden (strg+x) und dann vor die html klammer einfügen (strg+v).
 
wenn du am Anfang des Skriptes ein ob_start() platzierst, musst du nichts weiter umschreiben ;)

das wars! :):):)
PHP:
<?php
function callback($buffer){
    $buffer = str_replace("\n", "", $buffer);
    $buffer = str_replace("\t", "", $buffer);
    $buffer = str_replace(chr(13), "", $buffer);
    $buffer = ereg_replace("<!\-\- [\/\ a-zA-Z]* \-\->", "", $buffer);
    return $buffer;
}
ob_start("callback");?>

<html><head><meta http-equiv="expires" content="0" /></head><body>
<?php 
//echo "Herzlich willkommen " . $_COOKIE["laser"];
function checkEmail($email) { 
if (!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)*.([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/" , $email)) { 
return false; 
} 
return true; 
} 

if ($_COOKIE["laser"]== "logged"){echo "Cookie ist &nbsp; OK!";header('Location: http://www.xyz.de');}else {
if($werbinich==''){  
$werBinIchValue ="value=' Bitte Ihren Namen!' onfocus=\"if (this.value == ' Bitte Ihren Namen!') {this.value = '';}\" onblur=\"if (this.value == '') {this.value = ' Bitte Ihren Namen!';}\"";  
} 
else{  
$werBinIchValue = "value='".$werbinich."' onfocus=\"if (this.value == ' Bitte Ihren Namen!') {this.value = '';}\" onblur=\"if (this.value == '') {this.value = ' Bitte Ihren Namen!';}\""; 
}  
if($name==''){  
$mailValue ="value=' Bitte Ihre MailAdresse!' onfocus=\"if (this.value == ' Bitte Ihre MailAdresse!') {this.value = '';}\" onblur=\"if (this.value == '') {this.value = ' Bitte Ihre MailAdresse!';}\""; 
} 
else{  
$mailValue = "value='".$name."'onfocus=\"if (this.value == ' Bitte Ihre MailAdresse!') {this.value = '';}\" onblur=\"if (this.value == '') {this.value = ' Bitte Ihre MailAdresse!';}\"";  
}
if($aktion=='eingabe'){
ausgabe($name, $werbinich);
}

echo "<form name='formular' action='$PHP_SELF'>\n";
echo "bitte ihren namen <br />";
echo "<input type='text' name='werbinich' size='25' ". $werBinIchValue . " >\n"; 

echo "<br />bitte ihre mail <br />";
echo "<input type='text' name='name' size='25' ". $mailValue . "  >\n";
echo "<input type='hidden' name='aktion' value='eingabe' >\n";
echo "<input type='submit' value='los!'>\n";
echo "</form>\n";
}

function ausgabe($name,$werbinich){
$fp = fopen("namen.txt", "a+");
$name1 = "\n\n".$name;
$name2 = "\n".$werbinich;
$email = trim($name);
$string = trim($werbinich);    
if(!checkEmail($email)) {   
echo 'Invalid email address!';
}
else {
   if(($string == "Bitte Ihren Namen!") or ($string == "")) { 
    echo 'Bitte geben Sie Ihren Namen ein!';} 
        else {
	fputs($fp, $name1.$name2);fclose($fp);setcookie("laser",'logged', time()+3600); header('Location: http://www.xyz.de');}

}} ?>
</body></html>
<?php ob_end_flush(); ?>

Hoffe ob_start() ist übergreifend compatibel?!

Habe bei den Kommentaren im Manual zu ob_start() noch die Funktion gefunden um bei der Gelegenheit auch den Html Ausgabecode zu bereinigen wenn ich denn schon hier ob_start() nutze.

herzlichen dank
thomas
 
Zuletzt bearbeitet:
Hi

das umschreiben klingt schwerer als es ist.
Du musst einfach nur den PHPcode ausschneiden (strg+x) und dann vor die html klammer einfügen (strg+v).

Das hat allerdings nicht funktioniert - da sind dann doch zuviele echos drin die sofort auch einen Header an den Client schicken und dann gehts wieda nicht mit setcookie...........:mad:

aber danke trotzdem
grüße thomas
 
als Nachtrag:
durch die Bufferung mit ob_start() kann ich nun anstatt das dümliche meta refresh auch wieder das elegantere: header('Location: http://www.xyz.de'); nutzen!
Habs im Script oben geändert!!

Frage habe gelesen das ob_start() besser mit ob_end_flush() beendet werden sollte wg. möglicher Probleme unter Linux (?).

Hab es also ganz ans Ende des obigen Sripts gesetzt.
Weiss allerdings nicht genau ob es da Sinn macht - Hm - Geschadet hats aber ooch nicht........?

grüße thomas
 
Zurück