Datei erstellen mit PHPSESSID als Namen

cIIk

Grünschnabel
Hallo!

ich bin dabei einen kleinen Webshop zu basteln in dem sich die User nicht extra einloggen müssen. Jeder User bekommt dabei seine SID die er während der ganzen Zeit auf der Seite behält. Nun soll der angeklickte Artikel in eine Datei geschrieben werden mit der PHPSESSID als Namen. Wenn weitere Artikel ausgewählt werden sollen die Daten wieder ausgelesen werden und der neue Artikel hinzugefügt werden.
Ich hab bisher mit touch() und fopen() rumexperimentiert aber es will nicht richtig funktionieren.
Kann mir jemand einen Tipp geben?

Greetz
martin
 
Warum verwendest Du nicht das PHP-eigene Session-Management? Mit [phpf]session_start[/phpf] beginnst Du eine Session, bzw. nimmst eine alte Session wieder auf. Und in das superglobale Session-Array $_SESSION kannst Du alle Informationen temporär abspeichern, die Du möchtest:
PHP:
<?php
session_start();
$_SESSION['artikel'][1] = 'Buch';
?>
PHP kümmert sich um den Rest (Daten abspeichern und wieder laden)

snuu
 
Warum speicherst du nicht gleich deine gesamten Werte in der Session? Schliesslich wurde sie deshalb erfunden ;-)

Aber wenn du es unbedingt so machen willst...
Sagen wir du fügst Daten über eine variable Namens Insert hinzu.

Code:
$path='./users/';
$session = session_id();
$file=$path . $session . '.dat'
if(isset($_Request[insert])) //wenn die Variable Insert existiert
          {
                  if(file_exists!($file))   //wenn "Warenkorb Datei" nicht existiert dann erstelle sie...
                        {
                                if(touch($file)==true)
                                           {
                                           }
                               else
                                           {
                                                      err[]="Fehler bei der Erstellung ihrer Daten";
                                           }   
                        }
          if(isset!(err)) //wenn keine Fehler aufgetreten sind dann füge Produkt in Datei hinzu
                       {
                             $fp=@fopen($file, "w");
                             fputs($fp,$_Request[insert] . ":,:");
                             fclose($fp);
                       }
          }

Auslesen kannst du es dann bei dem "Bestellen" knopf drücken.

Code:
if(file_exists($file)) //wenn "Warenkorb Datei" existiert dann...
      {
              $fg=file($file);  //lese diese ein
              foreach($fg as $tc) // mache Sie Bearbeitbar indem er jeden Array Feld nacheinander einliest
                    $as=explode(":,:",$tc); //Jeden Datensatz trennen durch den Trenner(":,:")
                    $c=count($as); 
                    unset($as[ $c-1]); //Das letzte Array Feld löschen
                   foreach($as $produkte) //Einlesen der Produkte und Ausgabe
                             {
                                   print $produkte . "<br>";
                             }
      }

Also den Code habe ich nicht getestet, also kann es sein, dass irgendwo ein paar Fehlerteufel sich eingeschlichen haben.

In diesem Sinne
 
okay, da hab ich nicht dran gedacht :-) Danke!
jetzt gibt's nur ein kleines Problem: Wenn ich meine Daten in $_SESSION abspeichern will und nachher auslesen lasse krieg ich als Antwort nur "Array".

$_SESSION['id'][1] = $row[id];
echo $_SESSION;

So sieht beispielsweise mein Code aus.
Ausgabe ist "Array".
Was könnte ich tun?

---------------

hey krypthonas - das ist cool :)
ich versuchs mal
 
Zuletzt bearbeitet:
echo $_SESSION['id'][1];

wenn du ein Element des Arrays willst, oder:

print_r($_SESSION)

wenn du das ganze Array darstellen möchtest.
 
Alles klar! Das funktioniert!

allerdings nur genau einmal... danach bleibt die Abfrage leer
PHP:
session_start();
if (!session_is_registered('zaehler')) {
    session_register('zaehler');
    $zaehler = 1;
}
else {
    $zaehler++;
}

mysql_connect("DB","USER","PASS"); 
mysql_select_db('DB_NAME'); 

