Autor Zpráva
Pevel
Profil *
Dobrý den,
mám menší s vícenásobným vkládáním zakoupených předmětů do MySQL.
Produkty do SESSION ukládám takto :

$_SESSION['kosik'][$_REQUEST['id']] = array ('id' => $_REQUEST['id'], 'count' => $_REQUEST["kosik_ks"], 'size' => $_REQUEST["kosik_size"], 'price' => $cena["kosik_cena"], 'price_without' => $cena_bez["kosik_cena"], 'name' => $_REQUEST["to_name"],'content' => $_REQUEST["to_content"], 'color' => $_REQUEST["kosik_color"]);


Když se však vše snažím zapsat do databáze, tak se mi tam vloží pouze první produkt v košíku. Jak se dá tento problém vyřešit?
Děkuji předem za odpovědi.
Tori
Profil
Pevel:
Ukažte jak to zapisujete do DB.
Pevel
Profil *
$sql[$row_product2['id']] = mysql_query('INSERT INTO admin_web_orders (door_name,door_description,door_size,door_color_css,door_price_without,door_price_with,door_price_production,door_ks,user_login,user_email,user_telephone,user_name,user_company,user_ic,user_dic,user_mesto,user_ulice,user_psc)
            VALUES 
           (\''.$_SESSION['kosik'][$row_product2['id']]['name'].'\',\''.$_SESSION['kosik'][$row_product2['id']]['content'].'\',\''.$_SESSION['kosik'][$row_product2['id']]['size'].'\',
           \''.$_SESSION['kosik'][$row_product2['id']]['color'].'\',\''.$_SESSION['kosik'][$row_product2['id']]['price_without'].'\',
           \''.$_SESSION['kosik'][$row_product2['id']]['price'].'\',\''.$celkova_cena_db_s.'\',\''.$_SESSION['kosik'][$row_product2['id']]['count'].'\',\''.$_SESSION['login'].'\',
           \''.$email.'\',\''.$telefon.'\',\''.$jmeno.'\',\''.$firma.'\',\''.$ic.'\',\''.$dic.'\',\''.$mesto.'\',\''.$ulice.'\',\''.$psc.'\')');   
           if($sql[$row_product2['id']]) {
           echo '<p>DONE!</p>';
           exit;
           }
           else {
           echo '<p>ERROR</p>';
           }
Tori
Profil
No ano, tohle zapíše jeden produkt. Odkud se bere proměnná $row_product? Nestačilo by prostě cyklem foreach projít $_SESSION['kosik'], a každý produkt buď vložit, nebo updatovat počet kusů a cenu (INSERT INTO ... ON DUPLICATE KEY UPDATE)?
Alphard
Profil
Máte všechna ta data ošetřená na jiném místě proti sql injection?
Jestli ten eshop myslíte vážně, měl byste k databázi přistupovat trochu jinak, třeba dibi, nebo aspoň PDO.
Pevel
Profil *
Tori : Napadla mě ještě jedna věc, a chtěl bych znát váš názor. Co takhle při každém příhozu zboží do košíku automaticky dát produkt do databáze (s určitou platností + IP adresou + jedinečným ID uživatele) a do session (s jedinečným ID uživatele). Poté jen kontrolovat, když je session prázdné, veškerá data s přidanou IP adresou a jedinečným ID uživatele smazat. Dalo by se to takto vyřešit? Bylo by to nějak efektivní? Jak by jste to vyřešili vy?

Alphard : Data samozřejmě ošetřená proti SQL Injection jsou. Tento e-shop je pouze pro mě a to zkušební ;).
ReVolt
Profil
Pevel:
tento postu osobně využívám (ke zboží také v db přidávám záznam s ID relace, takto jednoznačně rozliším obsah různých košíků), mohu poté analyzovat například opuštění eshopu během nákupu, také mohu zjistit jaké zboží uživatelé prochází, popř. zamýšlí koupit
Rellik
Profil
já teda zboží vkládám do košíku až po potvrzení objednávky a to zhruba tímto způsobem:

