arrayproblem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • arrayproblem

    hi...

    ich habe meinen warenkorb in einer session gespeichert.

    wenn ich einträge löschen möchte mache ich das mit

    unset($_SESSION['warenkorb'][$i])

    danach erhalte ich folgendes:
    Array ( [0] => Array ( [pic] => 8 [format] => 40x45 [preis] => 3.80 [file] => bild5.jpg [categorie] => Männertag, Mai 2002 [id] => 1 )
    [1] => Array ( [pic] => 6 [format] => 13x18 [preis] => 0.25 [file] => bild3.jpg [categorie] => Männertag, Mai 2002 [id] => 2 ) )

    die id als letztes arrayelement erhalte ich durch count($_SESSION['warenkorb'])

    nun meine frage, wenn ich mit unset etwas entferne, dann soll sich bei mir auch die id hinten ändern, und nicht das es so aussieht wie im obigen beispiel, wo die id 1 bzw. 2 ist und der index 0 bzw. 1.

  • #2
    also du willst das _SESSION-Array nicht normal(!) durchnummeriert haben, sondern als Index die Artikel-id haben?

    dann schreib die doch schon beim speichern darein? wo ist das Problem?

    Kommentar


    • #3
      ja, also als index die artikel id, das wäre gut, nur wie kann ich das machen? der index für dasarry wird doch automatisch vorgegeben. vielleicht hast du ein kurzes beispiel für mich?

      hier mal mein code, wie ich es jetzt gemacht habe, was wohl sehr umständlich ist

      PHP-Code:
      if (isset($_GET['del'])){
        unset(
      $_SESSION['warenkorb'][$_GET['del']]);
        
      $_SESSION['warenkorb'] = array_values($_SESSION['warenkorb']); 
        for(
      $i=0$i<count($_SESSION['warenkorb']); $i++){
           
      $_SESSION['warenkorb'][$i]['id'] = $i;
        }

      die id hinten muss also immer gleich dem index sein, da ich sonst ne warnung bekomme: undefined index

      Kommentar


      • #4
        musst du natürlich wie gesagt beim speichern in die session machen. ich erkläre nochmal die Grundlagen:

        $array[id] = bla;

        Kommentar


        • #5
          die id speichere ich ja so in der sesson ab:

          $_SESSION['warenkorb'][] = array("id" => count($_SESSION['warenkorb']));

          mir ist jetzt nicht klar wie ich den index und die id der artikel zusammenführe, da ich ja beim löschen nach der indexnummer des array gehen muss und dieser index ja nicht gleich der id der artikel ist

          der link zum löschen ist der:

          index.php?del=0 oder del=1 usw.

          Kommentar


          • #6
            dann setzt du das count($_SESSION['warenkorb']) halt in als Index von _SESSION.

            Aber was soll das bringen? ich dachte das wäre ne Produkt id. Aber was du da machst ist absoluter schwachsinn. Kommst du etwa nicht drauf klar, dass PHP wie eigentlich alles was mit IT zu tun hat bei 0 anfängt zu zählen???

            mir ist jetzt nicht klar wie ich den index und die id der artikel zusammenführe, da ich ja beim löschen nach der indexnummer des array gehen muss und dieser index ja nicht gleich der id der artikel ist
            Genau deswegen sage ich dir zum xtem mal, dass du die ID beim speichern als Index für das Session-array vergeben sollst.

            Kommentar


            • #7
              die id ist keine produkt id. ich habe sie ins array mit aufgenommen, damit ich mit der variable $_GET['del'] genau dieses element entfernen kann.

              unset($_SESSION['warenkorb'][$_GET['del']]);

              so richtig weiss ich auch nicht , wie ich es dir es dir erklären soll

              wie meinst du es denn ich soll die ID beim speichern als Index für das Session-array vergeben?? glaub hab grad en loch im kopf

              EDIT:

              also hab jetzt geschnallt wie du das meinst, nur wenn ich die id als index vergebe, dann klappt das auch, nur ich bekomm immer ne meldung:

              Notice: Undefined offset: 0 in....
              Notice: Undefined offset: 2 in.... also immer beim abspeichern kommt ne meldung wegen einem anderen undefined offset




              Zuletzt geändert von lx-club; 17.02.2004, 23:24.

              Kommentar


              • #8
                Also deine Id halte ich für ziemlich sinnlos. Vielleicht musst du mir aber auch noch mal verständlich(!) erklären, was dein Ziel ist. und bitte auch, warum du keine Produktid nimmst.

                Was ein undefined offset ist, weißt du? dann sicher auch, woher das kommt...

                Kommentar


                • #9
                  Ein Shop also. Warum nimmst du nicht einfach die Artikel-Nr.(A-Nr), sie ist doch eindeutig. Speichert alle selectierte A-Nr | getrennt in die Session. Falls was gelöscht werden soll, kannste die Session auslesen und die A-Nr einfach aus dem Gesamtstring entfernen; ist doch einfach und performanter.

                  Kommentar


                  • #10
                    @tobiaz:

                    ich benutze eine id für die produkte, nur in meinem fall sind es fotos und die haben verschiedene formate. wenn ich also als index die produkt id vergebe, dann überschreibe ich im warenkorb ja einen eintrag, wenn ich 2 mal dasselbe foto auswähle, nur in nem anderen format.

                    mein ziel ist es, anhand der einträge im warenkorb, die ich mittels dieser id durchnumerieren will, immer den gewünschten datensatz zu löschen

                    der offset is mir klar woher der kommt.

                    Kommentar


                    • #11
                      geh mal in nen Laden und Kauf zwei Litter Milch. Einen 3,5% Fett und einen mit 1,%. haben die sie selbe Id? Sicher nicht.

                      Naja, egal.

                      Aber ob du jetzt deine count()-id in das unterarray speicherst, oder als Array-Index benuntz, macht sicher keinen unterschied. nur das letzteres einfacher ist, denke ich.

                      Kommentar


                      • #12
                        ja ich denke auch deine variante ist besser und einfacher, aber ich muss wohl da nochmal meine tabellenstruktur überdenken.

                        bisher habe ich ne tabelle für:

                        - die bilder mit id, name, format....

                        - die formate mit dazugehörigen preisen

                        also hat bei mir das bild mit der produkt id 5 einmal format 1 oder es hat format 2 aber dann is die produkt id ja auch 5.

                        hast du da nen tip wie ich das ändern könnte?

                        und dann noch ne letzte frage:

                        bisher mache ich die berechnung für den gesamtpreis so:

                        for($i=0; $i < count($_SESSION['warenkorb']); $i++ ){
                        $gesamt = $_SESSION['warenkorb'][$i]['preis'] + $gesamt;
                        }

                        wenn ich das nach deiner methode mache, dann hab ich ja keinen durchlaufenden index mehr, wie kann ich dann den gesamtpreis zusammenrechnen?

                        DANKE

                        Kommentar


                        • #13
                          strucktur:

                          bilder
                          bid,name,beschreibung,...

                          formate
                          id,bid,format,preis,...

                          zu deiner frage: foreach.
                          OffTopic:
                          stört mich n bisschen, dass du das dicke geld machst, ohne wirklich plan zu haben.

                          Kommentar


                          • #14
                            ok das hat mir weitergeholfen. aber nochmal zur tabellenstruktur.

                            wenn ich ein neues bild hochlade, dann müssten ja in der tabelle formate (angenommen ich habe 3 verschiedene) jeweils 3 neue datensätze angelegt werden oder?

                            Kommentar


                            • #15
                              Original geschrieben von lx-club
                              ok das hat mir weitergeholfen. aber nochmal zur tabellenstruktur.

                              wenn ich ein neues bild hochlade, dann müssten ja in der tabelle formate (angenommen ich habe 3 verschiedene) jeweils 3 neue datensätze angelegt werden oder?
                              so ist es, also 1:n Beziehung

                              Kommentar

                              Lädt...
                              X