$qr = mysql_query("SELECT  n haufen zeugs FROM TABLE where id = '".$id."' "); 
$row = mysql_fetch_array($qr); 


	echo "<p align=\"center\">","Folgende Artikel im Einkaufswagen:","<br>";
	echo "<center>";
	echo("<table border=\"1\"width=\"500\">"); 
  	echo("<tr>"); 
   	echo("<td>");
	echo "<p>","<font color=\"#1B2274\">","Tieferlegungsfedersatz","<br>","<p>","<b>","<font color=\"#0000FF\">",$name," ",$row['typenbezeichnung'],"</font>","</b>","<br>","<font color=\"#6699FF\">",$row['zusatzbezeichnung'],"</font>","</p>";
	echo("</td>"); 
  	echo("</tr>"); 
	echo("<tr>"); 
   	echo("<td>");   	
	echo "<b>","BJ: \t","</b>",$row['bj'];
	echo("</td>");
  	echo("</tr>");
    echo("<tr>"); 
   	echo("<td>");   	
	echo "<b>","Tieferlegung: ","</b>",$row['tieferlegung'];
	echo("</td>");
  	echo("</tr>"); 
	echo("<tr>"); 
   	echo("<td>");   	
	echo "<b>","Art.Nr.: ","</b>","S9",$row['artikelnummer'];
	echo("</td>");
  	echo("</tr>");
	echo("<tr>"); 
   	echo("<td>");   	
	echo "<b>","Preis: ","<font color=\"#FF0000\">",$row['schnaeppchenpreis']," €","</font>","</b>";
	echo("</td>");
 	echo("</tr>");
	echo "</center>";
	echo("<p>&nbsp");

$_SESSION['id'][1]=$row[id];
echo "A.ID: ",$_SESSION['id'][1];

...ist n bisschen umständlich vielleicht - ich weiss.
weiss jemand wo der Hund begraben liegt?
 
in der SQL-Anweisung wird ja auch nur nach der Variable $id eingeschränkt und nicht nach der ID, die in der Session steht. Des Weiteren unterstützt Dein Code auch nicht mehrere Artikel im Warenkorb, da ja eben nur EINE Id abgefragt wird.

$_SESSION['id'][1] war nur ein Beispiel dafür gewesen, dass man in dem Sassion-Array wiederum Array speichern kann. Du kannst natürlich auch nur $_SESSION['id'] verwenden.

Um ehrlich zu sein: Dein Code erscheint mir momentan recht umständlich und nicht sonderlich durchdacht. Allein die tausenden ECHOS sind nicht gerade das Gelbe vom Ei. Einen performanten, erweiterbaren Webshop wirst Du damit nicht auf Anhieb zaubern können.

// EDIT:
Das hier kannst Du übrigens auch einfacher schreiben:
PHP:
if (!session_is_registered('zaehler')) { 
    session_register('zaehler'); 
    $zaehler = 1; 
} 
else { 
    $zaehler++; 
}

Kürzer sieht es so aus:
PHP:
if (!isset($_SESSION['zaehler'])) { $_SESSION['zaehler'] = 0; }
$_SESSION['zaehler']++;


snuu
 
Zuletzt bearbeitet:
ich weiss, bin ja auch erst dabei zu lernen.
das session zeugs war jetzt mal dazu da ums auszuprobieren.
das problem war ja nen Warenkorb zu basteln der eben mehrere Artikel unterstützt. Nur, wenn ich auf einen anderen Artikel klicke, dann sollte der trotzdem in der Abfrage drinstehen, eben halt nur der neue. Nur bleibt die Abfrage einfach leer. Das ist jetzt das "neue Problem".
 
Ja du brauchst ne Abfrageschleife, wenn du mehr wie ein Ergebnis bekommen solltest. Im Normalfall solltest du aber nur ein Ergebnis bekommen, da du abfragst id=$id. ID sollte logischerweise eindeutig sein !

Auch ist dein Code sehr abstrakt.

Warum verwendest du mal echo "" und dann echo() ? Versuch mal Struktur zu bekommen und lies dich mal gut ein.
 
Zurück