php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.03.2006, 10:25  
Neuer Benutzer
 
Registriert seit: 20.02.2006
Beiträge: 14
samspa5
Standard

@basti

hallo,
habe gemerkt, dass der korb noch nicht so rund läuft.
also meintest du dass ich das array füllen sollte, ohne dass jemand den korb unmittelbar benutzt, daher ich müsste alle existierenden artikel indexieren und könnte das nicht on -the-fly machen, also wenn der user ein par artikel zusammenklickt, wird nur den ausgewählten artikeln dynamisch ne id vergeben

==>

meinst du das mit rumgepfusche(ich hatte ja ne id vergegeben, bei der ersten schlaufe $n und dann $i).

denke, werde mich nächstens in oop reinhängen, deine schilderungen, wie man das mit oop macht, sind toll, viel übersichtlicher!!

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

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

Alt 28.03.2006, 11:38  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi.

Nein, du musst nicht den Warenkorb mit allen Artikeln vorbelegen und für die je einen
Mengen-Wert auf 0 setzen - das wäre ja krass! Lediglich die Artikel von denen mindestens ein
Stück im Warenkorb liegt erhalten eine Arrayfeld.

Beispiel mit einfachen Funktionen:
PHP-Code:
<?php

function basket_setAmount($sProductID$iAmount)
{
    
$_SESSION['basket'][$sProductID] = $iAmount;
}

function 
basket_addProduct($sProductID$iAmount2Add 1)
{
    if (!
is_int($iAmount2Add) || $iAmount2Add 1) return false;
    if (!isset(
$_SESSION[$sProcuctID]))
        
$_SESSION[$sProductID] = 0;
    
$_SESSION['basket'][$sProductID] += $iAmount2Add
}

function 
basket_getAmount($sProductID)
{
    return (isset(
$_SESSION['basket'][$sProductID])) ? $_SESSION['basket'][$sProductID] : 0;
}
?>
Und so weiter. Die Abfragen sindalso immer: Wenn ein Array-Feld für den Artikel nicht exisitiert,
dann betrachte die Menge als 0.

Übrigens ist es von da an nurnoch ein winziger Schritt zu einer Warenkrob-Klasse.

Und was das Rumgepfusche angeht (sorry für das harte Wort *g), so meinte ich folgendes:
Der Benutzer möchte den Warenkorb sehen. Er hat einen Taschenrechner drinnen, zwei Päckchen
Taschentücher und eine Taschenuhr. Das Array wird in deiner Schleife durchlaufen und die Links
zum Löschen der Artikel erhalten dann die einmal ID 0 für den Taschenrechner, einmal die ID 1 für
die Taschentücher und die 2 für die Taschenuhr.

Diese Zuordnung basiert auf einer momentanen Schau auf den Warenkorb und ist solange
stimmig, wie dieser unverändert bleibt.

Angenommen der Benutzer will jetzt den Taschenrechner (ID 0) löschen. Er klickt drauf und das
klappt auch. Klickt dann aber auf zurück und sieht, weil die Seite noch im Cache sei, nochmal seine
inzwischen vealtetet Liste in der auch der mitlerweile gelöschte Taschenrecher enthalten ist. Jetzt
will er auch noch die Taschentücher löschen und übergibt folglich, basierend auf einer veralteten
Indizierung die ID 1 als das zu löschende Objekt. Die Lösch-Routine löscht nun das
Array-Feld mit dem Index 1 aus dem Warenkorb-Array in der Session. Inzwischen sieht das
Warekorb-Array aber so aus, dass das erste Element (Index 0) die Taschentücher darstellt
und das zweite die Uhr (Index 1). Ein unset($_SESSION['basket'][1])) löscht also die Uhr anstatt
die Rotzfahnen, obwohl der Benutzer ja auf "Taschentücher löschen" geklickt hat!

Das mag ein absoluter Sonderfall sein, dass ein Benutzer derart auf die Nase fällt (auch wenn genau
diese Sonderfälle mit an Sicherheit grenzender Wahrscheinlichkeit eintreten! *g). Dahinter steckt
aber ein in verschiedenen Kontexten immer mal wieder zu beobachtender Fehler, dass die
Indizierungen/Identifikatoren oder wie auch immer man diese IDs nennt verändert werden, obwohl
noch Referenzen auf diese im Umlauf sind, die dann natürlich auf die falschen Objekte zeigen.
Klassisches Beispiel ist die Frage, wie man denn in einer Datenbank IDs inzwischen gelöschter
Datensätze neu vergeben kann. Die Antwort ensprechend: Man kann, man sollte es aber tunlichst
vermeiden.

Mach dir also keinen Kopf, wie du die Auswirkungen der Index-Veränderungen in den Griff
bekommst, sondern vermeide einfach von vorneherein jegliche Änderung in den Zuweisungen.

Basti
Basti ist offline  
Alt 28.03.2006, 13:43  
Neuer Benutzer
 
Registriert seit: 20.02.2006
Beiträge: 14
samspa5
Standard

besten dank für den ausführlichen post.

Zitat:
Das mag ein absoluter Sonderfall sein, dass ein Benutzer derart auf die Nase fällt (auch wenn genau
diese Sonderfälle mit an Sicherheit grenzender Wahrscheinlichkeit eintreten! *g). Dahinter steckt
aber ein in verschiedenen Kontexten immer mal wieder zu beobachtender Fehler, dass die
Indizierungen/Identifikatoren oder wie auch immer man diese IDs nennt verändert werden, obwohl
noch Referenzen auf diese im Umlauf sind, die dann natürlich auf die falschen Objekte zeigen.
ich glaube eben, dass genau das eingetroffen ist, die verwechslung der indexe.
ich werd dein post mal verarbeiten, da steckt ziemlich viel drin.

besten dank nochmal
greetz samspa
samspa5 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


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.