php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.03.2006, 05:22  
Neuer Benutzer
 
Registriert seit: 20.02.2006
Beiträge: 14
samspa5
Standard warenkorn artikel löschen

hallo, ich baue einen warenkorb, aber irgendwie
will dieses teil nicht, obwohl ich jetzt
schon mehrere tage an
diesem billigen teil herumschraube. hauptsächlich sollte man die einzelnen artikel löschen können...
hier erstmal der code:

PHP-Code:

//add.php 
session_start();
$_SESSION['artikel'][]=$_POST['artikel'];  
   
 
//warenkorb.php

session_start();

if(!isset(
$_GET['loeschen'])){
   
   
$max count($_SESSION['artikel']);
   
       for (
$n=0$n<$max$n++) {
    echo 
"<tr>";
    echo 
"<td width=\"17\" height=\"19\" ><img src=\"../bilder/spacer.gif\" width=\"15\" height=\"8\"></td>";
    echo 
"<td width=\"160\" class=\"schriftweiss\">" .$_SESSION['artikel'][$n]. ",",  "</td>";
            echo 
"<td class=\"schriftweiss\"><a href=\"warenkorb.php?loeschen=$n\">Artikel löschen</a></td>";
    echo 
"</tr>";        
    }
    
    }else{
    
    
$loeschen=$_GET['loeschen'];
    
    unset(
$_SESSION['artikel'][$loeschen]);
    
        
    
    
$geleert=count($_SESSION['artikel']);
    
    for(
$i=0;$i<$geleert;$i++){
    
        
    
    
    echo 
"<tr>";
    echo 
"<td width=\"17\" height=\"19\" ><img src=\"../bilder/spacer.gif\" width=\"15\" height=\"8\"></td>";
    echo 
"<td width=\"160\" class=\"schriftweiss\">" .$_SESSION['artikel'][$i]. ",",  "</td>";
        echo 
"<td class=\"schriftweiss\"><a href=\"warenkorb.php?loeschen=$i\">Artikel löschen</a></td>";
    echo 
"</tr>";    
    
    }
    
    } 
die artikel werden per post in
add.php ins
$_SESSION['artikel']-array gelegt,
um sie eben im warenkorm wieder auszulesen.

letztendlich scheitert dieser quatsch
irgendwie an unset(), das nicht sauber
löscht,weil das script sollte sonst
stimmen, also beim loeschen gerät
das session-array irgendwie durcheinander,
bspw wird nach dem löschen vom index1
index 3und4 gelöscht und beim index1 bleibt
der loeschenlink bestehen und dergleichen, ich kann keine logik erkennen...

ich hoffe, jemand weiss rat und kann mir helfen.

grüsse samspa
samspa5 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 26.03.2006, 09:45  
Erfahrener Benutzer
 
Registriert seit: 25.08.2005
Beiträge: 250
PHP-Kenntnisse:
Fortgeschritten
FireFIghter
Standard

versuch es doch auch mal mit session destroy
FireFIghter ist offline  
Alt 26.03.2006, 10:45  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

geh das array nicht mit for(..) sondern mit foreach(..) durch: http://www.php.net/manual/de/control...es.foreach.php
Buhmann ist offline  
Alt 26.03.2006, 13:53  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Buhmann
geh das array nicht mit for(..) sondern mit foreach(..) durch: http://www.php.net/manual/de/control...es.foreach.php
Wieso? In den meisten Fällen sind for-Schleifen schneller als foreach-Schleifen, daher sollte man imo nur foreach() verwenden, wenn es keine andere Möglichkeit gibt.
Corvin ist offline  
Alt 26.03.2006, 13:58  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

@FireFIghter
session_destroy() zerstört die komplette Session, das will er doch garnicht

@samspa5
Welchen Typ hat denn $_GET['loeschen']? Ist das eine Zahl (for) oder ein String (foreach)?
Zergling-new ist offline  
Alt 26.03.2006, 14:03  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von Corvin Gröning
Zitat:
Zitat von Buhmann
geh das array nicht mit for(..) sondern mit foreach(..) durch: http://www.php.net/manual/de/control...es.foreach.php
Wieso? In den meisten Fällen sind for-Schleifen schneller als foreach-Schleifen, daher sollte man imo nur foreach() verwenden, wenn es keine andere Möglichkeit gibt.
so wie ich das problem verstanden habe, existiert aber nach dem unset() nicht mehr jeder key von 0 bis (anzahl der einträge-1), weil ja in der mitte einer rausgenommen wurde. Man kann aber auch einfach alle keys neu zuordnen...
Buhmann ist offline  
Alt 26.03.2006, 15:20  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Am einfachsten du schreibst eine Methode, der du die Artikel-ID und die (neue) Menge übergibst. Der
Link wäre dann index.php?action=update_basket&product[12345]=0

