-
Ich versuche mich mal an einer Warenkorbfunktion.
Funktioniert soweit. Wenn nun ein Artikel zwei Mal angeklickt wird möchte ich darauf hinweisen, daß der Artikel schon im Warenkorb ist.
Der Warenkorb ist in einer Session gespeichert, die ein assoziatives Array enthält.
Um nun mittels Vergleich der übergebenen Artikel ID und den schon in der Session gespeicherten IDs eine Übereinstimmung zu finden habe ich es mit in_array() und array_search() versucht. Ohne Erfolg.
Funktionsweise von array_search
Mein Versuch das auf eine Session zu übertragen funktioniert aber nicht.PHP-Code:$test = array('ID' => '0815', 'Artikel' => '5');
if ( $x = array_search ( '0815', $test ) ){
echo $test[$x] . ' wurde gefunden!<br />';
}
Klicke ich einen Artikel zwei mal an, ergibt die Ausgabe der Werte des Arrays, dass zwei Mal der selbe Artikel existiert. Die Prüfung hätte also zu einem Ergebnis führen müssen.PHP-Code:if ( $x = array_search ( $_POST['idArtikel'], $_SESSION['warenkorb'] ) ){
echo $_SESSION['warenkorb'][$x] . ' wurde gefunden!<br />';
}
Kann mir jemand sagen wo mein Fehler liegt?
-
06.09.11 18:05 #2
Wie ist denn dein assoziatives Array genau aufgebaut?
Folgender Code funktioniert: http://codepad.org/vTHVDrvp
PHP-Code:<?php
$test = array('ID' => '0815', 'Artikel' => '5');
$x = '0815';
if ( array_search($x, $test) !== FALSE )
{
echo 'Artikel schon vorhanden!';
}
else
{
echo 'Artikel _noch_ nicht vorhanden!';
}
?>mfg ComFreek
Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
[PHP] Überprüfen, ob Website erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
-
Hi ComFreek,
Bei jedem Klick auf einen Kaufbutton wird folgender Code ausgeführt:Wie ist denn dein assoziatives Array genau aufgebaut?
Die Ausgabe aller Werte der Artikel im Warenkorb via Schleife zeigt, dass auch die IDs vorhanden sind.PHP-Code:$_SESSION['warenkorb'][] = array('idArtikel' => $_POST['idArtikel'],
'stckArtikel' => $_POST['stckArtikel'],
'bezArtikel' => $zeile->bezArtikel,
'preisArtikel' => $zeile->preisArtikel);
Ein Versuch, Dein Beispiel anzuwenden, führt interessanter Weise zu einem Fehler.
Fehlermeldung:PHP-Code:if($_SESSION['warenkorb'] AND $_POST['idArtikel']){ //Prüfung ob warenkorb schon existiert und ob eine ID übergeben wurde.
if (array_search($_POST['idArtikel'], $_SESSION['warenkorb'] !== FALSE) ){
echo "VORHANDEN";
}else{
echo "NICHT VORHANDEN";
}
}
Code :1
array_search() expects parameter 2 to be array, boolean given in
Die Fehlermeldung bringt mich aber auch nicht so richtig weiter.
-
Versuch es mal so:
Und so:PHP-Code:$_SESSION['warenkorb'][$_POST['idArtikel']] = array(
'idArtikel' => $_POST['idArtikel'],
'stckArtikel' => $_POST['stckArtikel'],
'bezArtikel' => $zeile->bezArtikel,
'preisArtikel' => $zeile->preisArtikel
);
GrußPHP-Code:if ( isset( $_SESSION['warenkorb'], $_POST['idArtikel'] ) ) {
if ( isset( $_SESSION['warenkorb'][$_POST['idArtikel']] ) ) {
echo 'VORHANDEN';
} else {
echo 'NICHT VORHANDEN';
}
}
Edit//
Bei deiner IF-Abfrage war ist eine Klammer falsch gesetzt:
so wäre es mMn richtig:PHP-Code:if (array_search($_POST['idArtikel'], $_SESSION['warenkorb'] !== FALSE) )
PHP-Code:if ( array_search( $_POST['idArtikel'], $_SESSION['warenkorb'] ) !== false )
Geändert von Raisch (06.09.11 um 18:47 Uhr)
-
Hi Raisch,
stimmt. Die Klammer war falsch. Das Haupt-Problem besteht aber weiterhin.
Dein Beispiel funktioniert auch nicht.
Da behauptet die Seite auch bei zwei verschiedenen Artikeln sie seien identisch. Zusätzlich gibts einen neuen Fehler:
Code :1
array_search() expects parameter 2 to be array, null given in
-
-
//Doppelpost bitte löschen...
Geändert von Raisch (06.09.11 um 19:36 Uhr) Grund: doppelpost
-
06.09.11 19:38 #8
- Registriert seit
- Jul 2011
- Ort
- in einer 32 Bit ALU
- Beiträge
- 63
Ich bin mir jetzt nich ganz sicher, aber sucht array_search rekursiv?
Denn du hast ja ein zweidimensionalles Array, und suchst nach dem ID eines Untergeorneten Arrays.
Verstehst du was ich meine?
Vieleicht wäre eine foreach schleife angebracht. In der gehst du alle Einträge durch.
-
06.09.11 19:42 #9
- Registriert seit
- Jul 2011
- Ort
- in einer 32 Bit ALU
- Beiträge
- 63
Hab hier nochmal ein Beispiel:
PHP-Code:$vorhanden = false;
foreach ($_SESSION['warenkorb'] as $ware)
{
if ($_POST['idArtikel'] == $ware['idArtikel'])
{
$vorhanden = true;
}
}
if ($vorhanden == true) { echo "Sie haben diesen Artikel schon im Warenkorb";}
-
Hey Entwicklerpages, danke so läufts!
Obwohl ich mich doch wundere. Ist doch nur ein assoziatives Array. Oder ist das gleichzusetzen mit zweidimensional und nur eine andere Form?
Das Array der Session hat doch die gleiche Struktur wie das Beispiel ganz oben im Thread (oder übersehe ich da was?). Und da funktioniert array_search.
Na jedenfalls komme ich jetzt erstmal weiter. Mal sehen was es noch so zu entdecken gibt.
Danke für eure Denkanstöße und Lösungen.
Hier für andere Einsteiger ins Thema einfache Beispieldateien ohne Datenbankgedöns.
FORUMindex.php
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Shop Startseite</title> <style type="text/css"> <!-- body, html {height:100%;padding:0;margin:0;font-family:Verdana, Geneva, sans-serif} fieldset{width:750px;border:#CCC dotted 2px} input{margin:0 0 5px 10px;} label{color:#999; font-size:0.8em; line-height:1em} td{ vertical-align:baseline} table{font-size:0.9em} .grau{color:#999} --> </style> </head> <body style="background-color:#FAF8F5"> <?php if($_GET['job'] == 'resetCart'){ session_destroy(); } ?> <div style="width:960px; margin:0 auto; background-color:#FFF; height:100%;"> <div style="margin:10% 0 0 100px"> <h1>Startseite</h1> <fieldset><legend>Artikel</legend> <table width="700" border="0" cellspacing="0" cellpadding="2"> <?php if(!isset($_SESSION['warenkorb'])){ $_SESSION['warenkorb'] = array(); } ?> <tr> <form action="FORUMwarenkorb.php" method="post" enctype="multipart/form-data" name="einkauf"> <td style="text-align:right"><input name="bezArtikel" type="text" value="Skihose" /></td> <td style="text-align:left"><input name="preisArtikel" type="text" value="170.00 €" /></td> <td><span class="grau">Stückzahl</span> <input name="stckArtikel" type="text" size="2" maxlength="2" value="1" /></td> <td><span class="grau">ID</span><input name="idArtikel" type="text" value="0815" size="4" /><input name="kaufen" type="submit" value="in den Warenkorb" /></td> </form> </tr> <tr> <form action="FORUMwarenkorb.php" method="post" enctype="multipart/form-data" name="einkauf"> <td style="text-align:right"><input name="bezArtikel" type="text" value="Skijacke" /></td> <td style="text-align:left"><input name="preisArtikel" type="text" value="240.00 €" /></td> <td><span class="grau">Stückzahl</span> <input name="stckArtikel" type="text" size="2" maxlength="2" value="1" /></td> <td><span class="grau">ID</span><input name="idArtikel" type="text" value="4711" size="4" /><input name="kaufen" type="submit" value="in den Warenkorb" /></td> </form> </tr> <tr> <form action="FORUMwarenkorb.php" method="post" enctype="multipart/form-data" name="einkauf"> <td style="text-align:right"><input name="bezArtikel" type="text" value="Handschuhe" /></td> <td style="text-align:left"><input name="preisArtikel" type="text" value="45.00 €" /></td> <td><span class="grau">Stückzahl</span> <input name="stckArtikel" type="text" size="2" maxlength="2" value="1" /></td> <td><span class="grau">ID</span><input name="idArtikel" type="text" value="007" size="4" /><input name="kaufen" type="submit" value="in den Warenkorb" /></td> </form> </tr> </table> </fieldset> <br /> <input name="resetCart" type="button" value="Warenkorb leeren" onclick="window.location.href='FORUMindex.php?job=resetCart';" /> </div> </div> <a href="warenkorb.php">Zum Warenkorb ohne Bestellung</a> </body> </html>
FORUMwarenkorb.php
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
<?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Warenkorb</title> <style type="text/css"> <!-- body, html {height:100%;padding:0;margin:0;font-family:Verdana, Geneva, sans-serif} fieldset{width:600px;border:#CCC dotted 2px;} input{margin:0 0 5px 10px;} label{color:#999; font-size:0.8em; line-height:1em} td{ vertical-align:baseline} .grau{color:#999} --> </style> </head> <body style="background-color:#FAF8F5"> <div style="width:960px; margin:0 auto; background-color:#FFF; height:100%"> <form action="FORUMwarenkorb.php" method="post" style="margin:10% 0 0 100px"> <h1>Warenkorb</h1> <fieldset><legend>Warenkorb</legend> <?php /*if($_SESSION['warenkorb'] AND $_POST['idArtikel']){ if (array_search($_POST['idArtikel'], $_SESSION['warenkorb']) !== FALSE ){ echo "VORHANDEN"; }else{ echo "NICHT VORHANDEN"; } }*/ if($_SESSION['warenkorb'] AND $_POST['idArtikel']){ $vorhanden = false; foreach ($_SESSION['warenkorb'] as $ware) { if ($_POST['idArtikel'] == $ware['idArtikel']) { $vorhanden = true; } } if ($vorhanden == true) { echo "Sie haben diesen Artikel schon im Warenkorb";} } //Wenn eine Artikel ID übergeben wird, wird der gewählte Artikel aus der Datenbank geholt if($_POST['idArtikel']){ //Der ausgelesene Artikel wird in die Session Warenkorb eingetragen $_SESSION['warenkorb'][] = array('idArtikel' => $_POST['idArtikel'], 'bezArtikel' => $_POST['bezArtikel'], 'stckArtikel' => $_POST['stckArtikel'], 'preisArtikel' => $_POST['preisArtikel']); } //Ausgabe des Warenkorbs $count = count($_SESSION['warenkorb']); echo "in der Session befinden sich ".$count." Artikel"; for ($i = 0; $i < $count; $i++) { echo "<p>"; echo "<span class='grau'> id » ".$_SESSION['warenkorb'][$i]['idArtikel']." | ".$_SESSION['warenkorb'][$i]['stckArtikel']." x ".$_SESSION['warenkorb'][$i]['bezArtikel']; } //Datenbank schließen ?> </fieldset><br /> <input name="weiter" type="button" value="weiter einkaufen" onclick="window.location.href='FORUMindex.php';" /> </form> </div> </body> </html>Geändert von Spelmann (06.09.11 um 22:14 Uhr) Grund: Korrektur
-
nope dein Array hat diese Struktur
PHP-Code:$test = array(array('ID' => '0815', 'Artikel' => '5'));
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Jetzt klingelts langsam bei mir.
-
Ansonsten lass die $_SESSION['warenkorb'] einfach mal ausgeben und schau es dir genau an
PHP-Code:var_dump($_SESSION['warenkorb']);
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Wozu eigentlich eine Suchfunktion?
Man kann doch die Artikel mit Ihrer eindeutigen Artikelnummer im Warenkorbarray adressieren?
PHP-Code:$_SESSION['warenkorb'][$ArtikelID]
-
Ähnliche Themen
-
Geschateltes assoziatives Array nach einem Schlüssel durchsuchen
Von 'GreenDragon' im Forum PHPAntworten: 2Letzter Beitrag: 10.11.10, 13:12 -
Assoziatives Array (Zeilen Array) sortieren
Von Gladiator6 im Forum PHPAntworten: 10Letzter Beitrag: 03.06.09, 00:36 -
in ein assoziatives array was anhängen
Von Soapp im Forum PHPAntworten: 5Letzter Beitrag: 02.11.05, 23:09 -
assoziatives Array aber wie?
Von shinbo im Forum PHPAntworten: 1Letzter Beitrag: 01.06.05, 14:26 -
Dynamisches assoziatives Array
Von DanMcFly im Forum PHPAntworten: 7Letzter Beitrag: 26.04.04, 15:02



7Danke

Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren