Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

ich übergebe 3 Parameter mittels Get (artnr, besch und preis).

Diese 3 parameter speichere ich in einem array. dieses array wird dann

anschließend einem session-array angehängt.

ich gebe das arrray mittels var_dump() aus und der knecht hat mir 2 mal das gleiche array in mein session-array gespeichert.

guckst du hier->




session_start();

//Prüfen, ob alle Parameter übermittelt wurden.
if(isset($_GET['artnr']) && isset($_GET['besch']) && isset($_GET['preis']))
{
//Speichern in Session-Array
$warenkorp = array($_GET['artnr'], $_GET['besch'], $_GET['preis']);
if(!isset($_SESSION['warenkorp']))
{
$_SESSION['warenkorp'] = array();
}

$menge = array_push($_SESSION['warenkorp'], $warenkorp);
echo $menge;
var_dump($_SESSION['warenkorp']);

echo "<p> Ihre Session-ID: " . session_id();
}
else
{
exit;
}[/PHP]

das hier -> if(!isset($_SESSION['warenkorp'])) funktioniert so auch nicht, wie es laut debugger den anschein hat.

wie kann man fragen, ob eine session-variable schon existiert?

Gruß

Alex

Habe zwar jetzt länger nicht mehr mit PHP und Sessions gearbeitet, aber wenn ich das noch richtig im Kopf habe, musst Du die Session bevor der Header gesendet wird verarbeiten.

Der Ausschnitt ist irgendwie etwas undurchsichtig von der Logik. Ich denke Du möchtest doch wenn kein Warenkorb vorhanden ist (bzw keine Übergabeparameter), einen leeren Korb erzeugen und wenn Daten übergeben wurden, den bestehenden ergänzen:


$warenkorb = array()


if isÜbergabe && isSessionSet then

    lade Warenkorb aus Session

    ergänze Daten an Warenkorb

fi


schreibe Warenkorb in Session

Phil

so ähnlich ja!

1. ich überprüfe, ob die parameter alle vorhanden sind, wenn ja werden diese in ein array gespeichert

2. danach prüfe ich, ob das session-objekt vorhanden ist, wenn nicht soll eins angelegt werden.

3. anschließend speichere ich das "normale" array in das session-array

wie überprüfe ich, ob der warenkorp (session[warenkorp] schon existiert?

Bearbeitet von alexC++


if(!isset($_SESSION['warenkorp']))
{
$_SESSION['warenkorp'] = array();
}

mach besser
if(count($_SESSION['warenkorp']) == 0)
{
$_SESSION['warenkorp'] = array();
}
[/PHP]

im uebrigen muss man variablen in PhP nicht initialisieren

hast du mal versucht

[PHP]
var_dump($_SESSION['warenkorp']);
$menge = array_push($_SESSION['warenkorp'], $warenkorp);
var_dump($_SESSION['warenkorp']);

ist dein warenkorb vorher eventuell vorher schon vorhanden?

wie überprüfe ich, ob der warenkorp (session[warenkorp] schon existiert?

Ohne es getestet zu haben:



//Session aktuell holen bzw neu initialisieren
session_start();

//generell leeren Warenkorb bereitstellen
$warenkob = array();

//falls der Warenkorb in der Session existiert _und_ auch ein Array ist, da
//wir mit Arrayfunktionen darauf arbeiten möchten prüfen ob der richtige
//Typ vorliegt
if ( isset($_SESSION("warenkorb")) && (is_array($_SESSION("warenkorb")) )
//Warenkorb aus der Session holen
$warenkorb = $_SESSION("warenkorb");

//wenn Parameter vorhanden und nicht leer ist
if ( isset($_GET["param"]) && ($_GET["param"] != null) )
//an das Warenkorbarray anhängen
array_push($warenkorb, $_GET["param"]);

//Warenkorb zurück in die Session schreiben, damit ist auch sichergestellt,
//dass falls keine Datenübergeben wurden bzw. fehlerhafte Daten in der
//Session standen, beim nächsten Aufruf wieder ein definiertes Array
//vorhanden ist. Entweder leer bei Initialisierung / fehlerhaften Daten oder
//gefülltes Array mit bestehendem Warenkorb
$_SESSION["warenkorb"] = $warenkorb;

header()....echo.....
[/PHP]

evtl dann noch @ bei session_start() ergänzen, falls Du Fehlermeldungen nicht angezeigt haben willst, solltest Du aber durch die php.ini entsprechend Steuern, da sie für's Developing sehr hilfreich sind, nur nicht für den Produktiveinsatz

Phil

Bearbeitet von flashpixx

noch eine gedankliche stütze, du solltest dir den aufbau der Session in der art dort noch einmal ueberlegen...

denn was passiert wenn ich den gleichen artikel noch einmal in den warenkorb packe?

oder einen bestimmten entfernen moechte, oder die menge veringern moechte

ich wuerd dir raten das ganze ehr so aufzubauen

$session["warenkorb"][$artnr]["menge"]

$session["warenkorb"][$artnr]["preis"]

$session["warenkorb"][$artnr]usw

das macht es in der spaeteren verarbeitung bedeutend leichter

Ted

ich wuerd dir raten das ganze ehr so aufzubauen

$session["warenkorb"][$artnr]["menge"]

$session["warenkorb"][$artnr]["preis"]

$session["warenkorb"][$artnr]usw

Da würde ich widersprechen, denn warum soll ich hier mit mehreren assoziativen Arrays arbeiten, es führt schneller zu Fehlern, falls es mal vergessen wird. Ich würde zu einer entsprechenden Klasse greifen, damit steht in der Session nur ein Objekt, jeder Artikel ist ebenfalls Objekt und da Objekte serialisierbar sind, besteht auch kein Problem diese in einer Session abzulegen.

Phil

ted

ist dein warenkorb vorher eventuell vorher schon vorhanden?

ja, es sieht so aus!

wenn ich debugge und bei der ersten seite den button "zum warenkorp" klicke, dann öffnet er mir die seite und ich sehe das var_dump() schon, obwohl ich ab anfang der seite debugge.

Da würde ich widersprechen, denn warum soll ich hier mit mehreren assoziativen Arrays arbeiten, es führt schneller zu Fehlern, falls es mal vergessen wird. Ich würde zu einer entsprechenden Klasse greifen, damit steht in der Session nur ein Objekt, jeder Artikel ist ebenfalls Objekt und da Objekte serialisierbar sind, besteht auch kein Problem diese in einer Session abzulegen.

Phil

natuerlich, geb ich dir vollkommen recht, aber seine session ist momentan aehnlich aufgebaut und ich wollte davon nicht soweit abweichen :P

$session["warenkorb"][0]["menge"]

$session["warenkorb"][0]["preis"]

$session["warenkorb"][1]["menge"]

$session["warenkorb"][1]["preis"]

$session["warenkorb"][2]usw

so muesste seine Session bei mehreren artikeln im moment aussehn

ja, es sieht so aus!

wenn ich debugge und bei der ersten seite den button "zum warenkorp" klicke, dann öffnet er mir die seite und ich sehe das var_dump() schon, obwohl ich ab anfang der seite debugge.

ich nehme an das er die seite 2 x aufruft.

includierst du die irgendwo?

edit: sry 4 doppelpost :(

var_dump() beim ersten aufruf.

wenn ich dann ein anderes fahrzeug in den warenkorp lege, seht der Audi 2 mal drin


array
0 =>
array
0 => string '2' (length=1)
1 => string 'Audi A6 quattro Baujahr 2008, 235 PS' (length=36)
2 => string '35000.00' (length=8)
3 => int 1

[/PHP]

nach 2tem aufruf steht 2 mal der a6 drin und 1mal der a8.

wenn ich nochmal die seite aufrufe stehen beide 2 mal drin

[PHP]
array
0 =>
array
0 => string '2' (length=1)
1 => string 'Audi A6 quattro Baujahr 2008, 235 PS' (length=36)
2 => string '35000.00' (length=8)
3 => int 1
1 =>
array
0 => string '2' (length=1)
1 => string 'Audi A6 quattro Baujahr 2008, 235 PS' (length=36)
2 => string '35000.00' (length=8)
3 => int 1
2 =>
array
0 => string '3' (length=1)
1 => string 'Audi A8 Baujahr 2008, 355 PS' (length=28)
2 => string '67000.00' (length=8)
3 => int 1

nein ich includiere nirgends

Da wir nur Ausschnitte vom Code sehen, können wir nicht wirklich viel helfen. Wenn Du mehr Hilfe benötigst, schaue Dir auch das Log Deines Servers an, wie oft die Datei aufgerufen wird bzw welche Dateien ggf noch zusätzlich aufgerufen werden. Ggf kannst Du diese Daten auch posten

Ich ziehe ein required_once einem include immer vor.

@T3D: Bezüglich des OOP Designs, es hat schon durchaus Sinn so etwas hier anzubringen, denn diese "Array-Elemente-Schubserei" ist nie hilfreich, eine anständige Kapselung bzw das dazu passende Design, vermeidet entsprechende Fehler

Phil

ziehe ich auch vor!

nur habe ich beides nicht verwendet :)

wenn ich das ganze per klasse -> objekte löse

würde die seite trotzdem 2 mal aufgerufen und ein und das selbe

objekt würden 2 mal in der session gespeichert.

das ist also nicht das problem (oop)

ich kann euch auch die 2 seiten zu schicken, dann könnt ihr mal schauen.

wenn ihr zeit habt.

ist alles ohne template mit html und php gemixt (bin auf einer schulung und da wird das leider so gemacht)

Bearbeitet von alexC++

ziehe ich auch vor!

nur habe ich beides nicht verwendet :)

Es muss ja nicht am Include liegen als Bsp: Deine Seite wird aufgerufen, die Session verarbeitet und danach wird ein Header mit einer Locationangabe gesenden, der als Ziel die gleiche Seite hat (So was wie ein Refresh). Dann kann Deine Seite 2 Mal aufgerufen werden. Wenn dann nicht sauber das Verarbeitungshandling ist, passiert genau das. Das würdest Du aber in den Logs des Server sehen, deswegen mein Tipp, schau da erst mal rein

ziehe ich auch vor!

ich kann euch auch die 2 seiten zu schicken, dann könnt ihr mal schauen.

wenn ihr zeit habt.

ist alles ohne template mit html und php gemixt (bin auf einer schulung und da wird das leider so gemacht)

Poste die Daten als Anhang ins Forum

Phil

hier mein access.log

127.0.0.1 - - [16/Jun/2009:14:16:04 +0200] "GET /Abschlussprojekt/index.php HTTP/1.1" 200 5584

127.0.0.1 - - [16/Jun/2009:14:16:06 +0200] "GET /Abschlussprojekt/warenkorp.php?artnr=1&besch=Audi%20TT,%20Baujahr%202008,%20255%20PS&preis=29000.00 HTTP/1.1" 200 6510

127.0.0.1 - - [16/Jun/2009:14:16:06 +0200] "GET /Abschlussprojekt/warenkorp.php?artnr=1&besch=Audi%20TT,%20Baujahr%202008,%20255%20PS&preis=29000.00 HTTP/1.1" 200 7044

wird also 2 mal aufgerufen.

wie geht das mit dem hochladen?

wollte ein 7-zip datei und 2 php-dateien hochladen, dann sagt er mir ungültige datei.

ok habe mein problem gefunden.

es lag beim auruf der seite

hatte ein link und in dem link -> <input type='image' src...>

wusste nicht, dass ding auch weiterleitet.

danke für die hilfe

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.