PHP Shop - Session + Array Problem

TrainSpoTtinG

TrainSpoTtinG

Aktives Mitglied
Thread Starter
Dabei seit
26.10.2003
Beiträge
384
Reaktionspunkte
8
Hallo nochmal.

Also ich probiere nun ewig mit Sessions und Arrays rum und ich bekomms nicht so hin wie ich das will. Mein Problem liegt momentan hauptsächlich daran das ich die Session-Array nicht auslesen kann. Ich bin nun mittlerweile bei der 10en Variante (die auch nicht geht) und die poste ich nun einfach mal, damit Ihr versteht was ich in etwa vor habe:

PHP:
	<?

	// TEST
	$a_artnr = $artnr;
	$_SESSION["a"] = $a_artnr;

	?>

<table width="700" bordercolor="000022" border="0" align="center" cellpadding="0" cellspacing="3">

<tr>
	<td width="35">P1</td>
	<td width="300"><span class="style3"><? echo $_SESSION["a"]."<br>"; ?></span></td>
	<td width="75"><span class="style3"><? echo $_SESSION["a"]."<br>"; ?></span></td>
	<td width="75">Menge</td>
	<td width="100"><span class="style3"><? echo $_SESSION["a"]."<br>"; ?></span></td>
	<td>Ges Pr.</td>
</tr>
</table>

Die Artikelnummer ($artnr) wird übergeben, er speichert die Session (a) auch richtig ab -nur das auslesen bereitet mir kopfzerbrechen - da herrscht irgend eine Blockade.

Das ganze ist für einen Shop. Er soll eigentlich momentan nur die Artikelnummer speichern und im Warenkorb auslesen. Das ganze recht einfach gehalten, ohne viel Schnickschnack.

Meine jetzige Idee ist nur die Artikelnummer auszulesen, anhand dieser dann die restlichen Daten wie Preis und Beschreibung aus der Datenbank.

Wenn das nich geht, dann eben alle Daten in die Session rein. Nur bevor ich nun wieder was ausprobiere brauche ich verständlichen und professionelleren Rat von Euch.

Wenn Ihr was nicht verstanden habt von dem was ich eigentlich will, dann liegt das daran das ich etwas Müde bin und dazu nachdenklich - in dem Fall einfach nachhaken.

Danke schonmal,
Alex
 
richtig ist:

PHP:
session_start();
$arr=array(1,3,5,7,11,13);
if (! $_SESSION['prim'])
{
  $_SESSION['prim']=$arr; // übernahme des arrays in die session
}
else
{
foreach ($_SESSION['prim'] as $key => $value)
  print "$key. $value<br>";
}


um direkt auf ein Element zuzugreifen schreibst Du dann

PHP:
$erste=$_SESSION['prim'][0]; // Auslesen des 0ten Eintrages
 
Zuletzt bearbeitet:
ok sieht ja schonmal einleuchtend aus.. kann ich denn anstatt

PHP:
$arr=array(1,3,5,7,11,13);

auch beispielsweise

PHP:
$arr=array($artnr, $beschreibung);

schreiben??
 
Du kannst ALLES in ein array tun, nur ob das dann Sinn macht!?
Ich würd folgendes machen:

Bau Dir eine Klasse ARTIKEL ( oder was auch immer Du darstellen magst - Warenkorb?). Dann kannst Du Dir beliebige Instanzen davon generieren:
PHP:
$einkauf= new ARTIKEL;
$einkauf->artnr=12345;
$einkauf->beschreibung="Kernseife";
$einkauf->preis_in_eurocent=69;
$einkauf->preis_mwst=16;
$einkauf->menge=5;

und aus von den Objekten machst Du Dir dann ne Liste im Session-Array

array_push($einkauf,$_SESSION['ek_liste']); // Syntax aus dem Kopfe also ggf. nicht richtig


ich such mal nach der Doku für SESSION-Variable, da stehts gut beschrieben...
 
Das leuchtet mir nun alles aber schon eher ein, danke.
Ich hoffe die Doku ist gut - denn ich hab mir nun schon einige durchgelesen und keine brachte mich in die richtige Richtung für meine Zwecke.
Ich werde nun mal deine Variante versuchen in die Tat umzusetzen, danke schonmal für die schnelle Antwort - ich berichte später ob ichs geschnackelt habe.
 
hm, also die Doku ( wenn du sie denn findest ) wäre dennoch ganz hilfreich ...

Ein zusammenhängendes Beispiel wäre auch ganz nett, denn ich habe irgendwo in meiner Denkweise Fehler die ich bei jeder Variante wohl übernehme und dann scheitert es wieder.
 
wenn ich meine skripte veröffentliche wird mein Chef mich hauen ;)
Allerdings bin ich ein Fan der dokumentierten Version des PHP-Manuals:

http://www.php.net/manual/en/ref.session.php