PHP-Code:
<?php
foreach ($_GET['product'] as $id => $amount)
    
$_SESSION['basket'][$id] = (int) $amount
?>
Basti
Basti ist offline  
Alt 28.03.2006, 00:51  
Neuer Benutzer
 
Registriert seit: 20.02.2006
Beiträge: 14
samspa5
Standard

danke für die postes,

@zergling:Welchen Typ hat denn $_GET['loeschen']? Ist das eine Zahl (for) oder ein String (foreach)?
===> $loeschen wird der wert $n zugeteilt, es ist also immer ne zahl von 0 bis count(artikel).

@basti: bin mit oop noch nicht so weit, wäre aber am elegantesten

@buhmann:Man kann aber auch einfach alle keys neu zuordnen
==> es müsste doch auch einfacher gehen, das ist doch nicht so elegant, oder??

werds mal mit foreach versuchen, wenns nicht geht, muss ich ne genauere fehleranalyse machen, meld mich ev. wieder.

besten dank trotzdem und bis dann

samspa
samspa5 ist offline  
Alt 28.03.2006, 01:24  
Neuer Benutzer
 
Registriert seit: 20.02.2006
Beiträge: 14
samspa5
Standard

hallo leute,

die nummer mit foreach hat geklappt. das script funkt jetzt einwandfrei!!

hier nochmal der code:

PHP-Code:
   
   
if(!isset($_GET['loeschen'])){
   
   
$max count($_SESSION['artikel']);
   
       for (
$n=0$n<$max$n++) {
    echo 
"<tr>";
    echo 
"<td width=\"17\" height=\"19\" ><img src=\"../bilder/spacer.gif\" width=\"15\" height=\"8\"></td>";
    echo 
"<td width=\"160\" class=\"schriftweiss\">" .$_SESSION['artikel'][$n]. ",",  "</td>";
    
//echo "<td width=\"30\" class=\"schriftweiss\">" .$_SESSION['anzahl'][$n]. "</td>";
    //echo "<td width=\"80\" class=\"schriftweiss\">" .$_SESSION['preis'][$n]."</td>";
    
echo "<td class=\"schriftweiss\"><a href=\"warenkorb.php?loeschen=$n\">Artikel löschen</a></td>";
    echo 
"</tr>";        
    }
    
    }else{
    
    
$loeschen=$_GET['loeschen'];
    
    unset(
$_SESSION['artikel'][$loeschen]);
    
    
//unset($_SESSION['anzahl'][$loeschen]);
    
    //unset($_SESSION['preis'][$loeschen]);
    
    
    //$geleert=count($_SESSION['artikel']);
    
    //for($i=0;$i<$geleert;$i++){
    
    //echo "<tr><td colspan=\"4\" class=\"schriftweiss\">".$i.$geleert."</td></tr>";
    
    
foreach($_SESSION['artikel']as $key=>$value){
    
    echo 
"<tr>";
    echo 
"<td width=\"17\" height=\"19\" ><img src=\"../bilder/spacer.gif\" width=\"15\" height=\"8\"></td>";
    echo 
"<td width=\"160\" class=\"schriftweiss\">" .$value",",  "</td>";
    
//echo "<td width=\"30\" class=\"schriftweiss\">" .$_SESSION['anzahl'][$i]. "</td>";
    //echo "<td width=\"80\" class=\"schriftweiss\">" .$_SESSION['preis'][$i]."</td>";
    
echo "<td class=\"schriftweiss\"><a href=\"warenkorb.php?loeschen=$key\">Artikel löschen</a></td>";
    echo 
"</tr>";    
    
    }
    
    }
?> 

also die 2. forschleife im alten script hat wie
vermutet nicht funktioniert, ich habe allerdings
noch keine ahnung wieso, also die indexes müssen durcheinandergeraten sein.

hätte jemand ne ahnung, wieso dh es
müsste doch auch mit ner einfachen
for-schleife gehen??

