power-box.de
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 03.12.2008, 02:18   #1
TP-Supporter
 
Benutzerbild von Sascha79
 
Registriert seit: Jul 2008
Ort: Tübingen
Sascha79 bringt sich richtig einSascha79 bringt sich richtig ein

Problem mit Session


Hallo Leute,

bin wieder mal am üben und habe da folgendes Problemchen. Ich habe ein Form in dem die Eingaben validiert werden . Wenn da nun ein Feld nicht korrekt ausgefüllt wurde wird eine Fehlermeldung ausgegeben und genau dieses Feld wird dann in der Session nicht mehr übergeben. Woran könnte das liegen??
Hier mal der Quelltext
PHP-Code:
<?php

/*******************************
 *
 * SESSION STARTEN
 *
 ***********************************/

// Session starten 
session_start(); 

// Prüfen ob der Benutzer angemeldet ist 
if (!$_SESSION['angemeldet']) 

    
// Zum Login umleiten 
    
header'location: login_fortgeschritten.php' ); 
    exit; 


// Abmelden, Cookie löschen und zum Login umleiten 
if ($_GET['keks'] == 'loeschen'

    
setcookie'UserLogin'''time()-3600 ); 
    
session_destroy(); 
    
header'location: login_fortgeschritten.php' ); 
    exit;
}    
    
//Session registrieren
session_register("anfrage");
session_register("anrede");
session_register("name");
session_register("nachname");
session_register("email");
session_register("tel");
session_register("strasse");
session_register("plz");
session_register("stadt");
session_register("land");

session_register("anzahl_er");
session_register("anzahl_ki");

session_register("ankunft_t");
session_register("ankunft_m");
session_register("ankunft_j");

session_register("abreise_t");
session_register("abreise_m");
session_register("abreise_j");


/****************************************
 *
 * FUNKTION HOLEN UND POSTVARIABLEN AUFARBEITEN
 *
 *********************************************/    


//funktion zur prüfung holen
require("functionen/function_1.php");


//Postvariablen aufarbeiten
if(!empty($_POST))
{
$submit sicherstellen($_POST['submit']);
$weiter sicherstellen($_POST['weiter']);

$anfrage sicherstellen($_POST['anfrage']);
$anrede sicherstellen($_POST['anrede']);
$name sicherstellen($_POST['name']);
$nachname sicherstellen($_POST['nachname']);
$email sicherstellen($_POST['email']);
$tel sicherstellen($_POST['telefon']);
$strasse sicherstellen($_POST['strasse']);
$plz sicherstellen($_POST['PLZ']);
$stadt sicherstellen($_POST['stadt']);
$land sicherstellen($_POST['land']);

$anzahl_er sicherstellen($_POST['anzahlerwachsene']);
$anzahl_ki sicherstellen($_POST['anzahlkinder']);

$ankunft_t sicherstellen($_POST['ankunfttag']);
$ankunft_m sicherstellen($_POST['ankunftmonat']);
$ankunft_j sicherstellen($_POST['ankunftjahr']);

$abreise_t sicherstellen($_POST['abreisetag']);
$abreise_m sicherstellen($_POST['abreisemonat']);
$abreise_j sicherstellen($_POST['abreisejahr']);

}

if(isset(
$_POST['submit']))
{
  
  
//Wenn weiter leer ist oder kleiner bzw. grösser als 1
  //Vorgang abbrechen
  
if(empty($weiter) || !is_numeric($weiter) || strlen($weiter)<>1): die("Es liegt ein Fehler vor. Der Vorgang wurde abgebrochen!");
   
$weiter 0;
  endif;
  
  
//Wenn beide Radiobuttons Anfrage leer sind, liegt ein versuchter Angriff vor
  //Vorgang abbrechen
  
if(empty($anfrage)): die("Es liegt ein Fehler vor. Der Vorgang wurde abgebrochen!");
   
$weiter 0;
  endif;
  
  
//Wenn Anrede leer oder numerisch
  //Fehler ausgeben
  
if(empty($anrede) || is_numeric($anrede)):
   
$weiter 0;
   
$fehler "<p>Bitte wählen Sie eine Anrede!</p>";
  endif;
  
  
//Wenn Name leer, weniger als 2 Ziffern oder numerisch
  //Fehler ausgeben
  
if(empty($name) || is_numeric($name) || strlen($name)<2):
   
$weiter 0;
   
$fehler .= "<p>Bitte geben Sie Ihren Namen an!</p>";
   
$err[0] = true;
  endif;
  
  
//Wenn Nachname leer, weniger als 2 Ziffern oder numerisch
  //Fehler ausgeben
  
if(empty($nachname) || is_numeric($nachname) || strlen($nachname)<2):
   
$weiter 0;
   
$fehler .= "<p>Bitte geben Sie Ihren Nachnamen an!</p>";
   
$err[1] = true;
  endif;
  
  
//Wenn Email falsche Eingabe
  //Fehler ausgeben
  
if(!empty($email)):
    if(!
check_email($email)):
     
$weiter 0;
     
$fehler .= "<p>Bitte überprüfen Sie Ihre Email-Adresse!</p>";
     
$err[2] = true;
    endif;
  endif;
  
  
//Wenn Telefon leer oder nichtnumerisch
  //Fehler ausgeben
  
if(empty($tel)):
   
$weiter 0;
   
$fehler .= "<p>Bitte geben Sie Ihre Telefonnummer an!</p>";
   
$err[3] = true;
  elseif(!
preg_match("/^[0-9 \(\)\-\/]{7,}$/"$tel)):
   
$weiter 0;
   
$fehler .= "<p>$tel ist keine Telefonnummer!</p>";
   
$err[3] = true;
  endif;
  
  
//Wenn Strasse leer oder weniger als 2 Ziffern oder numerisch
  //Fehler ausgeben
  
if(empty($strasse) || is_numeric($strasse) || strlen($strasse)<4):
   
$weiter 0;
   
$fehler .= "<p>Bitte geben Sie eine Strasse an!</p>";
   
$err[4] = true;
  endif;
  
  
//Wenn PLZ leer, nichtnumerisch oder weniger oder mehr als 5 Stellen hat
  //Fehler ausgeben
  
if(empty($plz) || strlen($plz)<>5):
   
$weiter 0;
   
$fehler .="<p>Bitte geben Sie eine PLZ an!</p>";
   
$err[5] = true;
  elseif(!
is_numeric($plz)):
   
$weiter 0;
   
$fehler .= "<p>$plz ist keine PLZ!</p>";
   
$err[5] = true;
  endif;
  
  
//Wenn Stadt leer, numerisch oder weniger als 2 Ziffern hat
  //Fehler ausgeben
  
if(empty($stadt) || is_numeric($stadt) || strlen($stadt)<2):
   
$weiter 0;
   
$fehler .= "<p>Bitte geben Sie Ihren Wohnort an!</p>";
   
$err[6] = true;
  endif;
  
  
//Wenn Land leer oder numerisch
  //Fehler ausgeben
  
if(empty($land) || is_numeric($land)):
   
$weiter 0;
   
$fehler .= "<p>Bitte geben Sie ein Land an!</p>";
   
$err[7] = true;
  endif;
  
  if(
$weiter == 1):
  
header('location: reise_form_2.php');
  endif;
  
}  
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Formular</title>
<link rel="stylesheet" type="text/css" href="css/reiseform.css">
</head>

<body>
<div id="container">
<?php
//Monate für for-Schleife in einem Array sammeln
$monate = array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");


if(isset(
$fehler))
{
  echo 
$fehler;
}  
?>

<form id="formular" name="formular" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">

 <fieldset>
  <legend>Reservierung / Anfrage</legend>
  
   <div id="reihe">
    <label class="left_label" for="Anfrage">Anfrage:</label>
    <input type="radio" name="anfrage" id="anfrage_1" value="Anfrage" 
    <?php echo $_POST['anfrage'] == 'Anfrage' 'checked="checked"' ''; if(empty($_POST)) echo 'checked="checked"'?> />
  </div>
  
  <div id="reihe">    
    <label class="left_label" for="Reservierung">Reservierung:</label>
    <input type="radio" name="anfrage" id="anfrage_2" value="Reservierung"
    <?php echo $_POST['anfrage'] == 'Reservierung' 'checked="ckecked"' ''?> />
  </div>    
  
  <div id="reihe">
    <label class="left_label" for="Anrede">Anrede</label>
     <select id="anrede" name="anrede">
     <option value="Herr"<?php echo $_POST['anrede'] == 'Herr' 'selected="selected"' ''?>>Herr</option>
     <option value="Frau"<?php echo $_POST['anrede'] == 'Frau' 'selected="selected"' ''?>>Frau</option>
     </select>
  </div>     
    
  <div id="reihe">    
    <label class="left_label" for="Name">Name:</label>
    <input type="text" id="name" name="name" value="<?php echo $_POST['name']; ?><?php if(isset($err[0])) echo 'class="fehler"' ?> />
  </div>    
  
  <div id="reihe">
    <label class="left_label" for="Nachname">Nachname:</label>
    <input type="text" id="nachname" name="nachname" value="<?php echo $_POST['nachname']; ?><?php if(isset($err[1])) echo 'class="fehler"' ?> />
  </div>
  
  <div id="reihe">    
    <label class="left_label" for="Email">Email:</label>
    <input type="text" id="email" name="email" value="<?php echo $_POST['email']; ?><?php if(isset($err[2])) echo 'class="fehler"' ?> />
  </div>
  
  <div id="reihe">    
    <label class="left_label" for="Telefon">Telefon:</label>
    <input type="text"  id="telefon" name="telefon" value="<?php echo $_POST['telefon']; ?><?php if(isset($err[3])) echo 'class="fehler"' ?> />
  </div>    
    
  <div id="reihe">    
    <label class="left_label" for="Strasse">Strasse:</label>
    <input type="text" id="strasse" name="strasse" value="<?php echo $_POST['strasse']; ?><?php if(isset($err[4])) echo 'class="fehler"' ?> />
  </div>    
    
  <div id="reihe">    
    <label class="left_label" for="PLZ">PLZ:</label>
    <input type="text" id="PLZ" name="PLZ" maxlength="5" value="<?php echo $_POST['PLZ']; ?><?php if(isset($err[5])) echo 'class="fehler"' ?>/>
  </div>    

  <div id="reihe">    
    <label class="left_label" for="Stadt">Stadt:</label>
    <input type="text" id="stadt" name="stadt" value="<?php echo $_POST['stadt']; ?><?php if(isset($err[6])) echo 'class="fehler"' ?>/>
  </div>
    
  <div id="reihe">    
    <label class="left_label" for="Land">Land:</label>
    <select id="land" name="land" <?php if(isset($err[7])) echo 'class="fehler"' ?>>
    <option value="Deutschland" <?php echo $_POST['land'] == 'Deutschland' 'selected="selected"' ''?>>Deutschland</option>
    <option value="Österreich" <?php echo $_POST['land'] == 'Österreich' 'selected="selected"' ''?>>Österreich</option>
    <option value="Schweiz" <?php echo $_POST['land'] == 'Schweiz' 'selected="selected"' ''?>>Schweiz</option>
    </select>
  </div>
 </fieldset>    
 
 
 <fieldset>
  <legend>Personen / Anreise / Abreise</legend>
  
  <div id="reihe">
    <label class="left_label" for="Anzahlerwachsene">Anzahl Erwachsene:</label>
    <select id="anzahlerwachsene" name="anzahlerwachsene">
    <?php for ($i=1$i<=20$i++) 
    { 
          echo 
'<option value="'.$i.'" ';
          echo 
$_POST['anzahlerwachsene'] == $i 'selected="selected"' '';
          echo 
'>'.$i.'</option>';
    }      
    
?>
    </select>
  </div>    
    
  <div id="reihe">    
    <label class="left_label" for="Anzahlkinder">Anzahl Kinder:</label>
    <select id="anzahlkinder" name="anzahlkinder">
    <?php for ($i=0$i<=20$i++) 
    { 
         echo 
'<option value="'.$i.'" ';
         echo 
$_POST['anzahlkinder'] == $i 'selected="selected"' '';
         echo 
'>'.$i.'</option>';
    }
    
?>     
    </select>
  </div>    
      
  <div id="reihe">    
    <label class="left_label" for="Anreise">Anreise:</label>
  </div>    
    
  <div id="reihe">    
    <label for="Ankunftstag">Tag:</label>
     <select name="ankunfttag" id="ankunfttag">
     <?php for ($i=1$i<=31$i++) 
     { 
         echo 
'<option value="'.$i.'" ';
         echo 
$_POST['ankunfttag'] == $i 'selected="selected"' '';
         echo 
'>'.$i.'</option>';
     }
     
?>
     </select>
        
    <label for="Akunftsmonat">Monat:</label>    
    <select id="ankunftmonat" name="ankunftmonat">
    <?php for ($i=0$i count($monate); $i++) echo "<option>$monate[$i]</option>"?>
    </select>
          
    <label for="Ankunftsjahr">Jahr:</label>      
    <select id="ankunftjahr" name="ankunftjahr">
       <?php for ($i=2009$i<=2012$i++) 
    { 
        echo 
'<option value="'.$i.'" ';
        echo 
$_POST['ankunftjahr'] == $i 'selected="selected"' '';
        echo 
'>'.$i.'</option>';
    }
    