die Userkommentare möchte ich nicht missen! Das ist meines Erachtens die umfassenste und beste Hikfe für PHP.
 
ja nur besteht mein Problem weiterhin - mein Problem ist ja anscheinend das fehlende Verständnis des Zusammenhangs. Ich bräuchte mal was funktionierendes damit ich sehe WIE es richtig ist.
Ich machs jetzt halt ganz anders, find irgendwie in der Richtung keine Lösung....
 
Also Arrays werden so beschrieben:
$array[index]

Es könnte also bei Dir ein Artikelarray geben, welches alle Artikelnummern speichert.
$artikel[123]
$artikel[124]
$artikel[125] und so weiter

Dann gibt es zweidimensionale Arrays, die sich wiefolgt aufbauen:
$array[index][index]

Man könnte also hier z.B. den Preis des Artikels mitspeichern
$artikel[123][4,50]
$artikel[124][7,99]
$artikel[125][12,00]

Man kann hier x-dimensionale Arrays machen, welche alle möglichen Artikeldatenbeinhalten.

Genauso kannst Du den Indizes anstatt Nummern auch einen String zuordnen, was in Deinem Fall so aussehen könnte.
$artikel[123]['preis'][4,50]
$artikel[124]['preis'][7,99]
$artikel[125]['preis'][12,00]

und auch hier könnte man in die x-fache Mehrdimensionalität gehen mit sowas:
$artikel[123]['preis'][4,50]
$artikel[123]['warengruppe'][Eiscreme]
$artikel[123]['name'][Choc-Choc-Chip]
$artikel[123]['beschreibung'][Häagen-Dasz Eiscreme]

Und so weiter und so weiter. Das kann man dann mit allen Artikeln machen (z.B. aus einer Datenbank in ein Array packen).

Und ein Formular würde jetzt so aussehen:
PHP:
$query = "SELECT * FROM artikel ORDER BY art_id";
$res = mysql_query($query);
$num = mysql_num_rows($res);

for ($i=0; $i<$num; $i++)  {
  $row = mysql_fetch_array($res);
  
  // Array füllen
  $array[$row['art_nr']]['nummer'] = $row[art_nr];
  $array[$row['art_nr']]['preis'] = $row[art_preis];
  $array[$row['art_nr']]['beschreibung'] = $row[art_desc];
  .
  .
  .
}

print '<form>';
foreach($array as $key => $value) {
  print '<input type="text" name="'.$array['.$key.']['nummer'].'-nummer" value="'.$key['nummer'].'">';
  print '<input type="text" name="'.$key['nummer'].'-preis" value="'.$array['.$key.']['preis'].'">';
.
.
.
}
print '<input type="submit" value=" Absenden "></form>';

So und dann hast Du Dein array in der $_POST-Variable und kannst es nutzen.
 
Alternativ könnte man auch nur mit einem kleinen Array arbeiten und das ganze so regeln:
PHP:
// <DB-Zugriff und auslesen siehe oben>

print '<form>';
for ($i=0; $i<$num; $i++)  {
  $row = mysql_fetch_array($res);
  
  print '<input type="text" value="'.$row[art_desc].'"><input type="checkbox" name="artikel['.$row[art_nr].']">';
}
print '<input type="submit" value="weg damit"></form>';

Das was jetzt auf der anderen Seite ($_POST) ankommt ist (u.a.) das Array der Checkboxen. Wenn ein Artikel geklickt wurde, nur dann ist das Checkbox-Array auch gesetzt. Auf dem ankommenden Formular müsste dann also sowas stehen.

PHP:
if (isset($_POST[artikel])) {
 foreach($_POST[artikel]*as $key => $value)  {
  $query = "SELECT * FROM artikel WHERE art_nr='$_POST[artikel][$key]'";
  ... //<DB-blabla>
  
  // Verarbeitung der DB-Daten
 }
}

So müsste es auch gehen. Nagel mich hier bitte nicht auf jede Codezeile genau fest, weil das eben aus dem Kopf entstand.
 
Danke nochmals, ich werde das so testen.
Auf anhieb erkenne ich Varianten die ich schon getestet habe, jedoch nicht funktionierten. Ich werds dennoch nochmals testen.

Alternativ speichere ich momentan alles in die Datenbank. Da wir sowieso die Seiten des Kunden verwalten kann ich auch regelmäßig die Einträge löschen. Dies funktioniert jetzt alles.

Dennoch, danke für die Mühe ich werde das auf jeden Fall noch probieren und studieren *g*. Ich entschuldige auch meine Fragerei, ich stell mich normalerweise nicht so doof an - doch ist sowas auch Neuland für mich und ich hatte mehr Schwierigkeiten mich hier einzufinden als ich anfangs dachte.

Danke,
liebe Grüße,
Alex.
 
Zurück
Oben Unten