$_SESSION - Inhalt wird nicht weitergegeben

prog-novice

Grünschnabel
Hallo, ich bin prog-novice und ein ziemlicher Anfänger beim Thema SESSIONS und nun ist bei mir folgendes Problem aufgetreten:
Ich habe ein Formular gemacht bei dem der User auf "weiter" klickt und auf der zweiten Seite nun seine Eingaben nocheinmal Prüfen kann, anschließen(wenn alles stimmt ;-) ) klickt er auf "fertig" und die Daten werden in die DB geschrieben. Alles mit SESSIONS natürlich.
Leider geht nun der Eintrag in die Datenbank nicht, das überprüfen der Daten geht einwandfrei, sonst alledings scheinen die $_SESSION['xyz'] beim letzten klicken leer zu sein, obwohl ich Sie ja vorher beim Prüfen auslesen konnte.
Nunja ich weiß nichtmehr weiter... Ich hoffe Ihr könnt helfen! :-)

P.S. die SESSION läuft über cookies

Hier mein Code:

//index.php
PHP:
<?
if($_GET['inc']=="test"){ session_start(); } ?>

//test.php
PHP:
$_SESSION['id'] = session_id();

$_SESSION['name'] = $_POST['name'];
$_SESSION['email'] = $_POST['email'];
$_SESSION['eintrag'] = $_POST['eintrag'];

if(!isset($_POST['weiter']) or ($_POST['fertig']))
{
    $daten = "Name: <input type=\"textfield\" name=\"name\" size=\"24\" maxlength=\"24\"><br>
                   Email: <input type=\"textfield\" name=\"email\" size=\"24\" maxlength=\"100\"><br>
                   Eintrag: <input type=\"textfield\" name=\"eintrag\" size=\"50\" maxlength=\"255\"><br>
                   <input type=\"submit\" name=\"weiter\" value=\"weiter\">";   
}

if(isset($_POST['weiter']))
{
   $daten= " Name: $_SESSION['name']<br>
                  Email: $_SESSION['email']<br>
                  Eintrag: $_SESSION['eintrag']<br><input type=\"submit\" name=\"fertig\" value=\"fertig\">";
}

if(isset($_POST['fertig']))
{
   $daten = "Danke f&uuml;r Ihren Eintrag!";

   mysql_query("insert into mytable ( name , email , eintrag ) values ( '"._SESSION['name']."' , '".$_SESSION['email']."' , '".$_SESSION['eintrag']."')");  
}

print "<form method=\"post\">
         <table width=\"500\" height=\"500\">
          <tr>
            <td>$daten</td>
           </tr>
         </table>
       </form>";
 
Steht auf jeder Seite [phpf]session_start[/phpf]? Dein Code ist etwas fehlerhaft, denn du weist den $_SESSION-Vars immer die $_POST-Vars zu, auch wenn die Prüfung durch den user schon vorgenommen wurde... Außerdem solltest du Daten, die vom User kommen, vor dem Eintragen in die Datenbank IMMER prüfen und ggf. escapen mit [phpf]mysql_real_escape_sting[/phpf], dazu SQL-Injections.
PHP:
if(!isset($_POST['weiter']) or ($_POST['fertig']))
{
    $daten = "Name: <input type=\"textfield\" name=\"name\" size=\"24\" maxlength=\"24\"><br>
                   Email: <input type=\"textfield\" name=\"email\" size=\"24\" maxlength=\"100\"><br>
                   Eintrag: <input type=\"textfield\" name=\"eintrag\" size=\"50\" maxlength=\"255\"><br>
                   <input type=\"submit\" name=\"weiter\" value=\"weiter\">";   
}

if(isset($_POST['weiter']))
{
$_SESSION['id'] = session_id();

$_SESSION['name'] = get_magic_quotes_gpc() > 0 ? $_POST['name'] : mysql_real_escape_string($_POST['name']);
$_SESSION['email'] = get_magic_quotes_gpc() > 0 ? $_POST['email'] : mysql_real_escape_string($_POST['email']);
$_SESSION['eintrag'] = get_magic_quotes_gpc() > 0 ? $_POST['eintrag'] : mysql_real_escape_string($_POST['eintrag']);
  $daten= " Name: $_POST['name']<br>
            Email: $_POST['email']<br>
            Eintrag:  $_POST['eintrag']<br><input type=\"submit\" name=\"fertig\" value=\"fertig\">";
}

