php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.04.2006, 13:13  
Gast
 
Beiträge: n/a
Standard [Erledigt] Warenkorb Alternative

Hallo an Alle,

ich sitze jetzt schon ne ganze Weile und dreh mich immer wieder im Kreis. So ein richtiges Tut zu meiner Vorstellung zur Aktualiesierung des Warenkorbs über 'nur einen Button' habe ich nicht gefunden. Und ich hab Google Löcher in die Festplatte gefragt.

Vielleicht kann mir von Euch jemand auf die Sprünge helfen. Vorab schon mal vielen Dank für Eure Zeit und Geduld.

Also:
Ich habe einen Warenkorb in dem die Artikel Einträge innerhalb SESSION nach Inserts, Select Abfrage mit Hilfe einer While Schleife und mysql_fetch_object ausgewählt und angezeigt werden. Die Menge steht in einem input textfeld jeweils neben dem aufgelisteten Artikel im Warenkorb. Ganz unten gibt es den Button Aktualiesieren.

Ich suche nun eine Möglichkeit die Menge in dem Textfeld zu ändern, wenn ich eine neue Menge eingebe und auf Aktualiesieren klicke.

Bisher habe ich versucht die Warenkorb id mittels GET weiterzugeben aber wie ich annehme auf grund der Schleife jeht dat net, weil wegen der schleife kann nicht erkannt werden, welchen Warenkorb eintrag ich genau meine. Genauso mysql_num_rows zählt die Anzahl der Einträge. Nun hab ich gedacht mit einer Variablen im hiddenfeld ist aber wegen der Schleife auch blödsinn. Wenn ich mit POST die neue Menge hole ist das das selbe Spiel wie mit der Warenkorb id.

mysql_fetch_row liefert nur einen Datensatz.Das wäre ja schon was für das GET url weitergabe. Jeht aber irgendwie auch nicht, weil eben nur ein Datensatz.

Ich komm irgendwie nicht weiter. Ich bin für jeden Tipp, Denkrichtung dankbar.

Diverse Tutorials zeigen sehr schön wie man durch Klicken eines Buttons jeweils die dazugehörige menge aktualisiert. Da sind dann also viele Button. Ist natürlich auch ne Möglichkeit aber ich fänds schöner wenn ihr mir helfen könntet wie ich das mit nur einem button für alle realiesiere.

Bitte meldet Euch.
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 12.04.2006, 13:31  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo und willkommen im Forum hier

Ich verstehe nicht so ganz: Steht dein Warenkorb ausschließlich in der Session oder in der Datenbank?

Ich hoffe die Warenkorb-IDs sind keine fortlaufenden Zahlen ohne Authorisierungs-Überprüfung, sonst könnten ja alle Warenkörbe auf 0 gesetzt werden, wenn man nur die ID per GET übergeben muss.

Vielleicht zeigst du uns ein bißchen Code, so sehe ich das Problem nicht, die Artikelanzahl zu verändern...
Zergling-new ist offline   Mit Zitat antworten
Alt 12.04.2006, 15:21  
Gast
 
Beiträge: n/a
Standard

Hey,
Klar gern.
Der Warenkorb steht ausschliesslich in der Session. Die Warenkorb
hat eine fortlaufende ID. die Session Id wird in einer extra Spalte im
Warenkorb gespeichert um sicherzustellen das die Warenkorb id zu
dem User gehört der die Session erstellt hat.

Ich will Euch nicht mit Html langweilen, hab das rausgenommen
statt dessen Kommentar bitte nicht wundern.

Hier der Code :
PHP-Code:
/*
* der Warenkorb des Users der die Session vorher (in einer anderen Funktion)
* durch einfügen eines Artikels erzeugt hat wird mit nur diesem Artikel(n)angezeigt
*/

function WK_view_Big(){
// Variablenarrays für BilderPfade, Datenbankdaten, Variablendeklarationen, etc
global $conf,$bilderpfade,$templates_arry,$varibalen,$bildverzeichnis,$post_vars,$get_vars;
$sid $_SESSION["sid"];
$get_vars['nr']=$sid
//wähle alle Artikel aus dem Warenkorb die nur in diese Session gehören
$result4 mysql_query("SELECT * FROM ".$conf['PREFIX']."_warenkorb WHERE ses_id='".$get_vars['nr']."'  ");
// zähle und speicher die Anzahl der Artikel in dieser Session
$num mysql_num_rows($result4); 
if (
$num=="0"){
$eimer.=mitteOben();// FKT nur Html 
$eimer.=wkNAVLEISTE();// FKT nur Html 
$eimer.='
  

 
          <div class="wk_leer">Im Warenkorb befinden sich keine Artikel im Warenkorb.</div> 
        </div> 
    </div> '
;
}else{
//alle Artikel im Warenkorb dieser Sitzung auswählen zum anzeigen und bearbeiten
$resultalle mysql_query("SELECT * FROM ".$conf['PREFIX']."_warenkorb WHERE ses_id='".$get_vars['nr']."' order by name");
$eimer.=mitteOben();// FKT nur Html 
$eimer.=wkNAVLEISTE();// FKT nur Html 
$eimer.=wkText1(); // FKT nur Html 
$eimer.= wkKopfTbl();// FKT nur Html 
    // zeige mir die Session die nur ein Einkäufer sehen darf.
     
while ($rowWk mysql_fetch_object($resultalle)){   //Warenkorb
                 
$wk_art_id     $rowWk->wk_id
                
$wk_art_nr     $rowWk->artikelnummer;
                
$wk_art_name   $rowWk->name;
                
$wk_art_stkpreis  $rowWk->preis;
                
$wk_menge       $rowWk->menge;
                
$wk_gesamtpreis   $wk_menge $wk_art_stkpreis;
                
$bestellpreis   $bestellpreis $wk_gesamtpreis;

                
#zeige_variable($rowWk);
                # <input type="Hidden" name="wkID" value="'.$wk_art_id.'">

$eimer.='

 <form action="'
.$varibalen['PFAD_1_1_2'].'&wkid='.$wk_art_id.'"    method="post" ><tr>

 
   
    <input type="text" name="menge_neu" maxlength="2" size="2" class="wk_fld_menge" value="'
.$wk_menge.'"/> ID'.$wk_art_id.';



    '
;
 }
//Ende Auslesen Warenkorb Artikel des zugeordneten Users
   
$eimer.='
   <tr>
  
 
 
 
 
  
 <div id="wk_ges">
 <div class="wk_ges_new">[img]'
.$bilderpfade[[/img]
 <
input type="submit" class="wk_btn_aktualisieren" value="Aktualisieren"/>
</
div>

<
div id="wk_btn_weiter">[img]'.$bilderpfade[[/img] 
   <input type="submit" class="wk_btn_kasse" value="weiter zur Bestellung"/>   </div> </div>
 </form>
  </div>
</div></div> '
;
  
}
// Ende Anzeigen Aktueller Warenkorb
return $eimer;
$ergebnis =mysql_query($sql) or die("Konnte keine Daten in die Datenbank schreiben!FKT rhInsert_DB_WithFeedback
"
);
}

/*
* durch klicken auf Aktualisieren in der Funktion [u]oben[/u] soll nun nur
* die gewählte Warenkorb Id Eintrag ausgewählt  werden und um in der
*folgenden funktion bearbeitet werden zu können.
*
*/

function WK_Edit(){
global 
$conf,$bilderpfade,$templates_arry,$varibalen,$bildverzeichnis,$post_vars,$get_vars;
$sid $_SESSION["sid"]; 
$get_vars['nr']=$sid;// schon erstellte Session Id des User holen
if ($_GET["modus"] == "wk_edit"){
    
$warenkorb_id $_GET["wkID"]; // GET Array liefert die Var über die Url 
    //neue Menge im Post array speichern
    #$warenkorb_id = $_POST["wkID"]; // POST im Falle per Hiddenfeld 
    
$menge_neu $_POST["menge_neu"]; // PostArray liefert die Var in dem Formular
    // hier neu Mange aus dem Hiddenfeld des Wk Formulars PostArray
    
zeige_variable($warenkorb_id);
    
#zeige_variable($menge_neu);
        
            //ausgewälte Warenkorb ID ausschliesslich in dieser Session einlesen zum Bearbeiten 
            //geht aber erst wenn Warenkorb Id auch da (°?°)
            
            #$result = mysql_query("SELECT wk_id FROM ".$conf['PREFIX']."_warenkorb WHERE ses_id='".$get_vars['nr']."' AND wk_id= '".$warenkorb_id."'  ");    
            
            //Anfang....Ende Schleife gewählten Eintrag bearbeiten
            
            #if ($menge_neu==0) { 
            #    $sql="Delete diesen Warenkorb Eintrag nur in dieser Session";
            #}else{
            #    $sql="Ubdate die Menge in diesen Warenkorb nur in dieser Session";
            #}
        
}//Ende Modus edit
}//Ende Function 
  Mit Zitat antworten
Alt 12.04.2006, 16:29  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

bitte poste code mit dem php-tag. es ist sonst äusserst schwer lesbar...

Grüße,
Dr.E.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 12.04.2006, 16:42  
Benutzer
 
Registriert seit: 28.03.2005
Beiträge: 46
Ryson
Standard

Du willst den Warenkorb über einen Button aktualisieren?
Hier eine Anregung:


Artikel XYZ, Anzahl: <select name="artikel[$artikel_id]">...</select>


Code:
if( empty($_POST['artikel']) || !is_array($_POST['artikel']) )
{
	$aArtikelListe = array();
}
else
{
	$aArtikelListe = $_POST['artikel'];
}


while( list($key, $val) = each($aWarenkorb) )
{
	if( array_key_exists($val['artikel_id'], $aArtikelListe)
    	&& is_numeric($aArtikelListe[$val['artikel_id']])
        && $aArtikelListe[$val['artikel_id']] > 0 )
    {
    	$szSQL = "UPDATE warenkorb SET anzahl = ".$aArtikelListe[$val['artikel_id']]." ".
        		 "WHERE artikel_id = ".$val['artikel_id']." AND sessid = '".session_id()."'";
    }
    else
    {
    	$szSQL = "DELETE FROM warenkorb WHERE artikel_id = ".$val['artikel_id']." AND sessid = '".session_id()."'";
    }
}
Ryson ist offline   Mit Zitat antworten
Alt 12.04.2006, 17:16  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Wie schon Ryson bemerkt hat kannst du in Formularen auch Arrays weitergeben! Und dann musst du eben das Array mit der Anzahl so machen das die Indixes zu den jeweiligen Waren gehören.

In der DB bei den Produkten hat die Kappe die ID 1 und die Hose die ID 3.

Code:
Kappe:    <input name="anzahl[1]">
Hose:     <input name="anzahl[3]">
Und später kannst du dann drauf zugreifen! $anzahl[1] ist dann eben die Anzahl der Kappen.
Flor1an ist offline   Mit Zitat antworten
Alt 12.04.2006, 20:52  
Gast
 
Beiträge: n/a
Standard

Mmmh.... klasse vielen Dank für die schnellen spontanen Antworten.
OK.

Vielen Dank für den Denksport Ryson und deinen Hinweis RaZoR.Ich muss mir das was du vorgestellt hast Ryson verinnerlichen also die Schleife. Kool. Jetzt gehts wieder voran.

Hey dr.e.,
vielen Dank für den Hinweis. Wird geändert.



Noch andere Ideen?
Bin immer noch dank bar für Hinweise. Gibt ja immer mehrere Wege die nach Rom führen.
  Mit Zitat antworten
Alt 13.04.2006, 12:51  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi.

Du speicherst den Warenkorb also doch in der Datenbank, nicht nur in der Session. Das macht in der Regel nur dann Sinn, wenn der Benutzer bereits angemeldet ist.

Einen Warenkorb in der Datenbank einer Session zuzuordnen macht kenen Sinn, denn die Zuordnung ginge verloren, wenn die Session beendet wird. Der Warenkorb ist also nur solange brauchbar, solange die Session noch läuft (falls keine weitere Zuordnung zum Kunden besteht). Ist die Session abgelaufen, gleicht der vormals zugehörige Warenkorb-Datensatz einem vollen Einkaufswagen, der im Supermarkt rumsteht, wärhend der Kunde bereits gegangen ist. Die Lebensdauer eines sinnvollen Warenkorbs ist bei dir also gleich der Lebensdauer der Session. Folglich macht es keinen Sinn, den Warenkorb zusätzlich in die Datenbank zu schreiben. Es reicht, den Warenkorb in die Session zu legen.

Etwas anderes wäre es, wenn du die Warenkörbe Benutzern zuordnen kannst. Dann können diese den Einkauf irgendwann fortsetzen, sobald sie sich wieder einloggen. Das ist dann aber unabhängig von der Session.

Weiter wäre es möglich, den Warenkorb an ein Cookie zu binden, falls die Benutzer noch nicht identifiziert sind. Das hat den Vorteil, dass ein Benutzer vom selben Rechner aus auch später mal weitersurfen kann und aber auch den Nachteil, dass die (nicht abgeschlossenen) Einkäufe des Benutzers auf dem Rechner gespeichert werden. Ist also wohl in den meisten Fällen unerwünscht.

Mach erstmal klar, wie deine Anforderungen hier sind, dann kann man weitersehen.

Basti
Basti ist offline   Mit Zitat antworten
Alt 13.04.2006, 17:18  
Benutzer
 
Registriert seit: 28.03.2005
Beiträge: 46
Ryson
Standard

Als jemand, der auch den Warenkorb über die Session in der DB speichert
möchte ich folgendes anmerken...

Ich will die Datenmenge in der Session möglichst klein halten -
so wurde mir auch einmal empfohlen.

Über die Session identifiziere ich auch Benutzer,
die nicht angemeldet sind.
So muss ein Gast sich nicht gleich einloggen oder registrieren,
kann aber trotzdem schon die Bestellung vorbereiten.

Das der Warenkorb irgendwann verfällt ist ebenfalls gewollt,
der Verfall der Session ist also eingeplant.

Wer nach einer Woche wieder kommt,
wird selten die gleiche Bestellung abschließen wollen.
Außerdem können sich Preise und Produkte ändern.
Ryson ist offline   Mit Zitat antworten
Alt 13.04.2006, 17:57  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Zitat:
Zitat von Ryson
Ich will die Datenmenge in der Session möglichst klein halten -
so wurde mir auch einmal empfohlen.
Ob die Daten in den DB-Files oder den Session-Files auf der Platte liegen ist doch Schnurz. Außerdem ist do ein Warenkorb-Objekt nicht der Rede wert, zumindest nicht, wenn du darin nur die IDs der Produkte und nicht alle Details der Produkte ablegst. Aber selbst dann sind das in aller Regel sehr kleine Datenmengen. Ausnahmen wären hier Artikelbilder etc. Aber, letztlich reicht ein Array: Artikel-ID => Anzahl und da müsste einer schon ein Extreme-Shopping machen, um da ein paar KiloBytes zusammenzubekommen!

Andersrum geschaut:
Wenn du die Daten in die Datenbank legst, musst du die Daten a) jedes mal aus der DB auslesen (die Session leist du ohnehin ein) und b) musst du einen Garbage Collector bauen und der Nutzen für diesen Mehraufwand ist gleich Null.

Vielleicht hier nochmal erwähnenswert, dass das Session-Verzeichnis auf Shared-Hosts in jedem Fall nicht im allgemein les- und schreibbaren /tmp-Verzeichnis liegen dürfen. Aber da das ja letztlich für alle Sessions gilt, ist das hier ja nichts besonderes. Allerdings wird bei Session-basierten Anwendungen allzu oft nicht auf Sicherheit geachtet und gerade bei E-Commerce-Anwendungen sollte man nicht gerade vergessen haben, sich weitestgehend vor Session-Fixation-, CSRF-, Hijacking- und anderen Attacken zu schützen.

Basti
Basti ist offline   Mit Zitat antworten
Antwort


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
Warenkorb unregistrierter User Exon PHP Tipps 2007 3 25.05.2007 19:15
Problem mit Warenkorb (Session/Array) Charly Shop Sui PHP Tipps 2006 5 30.08.2006 15:14
Query was empty bei Warenkorb Shalina PHP Tipps 2006 12 10.06.2006 00:45
warenkorb Artikelanzahl verringern Mach!N3 PHP Tipps 2006 59 30.03.2006 08:09
warenkorb & mysql Mach!N3 PHP Tipps 2006 16 27.03.2006 21:18
neuen Warenkorb erstellen PHP Tipps 2005 2 15.05.2005 14:10
warenkorb oder shop system PHP Tipps 2005 4 15.01.2005 19:51
[Erledigt] Hilfe - Problem mit Warenkorb PHP Tipps 2004 1 26.11.2004 11:32
einfacher warenkorb Beitragsarchiv 3 23.11.2004 16:24
Warenkorb - neuer Session Datensatz! Broadcast PHP Tipps 2004 7 29.10.2004 18:05
anleitung für warenkorb bratwurstschorsch PHP Tipps 2004 1 25.10.2004 21:59
WARENKORB - Artikelmenge aktualisieren PHP Tipps 2004 6 18.10.2004 13:14
Artikelsuche - Warenkorb PHP Tipps 2004 9 12.10.2004 12:48
Problem mit Warenkorb PHP Tipps 2004 6 25.06.2004 00:54

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
alternativer warenkorb, warenkorb alternative, alternative warenkorb, alternate warenkorb speichern, alternative zu warenkorb, mysql php warenkorb anzahl ändern, alternative zu in den warenkorb, php warenkorb 1 id 2 einträge, warenkorb und alternativ warenkorb, shops mit warenkorb und alternativ warenkorb, menge * preis in warenkorb einfügen php mysql, $sql = \update warenkorb set anzahl=\'\.$_post[\'anzahl\'].\\', alternative zum warenkorb, $get_vars[\'nr\'], $templates_arry, \warenkorb alternative\, wenn warenkorb menge kleiner 0 unset session, warenkorbmenge aktualisieren shop php, php 3 aufgabe warenkorb aktualisieren, alternate warenkorb speichern geht nicht

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:14 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.