Warenkorb/Array Problem

xamunrax

Erfahrenes Mitglied
Hi,

ja ich habe schon die suche benutzt aber ich nicht genau weiss woran das liegt war das denke ich vollkommen sinnlos... :)



nun zu meinem problem ich schreibe gerade einen 0815 webshop mit einem warenkorb der auf javascript basieren soll... nun dann ich kann sachen auch schon adden und so weiter aber nun das problem ich möchte wenn ich 2 mal einen artikel anklicke das er dann nicht 2 mal im array vorkommt sondern einmal nur das der anzahlwert auf 2 gestellt wird, so nach vielem gelese und rumprobieren hab ich auch das geschafft aber er macht es immer nur bei dem ersten wert... beim 2.wert macht er (wenn ich 2 mal adde) wieder 2 einträge in das array...

hier der Code:

PHP:
function einfuegen(p, id, anz){
  korb_ges = "";
  wirk = "";

  hsugt = korb_id.length;

  if(hsugt == 0){
  hsugt = 1;
  }



  for (var i=0; i <= hsugt; ++i){

        if(korb_id[i] == id){
        wirk = korb_pro_anz[i];
        wirk = Number(wirk);
        anz  = Number(anz);
        wirk = wirk +anz;
        korb_pro_anz.splice(i,1,wirk);
        }
        else{
        korb_pro_anz.push(anz);
        korb_id.push(id);
        korb_preis.push(p);
        }
   anz = "";
   id  = "";
   }
}
 
Probier mal, das ganze mit einem einzigen, assoziativem und mehrdimensionalen Array zu machen.

Als Arrayschlüssel verwende die ID des Produktes...dann kannst du per typeof bequem ermitteln, ob das Produkt mit der ID schon im Array ist.
Alternativ könntest du auch gleich den Array mit allen Produkten komplett anlegen(mit Anzahl 0)....dann brauchst du anzahl immer nur hochzuzählen.
 
wärst du so lieb und könntest mir im ansatz den code schnell basteln... ich bin der java schlechthin und brauchte für den vorherigen schon ewigkeiten,...
 
Naja... wenn du gelobst, in Zukunft öfters mal von Grossbuchstaben in deinen Postings Gebrauch zu machen, könnte ich mich nach meiner montäglichen Dosis TV-Stumpfsinn dazu hinreissen lassen ;)
 
Zuletzt bearbeitet:
So...

hier mal nen "schnelles" Beispiel:
Code:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--
    arrKorb=new Array();

    /**
      * Korb befüllen
      * Parameter:  strId   => ID des Produktes
      *             strName => anzuzeigender Name des Produktes
      *             lngPreis= Einzelpreis des Produktes
      **/

    function bestellen(strId,strName,lngPreis)
    {

    // Wenn Produkt noch nicht im Array enthalten,
    // wird dafür ein assoziativer Array in 'arrKorb' erstellt
    // wobei 'anzahl' auf '0' gesetzt wird

    if(typeof arrKorb[strId]=='undefined')
        {
        arrKorb[strId]=new Array();
        arrKorb[strId]['name']=strName;
        arrKorb[strId]['einzelpreis']=lngPreis;
        arrKorb[strId]['anzahl'] = 0;
        }

    //Die Anzahl wird inkrementiert
    arrKorb[strId]['anzahl']++;
    }



    /**
      * String zur Anzeige des Warenkorbs zusammenstellen
      * und selbigen anzeigen
      **/

    function korb_zeigen()
    {
    strKorb = '';
    intSumme = 0;

    for(var strKey in arrKorb)
        {
        strKorb +=   '\n' + arrKorb[strKey]['anzahl'] + ' x ' +
                     arrKorb[strKey]['name'] + ' a ' +
                     arrKorb[strKey]['einzelpreis'] + ' = ' +
                     summe(arrKorb[strKey]['anzahl'] * arrKorb[strKey]['einzelpreis']);
        intSumme +=  arrKorb[strKey]['anzahl'] * arrKorb[strKey]['einzelpreis'];
        }
    strKorb = (strKorb == '')
                ?'der Korb ist leer'
                :strKorb+'\nGesamtsumme:'+summe(intSumme);
    alert(strKorb);
    }



    /**
      * Summen für Ausgabe aufbereiten
      **/

    function summe(lngSumme)
    {

    strSumme = String(Math.round(lngSumme*1000)/1000);

    if(!strSumme.match(/\.\d\d/))
        {
        strSumme += (strSumme.match(/\./))
                        ?'0'
                        :'00';
        }
    return(strSumme);
    }
//-->
</script>

</head>
<body>
 <center>
  <form>
   <b>bestellen:</b><br>
    <input value="Jacke(75,75&euro;)"type="button"onclick="bestellen('id#1','Jacke',75.75)"><br>
    <input value="Hose(69,99&euro;)"type="button"onclick="bestellen('id#2','Hose',69.99)"><br>
    <input value="Hemd(32,98&euro;)"type="button"onclick="bestellen('id#3','Hemd',32.98)"><br>
   <b>Warenkorb:</b><br>
    <input type="button"value="leeren"onclick="arrKorb=new Array()">
    <input type="button"value="anzeigen"onclick="korb_zeigen()">
  </form>
 </center>
</body>
</html>
 