function zakazka($id_z) 
	{
	$idecka=array();
	$i=0;
	foreach ($_SESSION['kosik'] as $key => $value)
   	     {
            $idecka[$i]=array("ID" => $key,"pocet"=> $value["pocet"]);
            $i++;
            $zakazky ="insert into zakazky set zakaznik='".$id_z."', zbozi='".$key."', pocet='".$value['pocet']."', datum=now()";
				$result_zakazky = mysql_query($zakazky); 
				}
				session_destroy();
	}
Pevel
Profil *
Už opravdu nevím :D
Ať to zkouším jak to zkouším, vždy se mi tam uloží jen ten jeden. Nemohli by jste mi tu někdo napsat alespoň nějaký příklad, jak to z toho mého do té databáze vložit? :D Jsem už trošku bezradný :/
Děkuji moc
Tori
Profil
Pevel:
vždy se mi tam uloží jen ten jeden
To znamená, že sql dotaz se provádí jen jednou (=chybně sestavený skript), anebo že se provede vícekrát ale vloží se pouze jeden řádek (=nejspíš unikátní index na sloupci user_login nebo podobném)?
Pevel
Profil *
Objednávky ukládám zvláště do tabulky a jako unikátní index je nastaveno pouze ID.
Nejspíš určitě bude chyba u sestavení kriptu.
Natáhnu vám sem celé znění a snad mi pomůžete. Děkuji

$result_users_orders = mysql_query('SELECT * FROM admin_web_users WHERE login=\''.$_SESSION['login'].'\'');
           while ($row_users_orders = mysql_fetch_array($result_users_orders)) {
           $firma = $row_users_orders['firma'];
           $jmeno = $row_users_orders['skype'];
           $ic = $row_users_orders['ic'];
           $dic = $row_users_orders['dic'];
           $telefon = $row_users_orders['telefon'];
           $email = $row_users_orders['email'];
           $mesto = $row_users_orders['mesto'];
           $ulice = $row_users_orders['ulice'];
           $psc = $row_users_orders['psc'];
           }       
           $result_users22 = mysql_query('SELECT * FROM admin_web_products_sub');
           while ($row_product2 = mysql_fetch_array($result_users22)) {
           $celkova_cena_db_s = $_SESSION['kosik'][$row_product2['id']]['price'] * $_SESSION['kosik'][$row_product2['id']]['count'];
           $id = $_SESSION['kosik'][$row_product2['id']]['id'];
           
           $sql[$id] = mysql_query('INSERT INTO admin_web_orders (door_name,door_description,door_size,door_color_css,door_price_without,door_price_with,door_price_production,door_ks,user_login,user_email,user_telephone,user_name,user_company,user_ic,user_dic,user_mesto,user_ulice,user_psc)
            VALUES 
           (\''.$_SESSION['kosik'][$row_product2['id']]['name'].'\',\''.$_SESSION['kosik'][$row_product2['id']]['content'].'\',\''.$_SESSION['kosik'][$row_product2['id']]['size'].'\',
           \''.$_SESSION['kosik'][$row_product2['id']]['color'].'\',\''.$_SESSION['kosik'][$row_product2['id']]['price_without'].'\',
           \''.$_SESSION['kosik'][$row_product2['id']]['price'].'\',\''.$celkova_cena_db_s.'\',\''.$_SESSION['kosik'][$row_product2['id']]['count'].'\',\''.$_SESSION['login'].'\',
           \''.$email.'\',\''.$telefon.'\',\''.$jmeno.'\',\''.$firma.'\',\''.$ic.'\',\''.$dic.'\',\''.$mesto.'\',\''.$ulice.'\',\''.$psc.'\')');   
           if($sql[$id]) {
           echo '<p>DONE!</p>';
           exit;
           }
           else {
           echo '<p>ERROR</p>';
           }
           }
Tori
Profil
Způsobuje to ten exit na ř.26.
Není mi jasná ta logika - v tabulce web_products_sub jsou jen produkty objednané tím zákazníkem?? Anebo co se vlastně ukládá, když procházíte všechny produkty a dáváte k nim objednávky? (Nevidím, kde rozlišujete, jestli ten produkt má zákazník objednaný nebo ne.)

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:

0