Ankündigung

Einklappen
Keine Ankündigung bisher.

[* gelöst *] - Doppelte Bestellungen im Warenkorb markieren

Einklappen

Neue Werbung 2019

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

  • [* gelöst *] - Doppelte Bestellungen im Warenkorb markieren

    Guten Morgen,

    ich hab hier ein Problem an dem ich seit Tagen sitze und feststellen muß, dass meine PHP-Kenntnisse nicht ausreichen.
    Grundverständnis und Erfahrungen liegen vor, aber bei den Schleifen, Objekten und Arrays haperts noch erheblich bei mir.
    Es geht um folgendes...

    eine Klasse Article hat mehrere Variablen.
    Mit dem Objekt $article kann ich auf die Werte zugreifen.
    Innerhalb der Foreach-Schleife wird der Tabellen-Code für Warenkorb angezeigt und ausgegeben.
    Ich möchte doppelte Artikel im Warenkorb markieren.

    PHP-Code:

    //Hier mal vereinfacht dargestellt...

    foreach($articles as $article){
       if ( 
    /* .. .$article->titel == $article->titel .... */ ){
            echo 
    "Diese Bestellung existiert bereits.";
       }else{
          
    /*... irgendwas ...*/
       
    }


    Die Ausgabe "Diese Bestellung existiert bereits" steht bei allen Artikeln, egal ob Bedingung zutrifft oder nicht und das möchte ich nicht.
    Habe schon alles mögliche ausprobiert, aber bekomme es nicht hin.
    Es muß etwas außerhalb der Foreach-Schleife passieren, aber ich weiß nicht was und wie.
    Ich komme aus der Grafikdesign-Ecke und Programmieren ist wirklich nicht meine Stärke.
    Kann mir bitte jemand weiterhelfen? (Codeschnipsel oder Hinweise???)

    Vielen Dank!



  • #2
    Zitat von nomantus Beitrag anzeigen
    aber bei den Schleifen, Objekten und Arrays haperts noch erheblich bei mir.
    Dann stell deine Themen doch entsprechend unter "PHP Eisnteiger" ein.

    Zitat von nomantus Beitrag anzeigen
    Ich möchte doppelte Artikel im Warenkorb markieren.
    Die sollten garnicht erst vorkommen. In einem Warenkorb stehen Artikel i.d.R. einmalig drin, z.B. nach Artikel-ID indexiert. Dann brauchst du nur prüfen ob der Schlüssel schon vorhanden ist und entsprechend die Menge erhöhen - oder halt eine Meldung ausgeben.

    PHP-Code:
    <?php

    $cart 
    = [];
    $article = ['id' => 123'title' => 'foobar'];

    // Artikel einfügen oder Menge erhöhen
    if(!isset($cart[$article['id']])){
        
    $cart[$article['id']] = $article;
        
    $cart[$article['id']]['amount'] = 1;
    }
    else {
        
    $cart[$article['id']]['amount']++;
    }

    print_r($cart);

    // Artikel einfügen oder Menge erhöhen
    if(!isset($cart[$article['id']])){
        
    $cart[$article['id']] = $article;
        
    $cart[$article['id']]['amount'] = 1;
    }
    else {
        
    $cart[$article['id']]['amount']++;
    }

    print_r($cart);
    Zitat von nomantus Beitrag anzeigen
    Die Ausgabe "Dieser Bestellung existiert bereits" steht bei allen Artikeln, egal ob Bedingung zutrifft oder nicht und das möchte ich nicht.
    dann bringt's aber nichts Pseudocode zu posten, was sollen wir denn da machen?

    [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

    Kommentar


    • #3
      Um welche Software es sich handelt solltest du auch mitteilen, vielleicht handelt es sich ja um einen bekannten Fehler(Bug).

      Kommentar


      • #4
        MOD: Verschoben von PHP-Fortgeschritten
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Die Bedingung $article->titel == $article->titel ist natürlich unsinnig, die ist immer wahr. Um zu prüfen ob ein Titel doppelt vorkommt, gehst du jeden Artikel durch und prüfst ob er nochmal in dem Array vorkommt. Das machst du auch wieder mit einer Schleife.

          PHP-Code:
          foreach($articles as $article){
             
          $is_multiple false;
             foreach(
          $articles AS $article_check) {
                 if(
          $article !== article_check AND $article->titel == $article->title) {
                     
          $is_multiple true;
                     break;
                 }
             }
             if (
          $is_multiple) {
                  echo 
          "Dieser Bestellung existiert bereits.";
             }else{
                
          /*... irgendwas ...*/
             
          }

          Die Bedingung $article !== article_check stellt sicher, dass der Artikel nicht mit sich selbst verglichen wird.



          Kommentar


          • #6
            Hallo zusammen, vielen vielen Dank für eure Anregungen und Kommentare.

            @chorn
            Ich ware der Meinung, dass es eine Problemstellung für Fortgeschrittene ist, darauf hatte ich es bezogen.
            Deine Version ist die professionelle Variante, da hast du natürlich recht (mit der Einmaligkeit u. Menge), aber ich brauche es genau so wie es - Member "erc" - weiter unten geschrieben hat.
            Danke für die Erklärung und den Code.

            @hausl
            Danke MOD, wollte nur testen ob du schon fleißig bist.

            @protestic
            Es gab nur ein "Bug" und der geistert seit Tagen in meinem Kopf...

            @erc
            Der größte Dank geht an dich!
            Du hast genau verstanden was ich wollte und hast mir, trotz Dauerregen, den Tag gerettet.
            Als ich den Code gesehen habe, wußte ich: DAS IST ES!

            Wahrscheinlich hast du den Code aus "den Ärmeln" geschüttelt... deshalb gab es auch zwei kleine Fehler.
            Dollarzeichen hatte gefehlt bei !== article_check.
            Beim Vergleich muß es heißen: ($article->titel == $article_check->titel)

            Dann funktioniert es genau so wie ich es haben wollte. Danke, Danke, Danke!!!

            Hier die korrigiert Version:
            PHP-Code:
            foreach($articles as $article){
                foreach(
            $articles as $article_check) {
                    if((
            $article !== $article_check) && ($article->titel == $article_check->titel)) {
                       
            $is_multiple true;
                       break;
                    }
                }

                if (
            $is_multiple) {
                    echo 
            "*** DOPPELT ***";
                   }else{
                    echo 
            " /*...irgendwas...*/ ";
                }

            Vielen Dank nochmals an alle für die schnelle Unterstützung.

            P.S.: Wußte nicht das PHP-Code so glücklich machen kann
            So, jetzt kümmere ich mich erst mal um meine dicken Augenränder.

            Kommentar

            Lädt...
            X