Autor | Zpráva | ||
---|---|---|---|
Pevel Profil * |
#1 · Zasláno: 4. 10. 2011, 23:19:19
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 |
#2 · Zasláno: 4. 10. 2011, 23:21:25
Pevel:
Ukažte jak to zapisujete do DB. |
||
Pevel Profil * |
#3 · Zasláno: 4. 10. 2011, 23:27:09
$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 |
#4 · Zasláno: 4. 10. 2011, 23:42:22
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 |
#5 · Zasláno: 4. 10. 2011, 23:55:41
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 * |
#6 · Zasláno: 5. 10. 2011, 23:29:51
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 |
#7 · Zasláno: 6. 10. 2011, 11:19:02 · Upravil/a: ReVolt
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 |
#8 · Zasláno: 6. 10. 2011, 16:00:56
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 * |
#9 · Zasláno: 8. 10. 2011, 18:36:46
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 |
#10 · Zasláno: 8. 10. 2011, 18:46:59
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 * |
#11 · Zasláno: 8. 10. 2011, 19:54:50
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 |
#12 · Zasláno: 8. 10. 2011, 20:02:48
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.) |
||
Časová prodleva: 13 let
|
0