2011-01-14 9 views
0

Ich finde, dass der Sitzungswert jedes Mal zurückgesetzt wird, wenn ich das Formular absende. Das Snippet ist wie folgt:

<? php session_start(); ?> 
<html> 
<head> 
</head> 
<body> 
<?php 
if($_SESSION['idi']=="") 
{ 
$_SESSION['idi'] = $_GET['id6']; 
$_SESSION['class1'] = $_GET['class6']; 
$_SESSION['section1'] = $_GET['section6']; 
} 
echo $_SESSION['idi'].' '.$_SESSION['class1'].' '.$_SESSION['section1'].'<br>'; 
print session_id(); 
?> 
<form method="post" action=""> 
<table> 
<tr> 
    <td> <label> CLASS NAME </label> 
    <td><input type="text" name="class_name" value="<?php echo $_SESSION['class1'] ;?>"></td> 
</tr> 
<tr> 
    <td><label> SECTION </label> 
    <td><input type="text" name="section" value="<?php echo $_SESSION['section1'] ;?>"></td> 
</tr> 
<tr> 
    <td> 
     <input type="submit" value="UPDATE" name="update1" > 
    </td> 
</tr> 
</table> 
</form> 
<?php 
    if(isset($_POST['update1'])){ 
     $class_name = $_POST['class_name']; 
     $section = $_POST['section']; 
     update_data($_SESSION['idi'],$_POST['class_name'],$_POST['section']); 
     echo 'did='.$_SESSION['idi'].' class1='.$_SESSION['class1'].' section1='.$_SESSION['section1'].'<br>'; 
    } 

function update_data($id1,$class1,$section1) 
    { 
     echo'suresh <br>'; 
     echo $id1.' '.$class1.' '.$section1.'<br>'; 
     $dbc = mysqli_connect('localhost','root','','cce') 
        or die('Error connecting to MySQL server'); 

     $query = "SELECT * FROM class"; 
     $result = mysqli_query($dbc,$query) 
        or die("Error connecting to database1"); 

     //while($row = mysqli_fetch_array($result)) 
     //{ 
      echo'TEST<br>'; 
      $query="UPDATE class SET class_name='".$class1."', class_section='".$section1."' WHERE id = '".$id1."'"; 
      $result = mysqli_query($dbc,$query) 
        or die("Error connecting to database2"); 
      echo'TEST2<br>'; 
     //} 
     mysqli_close($dbc); 
    } 
?> 
</body> 
</html> 

Das Problem jedes Mal, dass ich das Formular abschicken, erwarte ich den gleichen Sitzungswert ausgedruckt zu sehen. Aber sobald ich einreichen getroffen, verschwindet der Wert und druckt nichts ... aber wenn ich Aktion MACHEN = „“ in Form dann jedes Mal, wenn ich senden Sie das Formular der Wert von $_SESSION['abc'] ist immer noch die gleichen, 99.

Warum ist das? Wird $_SERVER['PHP_SELF'] die Sitzung zurückgesetzt? Oder ist es irgendetwas in der Konfiguration?

+1

Sie müssen wirklich etwas Code schreiben (vielleicht die Form in Frage). Das heißt, die Verwendung von $ _SERVER ['PHP_SELF'] wird keine $ _SESSION-Variablen berühren, daher muss das Problem anderswo liegen. –

Antwort

0

Ihr Beispiel schließt nicht das <form> Tag - Schließen Sie das <form> Tag?

+0

Ich habe den kompletten Code jetzt..Ich habe – Vinay

0

Wenn ich das richtig lese, senden Sie das Formular an diese Seite, richtig? Und wenn es auf diese Seite zurückkommt, läuft es über session_start(); und startet die Sitzung pflichtbewusst neu. So lese ich zumindest this.

Sie könnten versuchen, Ihre session_start(); in das Innere Ihrer if Anweisung zu bewegen. Auf diese Weise wird die Sitzung nur neu gestartet, wenn diese bestimmte Sitzungsvariable nicht angezeigt wird.

Alternativ können Sie eine benannte Sitzung verwenden und diese über eine Cookie-, POST- oder GET-Variable weiterleiten.

+1

verwendet Das ist nicht, wie Sitzungen in PHP arbeiten. Sie müssen 'session_start()' ausführen, bevor Sie auf Sitzungsvariablen zugreifen können. – Mchl

+0

Ohne 'session_start' existiert das' $ _SESSION'-Array nicht. Aus dem PHP-Handbuch: "' session_start() 'erstellt eine Sitzung oder setzt [eine Sitzung] fort". –

+0

Hallo Kyle, aber dann funktioniert es, wenn ich action = "" im Formular tag mache – Vinay

3

Wenn Sie action="" verwenden, ist die URL, auf die das Formular umgeleitet wird, die genaue URL, die sich derzeit in der Adressleiste befindet. Wenn Sie jedoch $_SERVER['PHP_SELF'] verwenden, werden in der URL keine Variablen entfernt, sodass $ _GET ['id'] leer ist.

Auch sollte es sein echo $_SERVER['PHP_SELF']; oder echo "{$_SERVER['PHP_SELF']}";

1

PHP_SELF enthält keine GET-Variablen; Sie müssen sie explizit angeben (plus ein wenig die Anführungszeichen ändern):

<form action="<?php echo $_SERVER['PHP_SELF']."?id=".urlencode($_GET['id']); ?>" method="POST"> 
+0

Dank Matt, Aber warum funktioniert es, wenn ich Aktion haben = „“ in der von Tag ... Es funktioniert in diesem Fall .. – Vinay

+0

@Vinay weil Eine "" -Aktion übergibt das Formular an die exakt gleiche URL, in der es sich befindet, dh GET-Variablen und alle. Aber benutze etwas anderes als "", und du musst alles spezifizieren. Es ist einfach so, wie es funktioniert. – Matt

+0

Ich verstehe deinen Standpunkt. Die Problemumgehung ist in Ordnung. Aber meine wirkliche Sorge ist, warum die Sitzungsvariable zurückgesetzt wird ... – Vinay

0

PHP_SELF hat nichts mit Sitzungen zu tun. In Ihrem Code muss etwas nicht stimmen.

Was ich tun würde, ist:

$Value = ''; 
if(isset($_GET['myValue']) { 
    $Value = $_GET['myValue']; 
} 
if(!empty($_POST)&&isset($_POST['myValue']) { 
    //Do stuff here 
} 

<form action="<? php echo "$_SERVER['PHP_SELF']"; ?>" method="POST"> 
<input type="hidden" name="myValue" value="<?php echo $Value;?>" /> 
Verwandte Themen