"We are back" « oc.at

php session, variablen übergeben bzw in session verfügbar

fenster 02.12.2004 - 11:59 4837 26
Posts

fenster

Banned by Moderators
Registered: Sep 2002
Location: xxxy
Posts: 187
hallo

habe da folgendes prob.

habe
_____________________________
index.php
mit
session_start();
und der $variable1 und $variable2
________________________________

dann habe ich
_____________________________
login.php
mit
session_start();
in login.php sollten die variablen
$variable1 und $variable2 übergeben sein
dh.: der inhalt soll verfügbar sein und sie müssen
ansprechbar sein

jetzt kommt die $variable3 dazu
__________________________________________________

alle 3 variablen kommen dann in das file
verarbeiten.php
session_start();
$variable1
$variable2
$variable3

in verarbeiten php brauche ich alle drei variablen
diese werden dann dort weiterverabeitet
zb.: ausgegeben oder in eine mysql datenbank eingetragen
_________________________________________________________


wie muss ich das jetzt anstellen
dass ich alle variablen in
verarbeiten.php3 bekomme ???????????????????


gruß
fenster

hausi181

Bloody Newbie
Registered: Nov 2004
Location: OÖ
Posts: 48
du bist schon auf dem richtigen weg. eine wichtige funktion fehlt allerdings noch und zwar musst du die session-variablen registrieren.

dies funktioniert mit der funktion session_register("variable1") ...

du musst jede variable registrieren, danach kannst du von überall aus auf diese variablen zugreifen, sowie auf eine globale variable.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25538
$_SESSION['varname'] = varwert ist imo schöner. bis auf superglobals würd ich auf globale variablen eher verzichten. umso weniger desto besser.

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
Zitat von mat
bis auf superglobals würd ich auf globale variablen eher verzichten. umso weniger desto besser.

register_globals sollte aus Sicherheitsgründen sowieso deaktiviert sein, und per POST/GET übergebene Parameter immer aus den superglobals $_POST, $_GET oder (funktioniert für beides) $_REQUEST ausgelesen werden.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25538
Zitat von FMFlash
register_globals sollte aus Sicherheitsgründen sowieso deaktiviert sein, und per POST/GET übergebene Parameter immer aus den superglobals $_POST, $_GET oder (funktioniert für beides) $_REQUEST ausgelesen werden.
ich meinte eher innerhalb eines scripts.. über request ist natürlich noch :bash:iger.

Zitat
Wenn Sie wollen, dass ihr Script unabhängig von der Einstellung von register_globals funktioniert, müssen Sie stattdessen das Array $_SESSION verwenden, weil $_SESSION-Einträge automatisch registriert werden. Wenn Sie in Ihrem Script session_register() verwenden, funktioniert es nicht in Umgebungen, in denen die PHP-Anweisung register_globals deaktiviert ist.
grade gesehen.. also: full ack @fmflash

fenster

Banned by Moderators
Registered: Sep 2002
Location: xxxy
Posts: 187
hallo
ich mache nämlich als schulprojekt einen warenkorb
nur zur info
aber kenn mich nicht so gut mit der ganzen session geschichte aus

das würde mal funzen
das seht ganz oben in der seite index.htm
<?php
session_start();
session_register("artnr");

?>

und in der login.php ist die
echo "$artnr <br>";

dann verfügbar


aber ich habe schon wieder ein prob. !!!

die $artnr wird von einer sqldatenbank dynamisch
mit formular ausgegeben
Code: PHP
 // * Shopdaten mit Bestellfunktion ausgeben *************
	 
	 for($i=0;$i<=$Anzahl-1;$i++)
	   {
		   $artnr         =mysql_result($Resultat,$i,artnr);
			 $hersteller    =mysql_result($Resultat,$i,hersteller);
			 $name          =mysql_result($Resultat,$i,name);
			 $beschreibung  =mysql_result($Resultat,$i,beschreibung);
			 $bild          =mysql_result($Resultat,$i,bild);
			 $preis         =mysql_result($Resultat,$i,preis);
			 
			 echo "<form name='' method='get' action='warenkorb.php'>";
			 echo "<tr><td class='text1'>$artnr                        </td>
			           <td class='text1'>$hersteller                   </td>
					  		 <td class='text1'>$name                         </td>
			           <td class='text1'>$beschreibung                 </td>
								 <td ><img src=  ' $bild' width='60' height='60'></td>
								 <td class='text1'>$preis                        </td>
								     <input type='hidden' name='artnr'          value='$artnr'> 
								 <td><input type='text'   name='menge' size='2' value='1'>        </td>
								 <td><input type='submit' name='Bestellung'     value='Bestellen'></td>
								 
			       </form></tr>";				 
			
	  }	 
	 
  echo "</table>";