*grml* Javascript ist echt ne komplizierte Sache... also dein Warenkorb ist soweit super ich habe nun das ganze in eine "normale" Tabelle übernommen und es funst auch soweit nun kommt mein nächstes Problem... ich gebe die Anzahl in einem Text-Field aus und nun soll man dort einfach die Zahl ändern können und dann soll sich demnach auch der Preis etc verändern...

Problem Nr.1 ist, ich kann ja nicht das event "onkeyup" nehmen da ich ja dann nur einstellige zahlen eingeben kann und Problem Nr.2 ist das meine ganze Funktion auch nicht richtig funktioniert.... ich poste mal meinen Code, im Prinzip baut er direkt auf deinen auf.

PHP:
<SCRIPT LANGUAGE="JavaScript">
<!--
    arrKorb=new Array();

    /**
      * Korb befüllen
      * Parameter:  strId   => ID des Produktes
      *             strName => anzuzeigender Name des Produktes
      *             lngPreis= Einzelpreis des Produktes
      **/


    function aendern(strRow,strAnz,Nume)
    {

    var element_anz = eval("main.document."+strRow+"."+Anz);

    if(element_anz != strAnz){

    if(typeof arrKorb[strId]==Nume)
        {
        arrKorb[strId]['anzahl'] = element_anz;
        }

    }
    korb_zeigen();
    }





    function bestellen(strId,strName,lngPreis,IngNummer)
    {

    // Wenn Produkt noch nicht im Array enthalten,
    // wird dafür ein assoziativer Array in 'arrKorb' erstellt
    // wobei 'anzahl' auf '0' gesetzt wird

    if(typeof arrKorb[strId]=='undefined')
        {
        arrKorb[strId]=new Array();
        arrKorb[strId]['name']=strName;
        arrKorb[strId]['einzelpreis']=lngPreis;
        arrKorb[strId]['nummer'] = IngNummer;
        arrKorb[strId]['anzahl'] = 0;
        arrKorb[strId]['nid'] = strId;
        }

    //Die Anzahl wird inkrementiert
    arrKorb[strId]['anzahl']++;
    }



    /**
      * String zur Anzeige des Warenkorbs zusammenstellen
      * und selbigen anzeigen
      **/

    function korb_zeigen()
    {
    strKorb = '<table border=\"1\">' +
              '<tr>' +
              '<td width=\"40\"><b>Anzahl</b></td>' +
              '<td width=\"200\"><b>Artikel</b></td>' +
              '<td width=\"200\"><b>Preis einzelnt</b></td>' +
              '<td width=\"200\"><b>Preis gesammt</b></td>' +
              '<td width=\"200\"><b>Nummer</b></td>' +
              '</tr>';
    intSumme = 0;
        var i=0;
    for(var strKey in arrKorb)
        {
        var row = 'basket_row' + i;
        var arr_id = arrKorb[strKey]['nid'];
        var art_anz = arrKorb[strKey]['anzahl'];
        strKorb +=   '<tr>' +
                     '<td><form name=\"'+ row +'\" onsubmit=\"parent.aendern('+ row +',' + art_anz + ',' + arr_id + ')\"><input type=\"Text\" name=\"Anz\" onkeyup=\"submit()\" value=\"' + art_anz + '\" size=\"3\"></form></td>' +
                     '<td>' + arrKorb[strKey]['name'] + '</td>' +
                     '<td>' + arrKorb[strKey]['einzelpreis'] + '</td>' +
                     '<td>' + summe(arrKorb[strKey]['anzahl'] * arrKorb[strKey]['einzelpreis']) + '</td>' +
                     '<td>' + arrKorb[strKey]['nummer'] + '-' + arrKorb[strKey]['nid'] +'</td>' +
                     '</tr>';
        intSumme +=  arrKorb[strKey]['anzahl'] * arrKorb[strKey]['einzelpreis'];
        i++;
        }
    strKorb = (strKorb == '')
                ?'der Korb ist leer'
                :strKorb+'\nGesamtsumme:'+summe(intSumme);

    main.tes.innerHTML = strKorb;

    }



    /**
      * Summen für Ausgabe aufbereiten
      **/

    function summe(lngSumme)
    {

    strSumme = String(Math.round(lngSumme*1000)/1000);

    if(!strSumme.match(/\.\d\d/))
        {
        strSumme += (strSumme.match(/\./))
                        ?'0'
                        :'00';
        }
    return(strSumme);
    }
//-->
</SCRIPT>


// edit: Gross- & Kleinschreibung vergessen :)
 
Zuletzt bearbeitet:
okay Problem Nr1 das mit dem verlassen des Testfeldes habe ich gelösst *an de kopf fass* onBlur heisst das nette event... jetzt blebt nur noch Problem Nr2
 
also ich komme ja vorran also den fehler bei der ausgabe liegt schonmal an dieser zeile...
PHP:
'<td><form name=\"'+ row +'\" onsubmit=\"parent.aendern('+ row +',' + art_anz + ',' + arr_id + ')\"><input type=\"Text\" name=\"Anz\" onkeyup=\"submit()\" value=\"' + art_anz + '\" size=\"3\"></form></td>' +

..da er mir dort gleich den Fehler raus wirft kann ich leider noch nicht weiter probieren... weiss denn niemand einen Rat ? ich habe echt keine Ahnung wo da das Problem liegen könnte.


Danke schon mal im vorraus.
 
Zurück