PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : if schleiffe mit "in_array" funktioniert nicht



Aetius
25-04-2009, 22:53
Abend zusammen,

nun ich stehe irgend wie auf dem Schlauch. Diese schleife funktioniert nicht wie ich es möchte.
Bin mir sicher das es ein ganz trivialer Denkfehler ist, nach fast 8 Stunden.

Ein schups in die richtige Richtung würde mir gut tun und DANKE.

Es soll die geänderte Menge vom Artikel, falls eine Änderung für den Artikel da ist, gezeigt werden.

Schleife läuft immer in die letzte Bedingung hinein, obwohl Änderungen da sind.



...

if(in_array($a, $_SESSION['ArtikelMenge']))
{
foreach($_SESSION['ArtikelMenge'] as $id => $wert)
{
if($wert['artikel'] == $a)
{
echo "Menge: ".$wert['menge']."\n";
}
}
}
else
{
echo "Menge: ".$row['ve']."\n";
}

...


Nochmals DANKE
Aetius :D

BlueJay
26-04-2009, 12:06
1.Lass dir $a und die Sessionvariablen mal ausgeben,


foreach($_SESSION as $id => $wert) ...

2. intval leistet beim Vergleich von Werten, die eigentlich Zahlen sein sollen, gute Dienste.

so long,
BlueJay

Aetius
26-04-2009, 19:01
Hi BlueJay,

Danke, habe aber herausgefunden, dass es nicht an der schleife liegt, sondern wie ich per Session die Daten speichere.

Da habe ich einen Fehler.
Er speichert mir den Namen 'Artikel' nicht in die Session 'ArtikelMenge' ab.
Das ist der Fehler, aber ich kenn mich mit Session so wenig aus, habe mich schlau gemacht aber nirgend so ein anzatz wie ich Ihn brauche gefunden.

Vieleicht weist du was, Danke.



...
//Menge erhoen oder veringern
if($_GET['Menge'] && $_GET['Artikel'])
{
if(!in_array($_GET['Artikel'], $_SESSION['ArtikelMenge']))
{
$_SESSION['ArtikelMenge'] [$_GET['Artikel']] ['menge'] = $_GET['Menge'];

echo "Artikel vorhanden, Menge wird aktuallisiert.\n";
}
else
{
$_SESSION['ArtikelMenge'] [] = array ('artikel' => $_GET['Artikel'],
'menge' => intval($_GET['Menge']));

echo "Artikel wird mit der Menge angelegt.\n";
}

//header("location: warenkorb.php");
print_r($_SESSION['ArtikelMenge']);
}
...


Gruß
Aetius

BlueJay
26-04-2009, 21:49
Mal so im Schweinsgalopp:

session öffnen:

session_start();

was in session abspeichern:

$_SESSION["beissringe"]=15;

nachsehen, ob was da ist:


$index="beissringe";
if (isset($_SESSION[$index])) echo "$index gefunden: ".$_SESSION[$index]." Stück";
// zum Weiterverarbeiten:
$neue_anzahl=intval($_SESSION[$index])-1;


Bei deinem Ansatz steige ich durch die Logik nicht so ganz durch. Bei einen Index, der mit einer Menge korreliert, sträuben sich irgendwie die Nackenhaare.

msi
26-04-2009, 22:48
beim einen machst du

$_SESSION['ArtikelMenge'] [$_GET['Artikel']] ['menge'] = $_GET['Menge'];

dh du verwendest $_GET['Artikel'] als Schlüssel, $_SESSION['ArtikelMenge'] ist also eine Hashtabelle.


und hier:

$_SESSION['ArtikelMenge'] [] = array ('artikel' => $_GET['Artikel'],
'menge' => intval($_GET['Menge']));

hier ist $_SESSION['ArtikelMenge'] eine liste von hash einträgen (immer artikel und menge).

und an wieder einer anderen stelle versuchst dus so:

if(!in_array($_GET['Artikel'], $_SESSION['ArtikelMenge']))

as würde nur gehen wenn in $_SESION['ArtikelMenge'] eine Liste von Artikeln wäre, was in beiden Fällen nicht ist.


deine datenstrukturen sind nicht konsistent!

mein vorschlag, diesen code verwenden, also $_SESSION['ArtikelMenge'] als Hashtabelle verwenden,
woebei der Artikel, der in $_GET ist der Key darauf ist. Der Wert ist immer die Menge.
Wenn du mehrere Daten abspeichern musst, musst du halt ne Liste oder ein Hash als Wert des Hashs $_SESSION['ArtikelMenge'] benutzen.


$_SESSION['ArtikelMenge'] [$_GET['Artikel']] = $_GET['Menge'];


$_SESSION['ArtikelMenge'] [$_GET['Artikel']] = intval($_GET['Menge']) ;


if(!isset($_SESSION['ArtikelMenge'][$_GET['Artikel']] ))

bischi
27-04-2009, 07:22
if-Schleife

*GRAUS*

MfG Bischi

Aetius
27-04-2009, 18:10
Hallo Zusammen,

um es kurz zu machen. Ich habe mich verrannt und deswegen die unnötigen schleifen ...

Nach einem ruhigen Schlaf und einer schönen Tasse Kaffee habe ich die Lösung.

Warum so kompliziert wenn es auch einfach geht. :p



...
//Menge erhoen oder veringern bzw. Artikel hinzufuegen
if($_GET['Menge'] && $_GET['Artikel'])
{
$_SESSION['ArtikelMenge'] [$_GET['Artikel']] ['Menge'] = $_GET['Menge'];

header("location: warenkorb.php");
}
...


so und nun funktioniert die Lagerliste mit der Ausgabe.

An die Moderatoren, kann als gelöst eingestellt werden.

DANKE und Sorry
Gruß
Aetius :D