if(isset($_POST['fertig']))
{
   $daten = "Danke f&uuml;r Ihren Eintrag!";

   mysql_query("insert into mytable ( name , email , eintrag ) values ( '".$_SESSION['name']."' , '".$_SESSION['email']."' , '".$_SESSION['eintrag']."')");  
}

print "<form method=\"post\">
         <table width=\"500\" height=\"500\">
          <tr>
            <td>$daten</td>
           </tr>
         </table>
       </form>";
 
Zuletzt bearbeitet:
Hi mAu,

ja denke ich dochmal oder, denn sobald die test.php includiert wird soll es ja session_start(); ausführen... oder geht das so nicht?

ah ja ups das hatte ich nur grade beim übertragen vergessen normalerweise steht da:

PHP:
if(isset($_POST['weiter']))
{
   // Session Zuweisung...
}

achja und die connection zur DB wird auch schon vorher aufgebaut ^^, hatte ich vergessen zu erwähnen(natürlich nicht vor session_start(); ).

dieverse Prüfungen hab ich jetzt erstmal weg gelassen, da ja noch nichtmal das einfache Script da bei mir funktioniert, beim fertigen Script kommen natürlich Sicherheitsvorkehrungen mit rein. ^^

Gruß prog-novice
 
Zuletzt bearbeitet:
Hm... Zeig mal den jetzigen Code... Wenn du obiges beachtet hast, sollten sich die Variablen eigentlich nicht einfach so leeren, wenn sie vorher schonmal gesetzt waren...
 
so ich hab's mal schnell noch getestet ob es an der if -abfrage in der index lag tut es aber nicht, und jetzt geht zumindest die Ausgabe auf der dritten Seite, ich teste noch schnell den DB Eintrag, danke schonmal, mAu! ^^

Edit: Jo wunderbar, DB-Eintrag geht auch, seltsame Geschichte das SESSION Zeugs. ^^"

...allerdings wundert mich schon warum es jetzt geht und vorher nicht ging. ?_?

ok hier das verwendete Script:

PHP:
$_SESSION['id'] = session_id();  //script version ohne index.php geht auch mit


if(isset($_POST['weiter'])) 
{ 
   $_SESSION['name'] = $_POST['name'];  
   $_SESSION['email'] = $_POST['email'];  
   $_SESSION['eintrag'] = $_POST['eintrag'];  
} 
if(!isset($_POST['weiter']) or ($_POST['fertig']))  
{  
    $daten = "Name: <input type=\"textfield\" name=\"name\" size=\"24\" maxlength=\"24\"><br>  
                   Email: <input type=\"textfield\" name=\"email\" size=\"24\" maxlength=\"100\"><br>  
                   Eintrag: <input type=\"textfield\" name=\"eintrag\" size=\"50\" maxlength=\"255\"><br>  
                   <input type=\"submit\" name=\"weiter\" value=\"weiter\">";     
}  

if(isset($_POST['weiter']))  
{  
   $daten= "Name: ".$_SESSION['name']."<br>  
                  Email: ".$_SESSION['email']."<br>  
                  Eintrag: ".$_SESSION['eintrag']."<br><input type=\"submit\" name=\"fertig\" value=\"fertig\">";  
}  

if(isset($_POST['fertig']))  
{  
   $daten = "Danke f&uuml;r Ihren Eintrag!<br><br>".$_SESSION['id']."<br>".$_SESSION['name'].$_SESSION['email'].$_SESSION['eintrag'];  //hab ich mal schnell zum testen hinzu gefuegt 

   require "dbselect.php";

   mysql_query("insert into mytable ( name , email , eintrag ) values ( '".$_SESSION['name']."' , '".$_SESSION['email']."' , '".$_SESSION['eintrag']."')");    

   
  }  

print "<form method=\"post\">  
         <table width=\"500\" height=\"500\">  
          <tr>  
            <td>$daten</td>  
           </tr>  
         </table>  
       </form>";
 
Zuletzt bearbeitet:
Zurück