Autor Zpráva
mafos
Profil
Dobrý večer,

snažím se rozchodit nákupní košík pomocí návodu na stránce http://php.vrana.cz/nakupni-kosik.php . Všechno mi funguje. Jen mám ten problém, že když chci změnit počet kusů zboží, tak nemůžu přijít na to jak to napsat :-( Zkusil jsem spoustu možností, ale nic mi nefunguje. Počet kusů mám načtené z formuláře v poli. Nejvíce jsem se přiblížil ke kýženému výsledku tímto kodem, ten ale stejně nefunguje, protože každému zboží přiřadí počet kusů, který je na posledním místě v poli pocet :-( Nenapadá Vás někoho co s tím?

Děkuji

foreach ($_POST["pocet"] as $key => $val)
                $link = mysql_connect ("xxx", "xxx", "xxx") or die ("Nepovedlo se připojit na databázový server");
                $db = mysql_select_db("xxx", $link) or die ("Nepovedlo se otevřít databázi");
                mysql_query("SET NAMES 'cp1250'") or die('Nepodařilo se nastavit jazyk');
                $result = mysql_query("SELECT * FROM produkty WHERE id IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')");
                while ($row = mysql_fetch_assoc($result)) {
                    $_SESSION["kosik"][$row["id"]] = $val;
                }
Alphard
Profil
Ten kód je celkově nehezký.
- připojení k db dejte na začátek a připojte se jen jednou, určitě ne v cyklu.
- ten dotaz na databázi tam byl jenom kvůli vypsání detailů o produktu, na úpravu množství ho vůbec nepotřebujete
- změnu počet kusů můžete udělat úplně stejně jako přidání nového $_SESSION["kosik"][intval($_GET["id"])] = intval($_GET["pocet"]); při existujícím id se hodnota přepíše (to už skoro máte, jen se zbavte toho while)
mafos
Profil
Ne, prostě to nechápu :-(

Takto to vypisuji a na stejné stránce bych chtěl pokračovat dalšími kroky, jenže prostě pořád nechápu jak změnit ten počet. Děkuji za pomoc.

if ($_SESSION["kosik"]) {
                if (isset($_POST["doprava"])){
                echo "doprava";
                foreach ($_POST["pocet"] as $key => $val){
                    $_SESSION["kosik"][intval($_GET["id"])] = intval($val);
                }
                }
                else{
                echo "    <h1>Nákupní košík</h1>
                        <div style=\"width: 500px; text-align: center; font-weight: bold; margin: 0 auto\">
                            <div style=\"float: left; margin-left: 10%; width: 20%; color: #b1bb25\"><br>Košík</div><div style=\"color: #10a3c4; width: 20%; float: left\">Doprava<br>a platba</div><div style=\"color: #10a3c4; width: 20%; float: left\">Kontaktní<br>údaje</div><div style=\"color: #10a3c4; width: 20%; float: left\">Potvrzení<br>objednávky</div>
                            <div><img src=\"images/o1.jpg\" width=500 height=13 alt=\"Ukazatel průběhu objednávky\"></div>
                        </div>
                    <div style=\"clear: both\"></div>
                    <table style=\"width: 100%; margin-top: 3%\">
                        <tr style=\"text-align: center; font-weight: bold\">
                            <td>Název produktu</td>
                            <td style=\"width: 9%\">Množství</td>
                            <td style=\"width: 13%\">Cena</td>
                            <td style=\"width: 20%\">Cena celkem</td>
                            <td style=\"width: 3%\"></td>
                        <tr>
                ";
                $link = mysql_connect ("xxx", "xxx", "xxx") or die ("Nepovedlo se připojit na databázový server");
                $db = mysql_select_db("xxx", $link) or die ("Nepovedlo se otevřít databázi");
                mysql_query("SET NAMES 'cp1250'") or die('Nepodařilo se nastavit jazyk');
                $result = mysql_query("SELECT * FROM produkty WHERE id IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')");
                $pocitadlo = 0;
                echo "<form action=\"nakupnikosik.php\" method=\"post\" enctype=\"multipart/form-data\">";
                while ($row = mysql_fetch_assoc($result)) {
                    echo "    <tr>
                            <td style=\"padding-left: 2%\">".$row["nazev"] . "</td>
                            <td style=\"text-align: center\"><input type=\"text\" name=\"pocet[".$pocitadlo."]\" size=1 style=\"text-align: center\" value=\"" . $_SESSION["kosik"][$row["id"]] . "\"></td>
                            <td style=\"padding-right: 2%; text-align: right\">".$row["cena"]." Kč</td>
                            <td style=\"padding-right: 2%; text-align: right\">".$row["cena"]*$_SESSION["kosik"][$row["id"]]." Kč</td>
                            <td style=\"text-align: center\"><a href=\"?smazat=" .$row["id"]."\"><img src=\"images/delete.gif\" style=\"vertical-align: middle; float: right\" alt=\"Smazat položku z košíku\"></a></td>
                        </tr>";
                    $pocitadlo++;
                }
                echo "</table>";
                echo "<div style=\"text-align: right\"><input type=\"submit\" name=\"doprava\" value=\"Pokračovat v objednávce\"></div>
                    </form>";
                mysql_free_result($result);
            }
            }
            else {
                echo "<h1>Nákupní košík</h1>";
                echo "Košík je prázdný";
            }



Prostě nějak nechápu, jak se mám dostat k tomu id, jestli mi rozumíte. GET[id] tam nechat nemůžu, to mi je jasný, protože ho nijak neodesílám, ale jak se teda k těm hodnotám mám dostat? To mi nějak jasný není :-(


Už jsem na to přišel :-) Díky moc


Tak jak jsem to udělal napíšu pro ostatní.

Jako jméno toho inputu s množstvím zboží jsem dal pole[id zboží]

<td style=\"text-align: center\"><input type=\"text\" name=\"pocet[".$row["id"]."]\" size=1 style=\"text-align: center\" value=\"" . $_SESSION["kosik"][$row["id"]] . "\"></td>

a pak výpis jsem udělal takto:

foreach ($_POST["pocet"] as $key => $val){
                           $_SESSION["kosik"][$key] = $val;
                      }



Není to zas tak strašný, ale strávil jsem nad tím několik hodin se přiznám. A přitom to potřebovalo jen lehké nakopnutí :-) Takže ještě jednou díky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: