php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2004

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.07.2004, 22:53  
Benutzer
 
Registriert seit: 11.06.2003
Beiträge: 64
Cytrix
Cytrix eine Nachricht über ICQ schicken
Standard Problem mit Sessions !!

Hi Leute,

Ich hab eine Seite (quest.php) mit einem Formular, dass jedes mal andere Fragen beinhaltet (immer eine Pro Seite). Ich will die Antwort des Formular will ich in die Session speichern, dass ich dannach die Antworten auswerten kann.
quest.php
Code:
//Speicherung der ergebnisse in die Session
$_SESSION[$_POST['num_a']] = $_POST[$_POST['num_a']];
nach dem letzten aufruf des Formulars geht auf eine andere Seite (auswertung.php)
Code:
//Ausgabe der Übergebenen Session
<?
session_start();
//Speicherung der letzen Variable in der Session
$_SESSION[$_SESSION['num']] = $_POST[$_SESSION['num']];

$num_a = 1;
echo 'Es wurden '.$_SESSION['num'].' fragen bearbeitet!';
while($num_a <= $_SESSION['num']) {
	echo '
'.$_SESSION[$num_a];
	$num_a++;
}
?>
Kann mir einer sagen warum die Variablen nicht gespeichert bleiben ??

MFG
Cytrix
__________________
fighting for peace is like fuking for virgianity
Cytrix ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.07.2004, 23:08  
Gast
 
Beiträge: n/a
Standard mh...

also wenn ich eine Variable in der session speichern will mache ich immer folgendes:

$antwort_der_frage = "Das Resultat lautet: 44 ";

if(!empty($antwort_der_frage))
{
session_register("antwort_der_frage");
}

grüessli us de schwiz
 
Alt 20.07.2004, 23:12  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Die Verwendung von session_register() wird nicht mehr empfohlen. Der Weg über $_SESSION ist die bessere Wahl.

Und du musst wohl noch was mehr Code zeigen (relevante Formularteile z.B.). Auf welcher PHP-Version testest du, wie ist session.use_trans_sid eingestellt? Startest du die Session vor jeder Registierung? Kommt die SID durch? Kommen die daten vom ersten zum zweiten Skript durch oder kommen sie nur am Ende nicht an?