?>
    </select>
  </div>    
    
  <div id="reihe">    
    <label class="left_label" for="Abreise">Abreise:</label>
  </div>    
    
  <div id="reihe">    
    <label for="Abreisetag">Tag:</label>
     <select id="abreisetag" name="abreisetag">
     <?php for ($i=1$i<=31$i++) 
     { 
         echo 
'<option value="'.$i.'" ';
         echo 
$_POST['abreisetag'] == $i 'selected="selected"' '';
         echo 
'>'.$i.'</option>';
     }
     
?>
     </select>
     
    <label for="Abreisemonat">Monat:</label>
    <select name="abreisemonat" id="abreisemonat">
   <?php for ($i=0$i count($monate); $i++) echo "<option>$monate[$i]</option>"?> 
    </select>
    
    <label for="Abreisejahr">Jahr:</label>
    <select name="abreisejahr" id="abreisejahr">
    <?php for ($i=2009$i<=2012$i++) 
    { 
       echo 
'<option value="'.$i.'" ';
       echo 
$_POST['abreisejahr'] == $i 'selected="selected"' '';
       echo 
'>'.$i.'</option>';
    }
    
?>
    </select>
  </div>
 </fieldset>    
  
     <input type="submit" name="submit" id="submit" value="weiter" />
     <input type="hidden" name="weiter" value="1" />

</form>
</div><!--end container-->
</body>
</html>
EDIT
Da ich noch Anfänger bin aber guten und vor allem richtigen php-code schreiben möchte, freue ich mich über jede Kritik. Danke euch.
__________________
Das Leben ist schön -
Lehren ist die schönste Methode zu lernen.
Sascha79 ist offline   Mit Zitat antworten


Alt 03.12.2008, 10:30   #2
TP-Moderator
 
Benutzerbild von Rizzo
 
Registriert seit: Aug 2004
Ort: Kaiserslautern
Rizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine User
Moin,

session_register ist veraltet und soll ausdrücklich nicht mehr benutzt werden. (siehe gelbe Kästen in der Doku zur Funktion)
Rizzo ist gerade online   Mit Zitat antworten
Alt 03.12.2008, 15:32   #3
TP-Supporter
 
Benutzerbild von Sascha79
 
Registriert seit: Jul 2008
Ort: Tübingen
Sascha79 bringt sich richtig einSascha79 bringt sich richtig ein
Auch moin,

habe mir verschiedene Tuts zu dem Thema angeschaut unter anderem auch das hier . Aber habe schon gemerkt man muss wahnisinnig auf die Aktualität der Tuts achten. Dann versuch ich die Session mal mit superglobalen weiterzugeben. Danke
__________________
Das Leben ist schön -
Lehren ist die schönste Methode zu lernen.
Sascha79 ist offline   Mit Zitat antworten
Alt 04.12.2008, 06:59   #4
TP-Supporter
 
Benutzerbild von Sascha79
 
Registriert seit: Jul 2008
Ort: Tübingen
Sascha79 bringt sich richtig einSascha79 bringt sich richtig ein
So nun habe ich mich nochmals informiert und weiter mit Session beschäftigt.
Nun habe ich aber das Problem, das der Sumitbutton zweimal betätigt werden muss um auf die nächste Seite zu gelangen. Nach dem ersten Betätigen des Buttom wird aus dem Form ein riesengrosser Hyperlink gemacht. Also das heist ich kann für das zweite mal submit betätigen auch irgendwo ins Form klicken. Ich habe es auch schon mit "header" versucht. Aber ich denke das war ein schlechter Versuch, da ich die SID in der URL nicht übergeben wird!

Die Session wird hiermit übergeben.
PHP-Code:
echo "<a href=\"reise_form_2.php?".htmlspecialchars(SID)."\">\n"
Aber auch hier nochmal das ganze Script.
PHP-Code:
<?php

/*******************************
 *
 * SESSION 
 *
 ***********************************/
//SessionID integrieren
ini_set('session.use_trans_sid'1);

//Session name und id setzen
    
session_name();
    
session_id();

// Session starten 
//Cookie wird gesetzt
//Datei wird auf dem Server erzeugt
    
session_start(); 

// Cookie vernichten 
    
setcookie(session_name(), ""time()-3600);
    
/*********************************************
 *
 * FUNKTION HOLEN UND POSTVARIABLEN AUFARBEITEN
 *
 *********************************************/    

//funktion zur prüfung holen
require("functionen/function_1.php");

