tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
16
ZUGRIFFE
453
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Spelmann
    Spelmann Spelmann ist offline Mitglied Brokat
    Registriert seit
    Jul 2005
    Ort
    Nähe Bremen
    Beiträge
    303
    Ich versuche mich mal an einer Warenkorbfunktion.
    Funktioniert soweit. Wenn nun ein Artikel zwei Mal angeklickt wird möchte ich darauf hinweisen, daß der Artikel schon im Warenkorb ist.

    Der Warenkorb ist in einer Session gespeichert, die ein assoziatives Array enthält.
    Um nun mittels Vergleich der übergebenen Artikel ID und den schon in der Session gespeicherten IDs eine Übereinstimmung zu finden habe ich es mit in_array() und array_search() versucht. Ohne Erfolg.

    Funktionsweise von array_search
    PHP-Code:
    $test = array('ID' => '0815''Artikel' => '5');
            if ( 
    $x array_search '0815'$test ) ){    
                echo 
    $test[$x] . ' wurde gefunden!<br />';
                } 
    Mein Versuch das auf eine Session zu übertragen funktioniert aber nicht.
    PHP-Code:
    if ( $x array_search $_POST['idArtikel'], $_SESSION['warenkorb'] ) ){    
                echo 
    $_SESSION['warenkorb'][$x] . ' wurde gefunden!<br />';
                } 
    Klicke ich einen Artikel zwei mal an, ergibt die Ausgabe der Werte des Arrays, dass zwei Mal der selbe Artikel existiert. Die Prüfung hätte also zu einem Ergebnis führen müssen.
    Kann mir jemand sagen wo mein Fehler liegt?
     

  2. #2
    Avatar von ComFreek
    ComFreek ComFreek ist gerade online [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.364
    Blog-Einträge
    4
    Wie ist denn dein assoziatives Array genau aufgebaut?

    Folgender Code funktioniert: http://codepad.org/vTHVDrvp
    PHP-Code:
    <?php
    $test 
    = array('ID' => '0815''Artikel' => '5'); 
    $x '0815';

    if (  
    array_search($x$test) !== FALSE  )
    {
      echo 
    'Artikel schon vorhanden!';
    }
    else
    {
      echo 
    'Artikel _noch_ nicht vorhanden!';
    }

    ?>
    Spelmann bedankt sich. 
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  3. #3
    Avatar von Spelmann
    Spelmann Spelmann ist offline Mitglied Brokat
    Registriert seit
    Jul 2005
    Ort
    Nähe Bremen
    Beiträge
    303
    Hi ComFreek,
    Wie ist denn dein assoziatives Array genau aufgebaut?
    Bei jedem Klick auf einen Kaufbutton wird folgender Code ausgeführt:
    PHP-Code:
    $_SESSION['warenkorb'][] = array('idArtikel' => $_POST['idArtikel'],
        
    'stckArtikel' => $_POST['stckArtikel'],
        
    'bezArtikel' => $zeile->bezArtikel,
        
    'preisArtikel' => $zeile->preisArtikel); 
    Die Ausgabe aller Werte der Artikel im Warenkorb via Schleife zeigt, dass auch die IDs vorhanden sind.
    Ein Versuch, Dein Beispiel anzuwenden, führt interessanter Weise zu einem Fehler.

    PHP-Code:
    if($_SESSION['warenkorb'] AND $_POST['idArtikel']){ //Prüfung ob warenkorb schon existiert und ob eine ID übergeben wurde.
                
    if (array_search($_POST['idArtikel'], $_SESSION['warenkorb'] !== FALSE) ){
                    echo 
    "VORHANDEN";
                    }else{
                    echo 
    "NICHT VORHANDEN";
                    }
            } 
    Fehlermeldung:
    Code :
    1
    
    array_search() expects parameter 2 to be array, boolean given in

    Die Fehlermeldung bringt mich aber auch nicht so richtig weiter.
     

  4. #4
    Avatar von Raisch
    Raisch Raisch ist offline extraordinary bit
    Registriert seit
    Aug 2011
    Ort
    Berlin
    Beiträge
    333
    Versuch es mal so:
    PHP-Code:
    $_SESSION['warenkorb'][$_POST['idArtikel']] = array(
        
    'idArtikel'    => $_POST['idArtikel'], 
        
    'stckArtikel'  => $_POST['stckArtikel'], 
        
    'bezArtikel'   => $zeile->bezArtikel
        
    'preisArtikel' => $zeile->preisArtikel
    ); 
    Und so:
    PHP-Code:
    if ( isset( $_SESSION['warenkorb'], $_POST['idArtikel'] ) ) {
        if ( isset( 
    $_SESSION['warenkorb'][$_POST['idArtikel']] ) ) {
            echo 
    'VORHANDEN';
        } else {
            echo 
    'NICHT VORHANDEN';
        }

    Gruß

    Edit//
    Bei deiner IF-Abfrage war ist eine Klammer falsch gesetzt:
    PHP-Code:
    if (array_search($_POST['idArtikel'], $_SESSION['warenkorb'] !== FALSE) ) 
    so wäre es mMn richtig:
    PHP-Code:
    if ( array_search$_POST['idArtikel'], $_SESSION['warenkorb'] ) !== false 
    Geändert von Raisch (06.09.11 um 18:47 Uhr)
    Spelmann bedankt sich. 

  5. #5
    Avatar von Spelmann
    Spelmann Spelmann ist offline Mitglied Brokat
    Registriert seit
    Jul 2005
    Ort
    Nähe Bremen
    Beiträge
    303
    Hi Raisch,
    stimmt. Die Klammer war falsch. Das Haupt-Problem besteht aber weiterhin.
    Dein Beispiel funktioniert auch nicht.

    Da behauptet die Seite auch bei zwei verschiedenen Artikeln sie seien identisch. Zusätzlich gibts einen neuen Fehler:
    Code :
    1
    
    array_search() expects parameter 2 to be array, null given in
     

  6. #6
    Avatar von Raisch
    Raisch Raisch ist offline extraordinary bit
    Registriert seit
    Aug 2011
    Ort
    Berlin
    Beiträge
    333
    Zitat Zitat von Spelmann Beitrag anzeigen
    Hi Raisch,
    stimmt. Die Klammer war falsch. Das Haupt-Problem besteht aber weiterhin.
    Dein Beispiel funktioniert auch nicht.

    Da behauptet die Seite auch bei zwei verschiedenen Artikeln sie seien identisch. Zusätzlich gibts einen neuen Fehler:
    Code :
    1
    
    array_search() expects parameter 2 to be array, null given in
    Hast Du es denn mit meiner Methode mal probiert?

    Gruß
    Spelmann bedankt sich. 

  7. #7
    Avatar von Raisch
    Raisch Raisch ist offline extraordinary bit
    Registriert seit
    Aug 2011
    Ort
    Berlin
    Beiträge
    333
    //Doppelpost bitte löschen...
    Geändert von Raisch (06.09.11 um 19:36 Uhr) Grund: doppelpost
     

  8. #8
    Entwicklerpages Entwicklerpages ist offline Mitglied Silber
    Registriert seit
    Jul 2011
    Ort
    in einer 32 Bit ALU
    Beiträge
    63
    Ich bin mir jetzt nich ganz sicher, aber sucht array_search rekursiv?
    Denn du hast ja ein zweidimensionalles Array, und suchst nach dem ID eines Untergeorneten Arrays.
    Verstehst du was ich meine?
    Vieleicht wäre eine foreach schleife angebracht. In der gehst du alle Einträge durch.
    Spelmann bedankt sich. 

  9. #9
    Entwicklerpages Entwicklerpages ist offline Mitglied Silber
    Registriert seit
    Jul 2011
    Ort
    in einer 32 Bit ALU
    Beiträge
    63
    Hab hier nochmal ein Beispiel:
    PHP-Code:
    $vorhanden false;
    foreach (
    $_SESSION['warenkorb'] as $ware)
    {
      if (
    $_POST['idArtikel'] == $ware['idArtikel'])
      {
          
    $vorhanden true;
      }
    }
    if (
    $vorhanden == true) { echo "Sie haben diesen Artikel schon im Warenkorb";} 
    Spelmann bedankt sich. 

  10. #10
    Avatar von Spelmann
    Spelmann Spelmann ist offline Mitglied Brokat
    Registriert seit
    Jul 2005
    Ort
    Nähe Bremen
    Beiträge
    303
    Hey Entwicklerpages, danke so läufts!

    Obwohl ich mich doch wundere. Ist doch nur ein assoziatives Array. Oder ist das gleichzusetzen mit zweidimensional und nur eine andere Form?

    Das Array der Session hat doch die gleiche Struktur wie das Beispiel ganz oben im Thread (oder übersehe ich da was?). Und da funktioniert array_search.

    Na jedenfalls komme ich jetzt erstmal weiter. Mal sehen was es noch so zu entdecken gibt.
    Danke für eure Denkanstöße und Lösungen.

    Hier für andere Einsteiger ins Thema einfache Beispieldateien ohne Datenbankgedöns.

    FORUMindex.php
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    
    <?php
    session_start();
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Shop Startseite</title>
    <style type="text/css">
    <!--
    body, html {height:100%;padding:0;margin:0;font-family:Verdana, Geneva, sans-serif}
    fieldset{width:750px;border:#CCC dotted 2px}
    input{margin:0 0 5px 10px;}
    label{color:#999; font-size:0.8em; line-height:1em}
    td{ vertical-align:baseline}
    table{font-size:0.9em}
    .grau{color:#999}
    -->
    </style>
    </head>
     
    <body style="background-color:#FAF8F5">
    <?php
    if($_GET['job'] == 'resetCart'){
        session_destroy();
    }
    ?>
     
    <div style="width:960px; margin:0 auto; background-color:#FFF; height:100%;">&nbsp;
        <div style="margin:10% 0 0 100px">
          <h1>Startseite</h1>
          <fieldset><legend>Artikel</legend>
            <table width="700" border="0" cellspacing="0" cellpadding="2">
                    <?php
                    if(!isset($_SESSION['warenkorb'])){
                        $_SESSION['warenkorb'] = array();
                        } ?>
                            <tr>
                                <form action="FORUMwarenkorb.php" method="post" enctype="multipart/form-data" name="einkauf">
                                    <td style="text-align:right"><input name="bezArtikel" type="text" value="Skihose" /></td>
                                    <td style="text-align:left"><input name="preisArtikel" type="text" value="170.00 &euro;" /></td>
                                    <td><span class="grau">Stückzahl</span> <input name="stckArtikel" type="text" size="2" maxlength="2" value="1" /></td>
                                    <td><span class="grau">ID</span><input name="idArtikel" type="text" value="0815" size="4" /><input name="kaufen" type="submit" value="in den Warenkorb" /></td>
                                </form>
                            </tr>
                            <tr>
                                <form action="FORUMwarenkorb.php" method="post" enctype="multipart/form-data" name="einkauf">
                                    <td style="text-align:right"><input name="bezArtikel" type="text" value="Skijacke" /></td>
                                    <td style="text-align:left"><input name="preisArtikel" type="text" value="240.00 &euro;" /></td>
                                    <td><span class="grau">Stückzahl</span> <input name="stckArtikel" type="text" size="2" maxlength="2" value="1" /></td>
                                    <td><span class="grau">ID</span><input name="idArtikel" type="text" value="4711" size="4" /><input name="kaufen" type="submit" value="in den Warenkorb" /></td>
                                </form>
                            </tr>
                            <tr>
                                <form action="FORUMwarenkorb.php" method="post" enctype="multipart/form-data" name="einkauf">
                                    <td style="text-align:right"><input name="bezArtikel" type="text" value="Handschuhe" /></td>
                                    <td style="text-align:left"><input name="preisArtikel" type="text" value="45.00 &euro;" /></td>
                                    <td><span class="grau">Stückzahl</span> <input name="stckArtikel" type="text" size="2" maxlength="2" value="1" /></td>
                                    <td><span class="grau">ID</span><input name="idArtikel" type="text" value="007" size="4" /><input name="kaufen" type="submit" value="in den Warenkorb" /></td>
                                </form>
                            </tr>
            </table>
            </fieldset>
            <br />
            <input name="resetCart" type="button" value="Warenkorb leeren" onclick="window.location.href='FORUMindex.php?job=resetCart';" />     
      </div>
    </div>
    <a href="warenkorb.php">Zum Warenkorb ohne Bestellung</a>
    </body>
    </html>

    FORUMwarenkorb.php
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    
    <?php
    session_start();
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Warenkorb</title>
    <style type="text/css">
    <!--
    body, html {height:100%;padding:0;margin:0;font-family:Verdana, Geneva, sans-serif}
    fieldset{width:600px;border:#CCC dotted 2px;}
    input{margin:0 0 5px 10px;}
    label{color:#999; font-size:0.8em; line-height:1em}
    td{ vertical-align:baseline}
    .grau{color:#999}
    -->
    </style>
    </head>
     
    <body style="background-color:#FAF8F5">
    <div style="width:960px; margin:0 auto; background-color:#FFF; height:100%">
    &nbsp;
        <form action="FORUMwarenkorb.php" method="post" style="margin:10% 0 0 100px">
        <h1>Warenkorb</h1>
          <fieldset><legend>Warenkorb</legend>
            <?php
            /*if($_SESSION['warenkorb'] AND $_POST['idArtikel']){
                if (array_search($_POST['idArtikel'], $_SESSION['warenkorb']) !== FALSE ){
                    echo "VORHANDEN";
                    }else{
                    echo "NICHT VORHANDEN";
                    }
            }*/
            
            
            if($_SESSION['warenkorb'] AND $_POST['idArtikel']){
                $vorhanden = false;
                foreach ($_SESSION['warenkorb'] as $ware)
                {
                  if ($_POST['idArtikel'] == $ware['idArtikel'])
                  {
                      $vorhanden = true;
                  }
                }
                if ($vorhanden == true) { echo "Sie haben diesen Artikel schon im Warenkorb";}
            }
            
            //Wenn eine Artikel ID übergeben wird, wird der gewählte Artikel aus der Datenbank geholt
            if($_POST['idArtikel']){
                
                
                //Der ausgelesene Artikel wird in die Session Warenkorb eingetragen
                $_SESSION['warenkorb'][] = array('idArtikel' => $_POST['idArtikel'], 'bezArtikel' => $_POST['bezArtikel'], 'stckArtikel' => $_POST['stckArtikel'], 'preisArtikel' => $_POST['preisArtikel']);
                }
                
     
            //Ausgabe des Warenkorbs
            $count = count($_SESSION['warenkorb']);
            echo "in der Session befinden sich ".$count." Artikel";
            for ($i = 0; $i < $count; $i++) {
                echo "<p>";
                echo "<span class='grau'> id &raquo; ".$_SESSION['warenkorb'][$i]['idArtikel']." | ".$_SESSION['warenkorb'][$i]['stckArtikel']." x ".$_SESSION['warenkorb'][$i]['bezArtikel'];
              }
            
            //Datenbank schließen
            ?>
     
          </fieldset><br />
          <input name="weiter" type="button" value="weiter einkaufen" onclick="window.location.href='FORUMindex.php';" />
     
        </form>
        
    </div>
    </body>
    </html>
    Geändert von Spelmann (06.09.11 um 22:14 Uhr) Grund: Korrektur
     

  11. #11
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    nope dein Array hat diese Struktur
    PHP-Code:
    $test = array(array('ID' => '0815''Artikel' => '5')); 
    Spelmann bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  12. #12
    Avatar von Spelmann
    Spelmann Spelmann ist offline Mitglied Brokat
    Registriert seit
    Jul 2005
    Ort
    Nähe Bremen
    Beiträge
    303
    Jetzt klingelts langsam bei mir.
     

  13. #13
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Ansonsten lass die $_SESSION['warenkorb'] einfach mal ausgeben und schau es dir genau an
    PHP-Code:
    var_dump($_SESSION['warenkorb']); 
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  14. #14
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    Wozu eigentlich eine Suchfunktion?
    Man kann doch die Artikel mit Ihrer eindeutigen Artikelnummer im Warenkorbarray adressieren?

    PHP-Code:
    $_SESSION['warenkorb'][$ArtikelID
     

  15. #15
    Avatar von Raisch
    Raisch Raisch ist offline extraordinary bit
    Registriert seit
    Aug 2011
    Ort
    Berlin
    Beiträge
    333
    Zitat Zitat von Napofis Beitrag anzeigen
    Wozu eigentlich eine Suchfunktion?
    Man kann doch die Artikel mit Ihrer eindeutigen Artikelnummer im Warenkorbarray adressieren?

    PHP-Code:
    $_SESSION['warenkorb'][$ArtikelID
    Mein reden:
    Zitat Zitat von Raisch Beitrag anzeigen
    PHP-Code:
    $_SESSION['warenkorb'][$_POST['idArtikel']] = array(
        
    'idArtikel'    => $_POST['idArtikel'], 
        
    'stckArtikel'  => $_POST['stckArtikel'], 
        
    'bezArtikel'   => $zeile->bezArtikel
        
    'preisArtikel' => $zeile->preisArtikel
    ); 
    Gruß
    Napofis bedankt sich. 

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 10.11.10, 13:12
  2. Assoziatives Array (Zeilen Array) sortieren
    Von Gladiator6 im Forum PHP
    Antworten: 10
    Letzter Beitrag: 03.06.09, 00:36
  3. Antworten: 5
    Letzter Beitrag: 02.11.05, 23:09
  4. assoziatives Array aber wie?
    Von shinbo im Forum PHP
    Antworten: 1
    Letzter Beitrag: 01.06.05, 14:26
  5. Dynamisches assoziatives Array
    Von DanMcFly im Forum PHP
    Antworten: 7
    Letzter Beitrag: 26.04.04, 15:02

Stichworte