Und, schau dir mal foreach an. Zum Testen eignet sich super folgende Funktion:
PHP-Code:
function show_session_data ()
{
    echo 
SID;
    echo <
pre>;
    
var_dump ($_SESSION);
    echo 
'</pre>';

Basti
Basti ist offline  
Alt 20.07.2004, 23:15  
Benutzer
 
Registriert seit: 11.06.2003
Beiträge: 64
Cytrix
Cytrix eine Nachricht über ICQ schicken
Standard

also so gibt er mir auf der nächsten seite jeweils das von der vorigen aber nicht das von der vorletzten!
Code:
$_SESSION[$_POST['num_a']] = $_POST[$_POST['num_a']];
echo '
'.$_SESSION['1'].$_SESSION['2'].$_SESSION['3'];
So lieferts gar nix!!
Code:
session_register($_POST[$_POST['num_a']]);
echo '
'.$_SESSION['1'].$_SESSION['2'].$_SESSION['3'];
irgendwie speicherts die Variable nicht !![/code]
__________________
fighting for peace is like fuking for virgianity
Cytrix ist offline  
Alt 20.07.2004, 23:28  
Benutzer
 
Registriert seit: 11.06.2003
Beiträge: 64
Cytrix
Cytrix eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von bbastix
Zum Testen eignet sich super folgende Funktion:
PHP-Code:
function show_session_data ()
{
    echo 
SID;
    echo <
pre>;
    
var_dump ($_SESSION);
    echo 
'</pre>';

Basti
Die versteh ich nich !?!? <pre> ??

Hmm das mit foreach() versteh ich auch nich ganz die $_POST[$_POST['num_a']] ist eine variable und hab den wert a - d .
__________________
fighting for peace is like fuking for virgianity
Cytrix ist offline  
Alt 20.07.2004, 23:40  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Das <pre> natürlich in Hochkommata setzen!

[foreach]

Du schreibst:
PHP-Code:
while($num_a <= $_SESSION['num']) {
   echo 
'
'
.$_SESSION[$num_a];
   
$num_a++;

Das geht mit foreach schöner:
PHP-Code:
foreach ($_SESSION['num'] as $value) {
    echo 
"
$value"
;
}

// oder, je nachdem, auch:

foreach ($_SESSION['num'] as $key => $value) {
    echo 
"
Der Wert von $key ist $value"
;

[Session-Problem]

Kann es sein, dass du die Felder des $_SESSION-Arrays jedesmal überschreibst?

Basti
Basti ist offline  
Alt 21.07.2004, 14:04  
Benutzer
 
Registriert seit: 11.06.2003
Beiträge: 64
Cytrix
Cytrix eine Nachricht über ICQ schicken
Standard

Ich Post ma das ganze script zur übersicht:
Code:
<?
session_start();
include('connect.inc.php');

//TESTVARIBLEN
$id = 1;

//AUSWAHL DER FRAGEN AUS DB QUEST
$sql = "SELECT * FROM quest WHERE id = '".$id."' LIMIT 1";
$result = mysql_query($sql, $conn);
	if ($result) {
		while ($myrow = mysql_fetch_array($result)) {
			$title = $myrow['title'];
			$t_db = $myrow['t_db'];
			$b_db = $myrow['b_db'];
		}
	}
			
//BESTIMMUNG DER VARIABLE $num (Anzahl der Fragen)			
$sql = "SELECT * FROM ".$t_db." ";
$result = mysql_query($sql, $conn);
	if ($result)
	{
		$num = mysql_num_rows($result);
		$_SESSION['num'] = $num;
	} else {
		echo '

Der angegebene Lehrbrief wurde nicht gefunden</p>';
	}
	

if (!isset($_POST['num_a'])) {
	$num_a = 1;
}

//Speicherung der ergebnisse in die Session
$_SESSION[$_POST['num_a']] = $_POST[$_POST['num_a']];
echo $_POST['num_a'].'
';
echo '
'.$_SESSION[$_POST['num_a']];

//Vor und Zurrück Schalter
if(isset($_POST["next"])) {
	$num_a = $_POST["num_a"] + 1;
}elseif(isset($_POST["back"])) {
	if ($_POST['num_a'] == 1) {
		$num_a = $_POST['num_a'];
	}else{
	$num_a = $_POST["num_a"] - 1;
	}
}

echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
	<html><head>
	<title>Fragebogen: '.$title.'</title>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
	<link href="style.css" rel="stylesheet" type="text/css">
	<script type="text/javascript" language="JavaScript" src="nork.js"></script>
	</head><body>'; 

$sql = "SELECT * FROM ".$t_db." WHERE id = '".$num_a."' LIMIT 1";
$result = mysql_query($sql, $conn);
while ($myrow = mysql_fetch_array($result)) {
echo '<h1>Selbstkontrollaufgaben: '.$title.'</h1>

Frage: '.$num_a.'/'.$num.'</p>';
if($num_a == $num) {				
echo '<form name="form1" method="post" action="test/test.php">';
}else{
echo '<form name="form1" method="post" action="">';
}
echo'	<input type="hidden" name="num_a" value="'.$num_a.'">
			<table width="100%"  border="0">
			<tr>
				<td>'.$num_a.') </td>
				<td colspan="3">'.$myrow["frage"].'</td>
			</tr>';

//BILD VORHANDEN ??
$sql2 = "SELECT * FROM ".$b_db." WHERE id = '".$num_a."' LIMIT 1";
$result2 = mysql_query($sql2, $conn);
if ($result2) {
	while ($myrow2 = mysql_fetch_array($result2)) {
		echo '	<tr>
					<td colspan="4"><div align="center">[img]'.$myrow2[[/img]</div></td>
				</tr>';
	}
}
			
echo		'<tr>
				<td width="4%">';
if($_SESSION[$num_a] == 'a') {				
	echo			'<div align="center"><input name="'.$num_a.'" type="radio" value="a" checked></div>';
}else{ 
	echo			'<div align="center"><input name="'.$num_a.'" type="radio" value="a"></div>';
}	
echo'		</td>
				<td width="46%">
					'.$myrow["aw_a"].'
				</td>
				<td width="4%">
					<div align="center"><input name="'.$num_a.'" type="radio" value="c"></div>
				</td>
				<td width="46%">
					'.$myrow["aw_c"].'
				</td>
			</tr>
			<tr>
				<td>
					<div align="center"><input name="'.$num_a.'" type="radio" value="b"></div>
				</td>
				<td>
					'.$myrow["aw_b"].'
				</td>
				<td>
					<div align="center"><input name="'.$num_a.'" type="radio" value="d"></div>
       			</td>
      			<td>
					'.$myrow["aw_d"].'
				</td>
     		</tr>
     		<tr>
       			<td colspan="2">
					<div align="left"><input name="back" type="submit" id="back" value="Vorherige Frage"></div>
				</td>';
if($num_a == $num) {				
echo ' 			<td colspan="2">
        			<div align="right"><input name="next" type="submit" id="next" value="Auswerten"></div>
      			</td>';
}else{
echo ' 			<td colspan="2">
        			<div align="right"><input name="next" type="submit" id="next" value="Nächste Frage"></div>
      			</td>';
}
echo'		</tr>
   		</table>
 	</form>';
}


echo '</body></html>';
?>
Also in dem Formular wird die Variable $_POST['num_a'] definiert(hidden field). Sie hat den Wert 1,2,3,4 wie $num_a selbst. Dann wird noch eine Vriable mit dem Namen $_POST['1'], $_POST['2'] ... definiert. Was ich machen will ist alle diese Variablen in je einer $_SESSION['1'], $_SESSION['2'],... zu speichern, dass ich sie auf der nächsten seite (test/test.php) alle wieder abrufen kann. Was mann auch machen könnte wär alles in einen Arry zu packen und es dann wieder auszulesen hab aber keine Ahnung wie mann das machen könnte !!
__________________
fighting for peace is like fuking for virgianity
Cytrix ist offline  
Alt 21.07.2004, 14:32  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Ich hab mir das Skript jetzt nicht näher angeschaut. Nur zu deiner letzten Frage:

Array per Hidden-Field weitergeben:
PHP-Code:
$array = array('irgendwas');
$string =  base64_encode(serialize($array));
//... $string als Value eines Hidden-Fields setzen 
Auslesen:
PHP-Code:
$array unserialize(base64_decode($_POST['dein_hidden_field'])); 
Um das Ganze sicher zu machen, speicherst du auf deinem Server einen Schlüssel (irgend eine Zeichenkette, quasi ein Passwort), hängst es an den base64-kodierten Hash an und ermittelst daraus mit md5() eine Prüfsumme. Diese Prüfsumme übergibst du dann auch als Hidden-Field und auf dem Server brauchst du nurnoch wieder deinen Schlüssel an den Hash hängen, und die Prüfsummen vergleichen.

Also etwa so:
PHP-Code:
$config['passphrase'] = '786ef26ac2386f3b32bd2789aff368fe';

$data base64_encode(serialize($dein_daten_array));
$md5sum md5($data $config['passphrase']);

// ...beide Werte je in ein Hidden-Field
// dann zum Auslesen:

$data $_POST['data'];
if (
$_POST['md5sum'] != md5($data $config['passphrase'])) {
    die (
'Pfoten weg!');
} else {
    
$dein_daten_array unserialize(base64_decode($data));

...ungetestet

Basti
Basti ist offline  
Alt 21.07.2004, 14:59  
Benutzer
 
Registriert seit: 11.06.2003
Beiträge: 64
Cytrix
Cytrix eine Nachricht über ICQ schicken
Standard

Hmm wenn ichs mit einem Arrray machen will, muss ich jedesmal nur ein weiters element in der array schreiben. Also hole ich mir die Variable via Post aus dem Formular und schreibt sreibt sie in den Array der in der Session gespeichert wird ! geht das nicht ??

Code:
//Speicherung der ergebnisse in die Session

if(isset($_POST['num_a'])) {
	$_SESSION['ant'] = array($_POST[$_POST['num_a']]);
}else{
	$myarray = $_SESSION['ant'];
	$temp = $_POST[$_POST['num_a']];
	array_push($myarray, $temp);
	$_SESSION['ant'] = $myarray;
	echo '
'.$myarray[0].'
'.$myarray[1].'
'.$myarray[2].'
'.$myarray[3];
}
Hmm, du gehst da mehr auf den sicherheitsaspeckt ein ich hab ma probiert das die daten bei jedem durchlauf des Formulars in einen Array geschrieben werden. Leider bekomm ich jetzt die Fehlermeldung:
Code:
Warning: array_push(): First argument should be an array in /var/www/OLD/fragen2/quest.php on line 42
__________________
fighting for peace is like fuking for virgianity
Cytrix ist offline  
Alt 21.07.2004, 23:18  
Benutzer
 
Registriert seit: 11.06.2003
Beiträge: 64
Cytrix
Cytrix eine Nachricht über ICQ schicken
Standard

Jetzt hab ichs !! So funktionierts !!
Code:
//Speicherung der ergebnisse in die Session
if(!isset($_SESSION['ant'])) {
	$_SESSION['ant'] = array($_POST[$_POST['num_a']]);
}else{
	$myarray = $_SESSION['ant'];
	$temp = $_POST[$_POST['num_a']];
	array_push($myarray, $temp);
	$_SESSION['ant'] = $myarray;
}
__________________
fighting for peace is like fuking for virgianity
Cytrix ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Sicherheitsfrage mit Sessions - Problem mit Intellitamper Leibi PHP-Fortgeschrittene 26 03.07.2008 12:38
Sessions Problem StephenKing PHP Tipps 2008 3 16.10.2007 08:30
sessions problem 022.9 PHP Tipps 2006 5 19.06.2006 18:13
problem bei sessions in komb. m. cookies. header umgehen? Promaetheus PHP Tipps 2006 10 02.05.2006 15:52
Ewiges Problem mit den Sessions / Warenkorb max-dhom PHP Tipps 2006 12 13.04.2006 18:04
Cookies, Sessions, Login-Fehler PHP Tipps 2006 1 23.03.2006 12:59
Sessions Problem Mehrseitiges Formular PHP Tipps 2006 6 02.02.2006 18:59
[Erledigt] Riesiges Problem mit Sessions PHP Tipps 2005 3 30.04.2005 01:47
Problem bei einer If-Abfrage mit Sessions maximus PHP Tipps 2005 12 30.04.2005 01:36
Problem mit Sessions seit Upgrade auf PHP 4.3.10 PHP Tipps 2005 7 09.03.2005 01:29
Problem mit Sessions unter PHP 4.3.10 PHP Tipps 2005 2 22.02.2005 23:14
Problem mit Sessions PHP Tipps 2005 2 10.02.2005 11:57
Proble mit Sessions PHP Tipps 2005 7 07.02.2005 17:42
Problem mit "Keksen" bei Sessions? PHP-Fortgeschrittene 4 17.09.2004 00:05
PHP Serverpfad Problem mit Sessions PHP Tipps 2004 2 05.08.2004 18:56


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.