//Postvariablen aufarbeiten
if(!empty($_POST))
{
  
$submit sicherstellen($_POST['submit']);
  
$weiter sicherstellen($_POST['weiter']);

  
$anfrage sicherstellen($_POST['anfrage']);
  
$anrede sicherstellen($_POST['anrede']);
  
$name sicherstellen($_POST['name']);
  
$nachname sicherstellen($_POST['nachname']);
  
$email sicherstellen($_POST['email']);
  
$tel sicherstellen($_POST['telefon']);
  
$strasse sicherstellen($_POST['strasse']);
  
$plz sicherstellen($_POST['PLZ']);
  
$stadt sicherstellen($_POST['stadt']);
  
$land sicherstellen($_POST['land']);

  
$anzahl_er sicherstellen($_POST['anzahlerwachsene']);
  
$anzahl_ki sicherstellen($_POST['anzahlkinder']);

  
$ankunft_t sicherstellen($_POST['ankunfttag']);
  
$ankunft_m sicherstellen($_POST['ankunftmonat']);
  
$ankunft_j sicherstellen($_POST['ankunftjahr']);

  
$abreise_t sicherstellen($_POST['abreisetag']);
  
$abreise_m sicherstellen($_POST['abreisemonat']);
  
$abreise_j sicherstellen($_POST['abreisejahr']);
}

//Sessionvariablen aufarbeiten
  
$_SESSION['anfrage'] = $anfrage;
  
$_SESSION['anrede'] = $anrede;
  
$_SESSION['name'] = $name;
  
$_SESSION['nachname'] = $nachname;
  
$_SESSION['email'] = $email;
  
$_SESSION['telefon'] = $tel;
  
$_SESSION['strasse'] = $strasse;
  
$_SESSION['PLZ'] = $plz;
  
$_SESSION['stadt'] = $stadt;
  
$_SESSION['land'] = $land;

  
$_SESSION['anzahlerwachsene'] = $anzahl_er;
  
$_SESSION['anzahlkinder'] = $anzahl_ki;

  
$_SESSION['ankunfttag'] = $ankunft_t;
  
$_SESSION['ankunftmonat'] = $ankunft_m;
  
$_SESSION['ankunftjahr'] = $ankunft_j;

  
$_SESSION['abreisetag'] = $abreise_t;
  
$_SESSION['abreisemonat'] = $abreise_m;
  
$_SESSION['abreisejahr'] = $abreise_j;
    
     
/***************************************************
 *
 * AFFENFORMULAR INHALTE DES FORMS PRÜFEN
 *
 ******************************************************/

if(isset($_POST['submit']))
{

  
//Wenn weiter leer ist oder kleiner bzw. grösser als 1
  //Vorgang abbrechen
  
if(empty($weiter) || !is_numeric($weiter) || strlen($weiter)<>1): die("Es liegt ein Fehler vor. Der Vorgang wurde abgebrochen!");
   
$weiter 0;
  endif;
  
  
//Wenn beide Radiobuttons Anfrage leer sind, liegt ein versuchter Angriff vor
  //Vorgang abbrechen
  
if(empty($anfrage)): die("Es liegt ein Fehler vor. Der Vorgang wurde abgebrochen!");
   
$weiter 0;
  endif;
  
  
//Wenn Anrede leer oder numerisch
  //Fehler ausgeben
  
if(empty($anrede) || is_numeric($anrede)):
   
$weiter 0;
   
$fehler "<p>Bitte wählen Sie eine Anrede!</p>";
  endif;
  
  
//Wenn Name leer, weniger als 2 Ziffern oder numerisch
  //Fehler ausgeben
  
if(empty($name) || is_numeric($name) || strlen($name)<2):
   
$weiter 0;
   
$fehler .= "<p>Bitte geben Sie Ihren Namen an!</p>";
   
$err[0] = true;
  endif;
  
  
//Wenn Nachname leer, weniger als 2 Ziffern oder numerisch
  //Fehler ausgeben
  
if(empty($nachname) || is_numeric($nachname) || strlen($nachname)<2):
   
$weiter 0;
   
$fehler .= "<p>Bitte geben Sie Ihren Nachnamen an!</p>";
   
$err[1] = true;
  endif;
  
  
//Wenn Email falsche Eingabe
  //Fehler ausgeben
  
if(!empty($email)):
    if(!
check_email($email)):
     
$weiter 0;
     
$fehler .= "<p>Bitte überprüfen Sie Ihre Email-Adresse!</p>";
     
$err[2] = true