und jetzt habe ich in der $artnr immer den wert des letzten artikels
der liste drinnen

und nicht den den ich will wenn ich auf bestellen klicke
wer kann mir weiter helfen
???????



gruß
fenster
Bearbeitet von watchout am 02.12.2004, 22:01

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
Zitat von fenster
hallo
ich mache nämlich als schulprojekt einen warenkorb
nur zur info
aber kenn mich nicht so gut mit der ganzen session geschichte aus

Es ist im Grunde ganz einfach: Du kannst in jedem deiner Skripten in der die Session mit session_start () initialisiert wurde (Achtung: Vorher keine Ausgaben machen da sonst der für die session passende http header nicht mehr gesendet werden kann -> Fehlermeldung) auf die Superglobale (= überall verfügbare) Variable $_SESSION zugreifen wie auf jede andere auch.

Willst du dir also die Variable $var für zukünftige Skripten (die in der selben Session ausgeführt werden, also grob gesagt pro user) merken kannst du sie dir zb so in die Session speichern: $_SESSION["var"] = $var;

Zu jedem späteren Zeitpunkt (sofern die Session noch besteht und initialisiert wurde) kannst du genauso auf diesen gemerkten Wert wieder zugreifen: $var = $_SESSION["var"];

PS: <tr> und <td> sind child-elemente von <table>, nicht von <form>, dir fehlt also der eigentliche table ...

<form ....>
<table ...>
<tr>
<td>
</td>
</tr>
</table>
</form>

PPS: Verwende für forms _immer_ POST. GET ist nicht nur unschön sondern führt früher oder später zu Problemen (die max URI Länge ist nicht besonders groß). Nur für links darfs ein get sein ;)

Add:
Es wäre vielleicht nicht schlecht wenn du die query hier posten würdest, denn wenn du die Resultate als assoc gelesen hast, solltest du zumindest " " bei der Positionsangabe benutzen:

Aus mysql_result($Resultat,$i,artnr) wird mysql_result($Resultat,$i,"artnr");

Ist vielleicht Geschmackssache, aber statt mysql_result würde ich mir an deiner Stelle mal mysql_fetch_assoc, mysql_fetch_row und/oder mysql_fetch_array anschauen. Die Doku auf php.net gibt durchaus was her. :)
Bearbeitet von FMFlash am 02.12.2004, 15:49

fenster

Banned by Moderators
Registered: Sep 2002
Location: xxxy
Posts: 187
Zitat
Add:
Es wäre vielleicht nicht schlecht wenn du die query hier posten würdest, denn wenn du die Resultate als assoc gelesen hast, solltest du zumindest " " bei der Positionsangabe benutzen:

hier ist mal das ganze script



gruß
fenster
index_69058.txt (downloaded 70x)

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
omfg... dein Indenting is ja absolut unlesbar... Ich verstehe ja dass du Programmieranfänger bist, aber bitte bemühe dich doch um etwas mehr lesbarkeit, das sollte man auch als Anfänger hinkriegen.

anyway: Ich kann jetzt auf anhieb die Stelle nicht finden wo du die daten in den Warenkorb schreibst...

so zum Schluss möchte ich noch darauf hinweisen, dass dieses Forum eigentlich kein Hausaufgaben-Forum ist, sondern dazu dienen sollte das Können aller Forumuser, die sich hier beteiligen in einer Diskussion zu steigern. Diese Diskussion kann (und wird wohl) anhand einer besonders herausfordernden Aufgabe geführt werden.
Mir ist klar, dass es immer Fragenstellende geben wird, die Anfänger, oder nahezu solche sind, und auch diese sollten und werden wir beantworten und wenn notwendig leiten. Denn immerhin sind diese ja potenzielle Hilfen in der Zukunft.
Es sollte aber nicht zu einem "Mach' meine Hausaufgabe" ausarten, da dies absolut nicht im Interesse der beteiligten stehen kann.
Dies ist hier zwar (noch?) nicht der Fall, ich wollte es nur gesagt haben...

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
Zitat von fenster
hier ist mal das ganze script

Deine Hausaufgaben bin ich zwar nicht bereit zu machen, aber grobe Dinge die mir aufgefallen sind:

Code: PHP
session_register("artnr");
echo "$artnr";