beste grüsse

samspa
samspa5 ist offline  
Alt 28.03.2006, 09:35  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Zitat:
Zitat von samspa5
@basti: bin mit oop noch nicht so weit, wäre aber am elegantesten
Klar wäre es das geschickteste und nahliegendste ein Warenkorb-Objekt
anzulegen. Was ich aber eigentlich sagen wollte und was meine Vorredner
auch angedeutet haben ist,das es unsinnig ist, Ressourcen anhand einer
fortlaufenden Nummer identifizieren zu wollen und diese Zuordnung nicht
auch serverseitig zu speichern. Bracuht einer ja nur zwei Browser-Fenster
offen zu haben oder mit schlechten Cache-Einsellungen ein wenig zurück
klicken und schon zeigt der Löschen-Link, der vorher die Zahnpasta
löschen sollte plötzlich af das Unterhemd!

Gib jedem Objekt (oder eben Atikel) in deinem Warenkorb eine ID und
benutze die als Referenz für die Löschen-Links. Alles andere ist
rumgepfusche. In meinem Beispiel sähe der Warenkorb (und da lag im
Besipiel kein Objekt zugrunde) so aus:
PHP-Code:
<?php
$_SESSION
['basket'] = array(
    
'1234-1' => 2,
    
'dg341'  => 1
);
Der Kunde hat also 2 Stück des Artikels mit der Nummer '1234-1' im
Warenkorb und einmal 'dg341'. Um nict jedesmal die Datenbank abfragen
zu müssen macht es sicherlich auch Sinn, die Produkteinzelheiten in die
Session zu speichern, aber das ist hier erstmal Nebensache. Wichtig ist,
dass du so eine eideutge Referenz auf die Artikel im Warenkorb angeben
kannst und diese dann via GET an verschiedene Methoden übergeben
kannst (Menge ändern, eins entfernen, x entfernen, eins draufpacken, x
draufpacken, alle Stücke entfenen).

Noch zwei Anmerkungen:
Werte aus dem $_GET oder $_POST-Array sind immer entweder auch
wieder Arrays oder Zeichenketten. Das kann natürlich auch "42" sein,
aber eben als Zeichenkette.

Und, ob du hier for oder foreach nimmst kannst du aus Sicht der
Performance getrost vergessen. Das sind vielleicht maximal 20 Artikel im
Warenkorb. Kannst ja mal schauen, ob du einen Unterschied messen
kannst. *g

Basti
Basti ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Artikel in den Warenkorb Browsersicherheit? webdino PHP Tipps 2008 3 24.06.2008 13:54
artikel loeschen samspa5 PHP Tipps 2006 3 20.02.2006 22:08
Script liest ähnlich Artikel aus Datenbank PHP Tipps 2005-2 1 04.10.2005 16:17
for-Schleife steuern - 2 Artikel pro Table ? PHP Tipps 2005-2 14 17.08.2005 15:03
Artikel aufklappen und zu klappen PHP Tipps 2005-2 0 05.08.2005 12:36
Artikel aufklappen und zu klappen PHP Tipps 2005-2 0 05.08.2005 12:35
Artikel aufklappen und zu klappen PHP Tipps 2005-2 0 05.08.2005 12:34
Artikel aufklappen und zu klappen PHP Tipps 2005-2 0 05.08.2005 12:34
Artikel auslesen. 'progman' PHP Tipps 2005-2 19 18.07.2005 21:43
artikel löschen? PHP Tipps 2005 1 03.06.2005 10:27
[Erledigt] Seitenauswahl bei einem Artikel PHP-Fortgeschrittene 1 13.02.2005 10:24
Artikel und deren Verbrauch aus einer Datenbank filtern Sachse PHP Tipps 2004 10 16.09.2004 09:22
Bitte HELFEN Gäste und reg. Benutzer können Artikel nicht le PHP Tipps 2004 5 06.09.2004 19:23
Artikel PHP Tipps 2004 2 10.08.2004 12:22
[Erledigt] #1054 - Unknown column '6%25252B' in 'Artikel' ??? Datenbanken 7 22.07.2004 11:39

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php nicht artikelarray sondern datenbankabfrage, artikel nicht mehr dem artikelarray entnehmen sondern direkt per datenbankabfrage, warenkorb artikel entfernen php, php einzelnen artikel aus warenkorb löschen, artikel aus basket löschen php

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:24 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.