Das macht keinen Sinn -> kannst du weglassen.

Deine registrieren() Funktion schreibt <html><head> usw nochmal. Die Browser werdens dir zwar verzeihen, korrekt ists trotzdem nicht.

Tags die du nicht brauchst musst du auch nicht als "leer" definieren: <head></head> ... <form name="" ...

SQL-Abfragen würde ich eher so auswerten:
Code: PHP
$result = mysql_query (...) or die ( ... );
/*
mysql_fetch_array() gibt ein assoziatives (["name"]) sowie ein indexbasiertes array ([0]) zurück - braucht dafür den doppelten speicher, also besser du benutzt nur das was du  wirklich brauchst -> mysql_fetch_row () bzw mysql_fetch_assoc()
*/
while ($array = mysql_fetch_array ($result)){
    $name = $array["name"];
    $artnr= $array["artnr"];
    $hersteller = $array[2];
    ....
     .... verarbeitung deiner daten ....
}

Noch besser ist imho eine Trennung von Datensammlung und -auswertung, aber das würde wohl zu weit führen....

PS: <form> tags gehören entweder: Vor und nach einem <table> oder innerhalb eines <td>, nicht aber vor und nach einem <tr>.

hth

fenster

Banned by Moderators
Registered: Sep 2002
Location: xxxy
Posts: 187
hallo

Zitat
dein Indenting is ja absolut unlesbar... Ich verstehe....

nö ich habe das ordentlich geschrieben
ober der text editor kommt mit meinem editor in dem ich das
geschrieben habe mit den absätzen und zeilen nicht
zurecht


noch eine frage:

ich habe in meinem formular:

<td><input type='text' name='menge' size='2' value='1'> </td>
<td><input type='submit' name='Bestellung' value='Bestellen'></td>

die menge mit dem value
wie soll ich das (wenn auf bestellen geklickt wird) in eine variable
verwandeln damit ich es als session variable verwenden kann ?



nochmals danke für eure hilfe
hat mir schon ein stück weiter geholfen



gruß
fenster

FMFlash

tranceCoder
Avatar
Registered: Mar 2001
Location: Wien
Posts: 2037
Zitat von fenster
<td><input type='text' name='menge' size='2' value='1'> </td>
<td><input type='submit' name='Bestellung' value='Bestellen'></td>

die menge mit dem value
wie soll ich das (wenn auf bestellen geklickt wird) in eine variable
verwandeln damit ich es als session variable verwenden kann ?

In dem Skript auf das die Form zeigt holst du dir die Parameter zb so:
$menge = $_POST["menge"]; <--- funktioniert nur wenn deine form method="post" hat, was wie gesagt der Fall sein sollte ..... $_REQUEST funktioniert für beides, ist also flexibler, deshalb aber auch "unsicherer".

Weiters in die Session speichern: $_SESSION["menge"] = $menge;
Den Zwischenschritt kannst du auch weglassen ... je nachdem wie du es brauchst ...

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von fenster
nö ich habe das ordentlich geschrieben
ober der text editor kommt mit meinem editor in dem ich das
geschrieben habe mit den absätzen und zeilen nicht
zurecht
also, ich habe jetzt das file mit 7 verschiedenen text-editoren von Con-Text bis VIM angschaut, und überall schauts gleich aus... keine Ahnung was du für einen strangen editor hast...
Zitat von fenster
noch eine frage:
ich habe in meinem formular:

<td><input type='text' name='menge' size='2' value='1'> </td>
<td><input type='submit' name='Bestellung' value='Bestellen'></td>

die menge mit dem value
wie soll ich das (wenn auf bestellen geklickt wird) in eine variable
verwandeln damit ich es als session variable verwenden kann ?
füg' doch einfach mal folgendes an den anfang deines files:
Code: PHP
<pre><?php print_r($GLOBALS); ?></pre>
hth

fenster

Banned by Moderators
Registered: Sep 2002
Location: xxxy
Posts: 187
hallo

Zitat
also, ich habe jetzt das file mit 7 verschiedenen text-editoren von Con-Text bis VIM angschaut, und überall schauts gleich aus... keine Ahnung was du für einen strangen editor hast...



ich verwende
http://www.chami.com/html-kit/

das mit den variablen klappt jetzt schon



gruß
fenster

fenster

Banned by Moderators
Registered: Sep 2002
Location: xxxy
Posts: 187
hat sich erledigt
Bearbeitet von fenster am 03.12.2004, 15:18
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz