Autor Zpráva
Lorem
Profil *
Dobrý den, prosil bych o pomoc.
Snažím se sestavit můj první foreach dotaz a to sice se zápisem do db.
Mohli by jste mi prosím pomoci s tím, co dělám špatně?

Při zápisu do pole array používám :
$_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"]);


Při zápisu do db používám :
$result_or = mysql_query('SELECT * FROM admin_web_products_sub'); 
while ($row_or = mysql_fetch_array($result_or)) {    
$pole = $_SESSION['kosik'][$row_or['id']];    
}
foreach ($pole as $key => $value) {
    $query = mysql_query('INSERT INTO admin_web_orders (door_name,door_description,door_size,door_color_css,door_price_without,door_price_with,door_ks) VALUES (\''.$value[$name].'\',\''.$value[$content].'\',\''.$value[$size].'\',\''.$value[$color].'\',\''.$value[$price_without].'\',\''.$value[$price].'\',\''.$value[$count].'\')');
    echo "<li><a href='?id=$key'>$value</a></li>\n";
    if($query) {
    echo '<h1>ANO!!!</h1>';
    }
    else {
    echo '<h1>Ne e :(</h1>';
    }
}


Problém je ten, že se mi tam zapíšou absolutní kraviny :(
Jack Finger
Profil
Asi to celé vůbec nechápu, ale není problém v tom, že by místo:
while ($row_or = mysql_fetch_array($result_or)) {    
$pole = $_SESSION['kosik'][$row_or['id']];    
}

mělo být:
while ($row_or = mysql_fetch_array($result_or)) {    
$pole[] = $_SESSION['kosik'][$row_or['id']];    
}

?

Ty přiřazuješ do proměnné $pole řetězec, kdežto ve foreach ji potom chceš jako pole.

Ačkoliv je zvláštní, že to vůbec projde, protože foreach by měl házet chybu, že na vstupu není pole...
Lorem
Profil *
Výsledek je stejný :(
Už opravdu nevím, co dělám špatně. Dostala jsem takovýto domácí úkol a jsem z něj v pasti :(
Nemohl by jsi mi prosím pomoct sestavit ten dotaz, aby se to do té databáze zapsalo?
Joker
Profil
Lorem:
Co se vlastně do toho $pole má uložit?
Lorem
Profil *
Do $pole ukládám právě toto :
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"]);
Lorem
Profil *
Tedy s tím, že namísto $_REQUEST už jsou tam zapsána různá data
Rellik
Profil
Já tam sice nemám tolik položek, ale po drobné úpravě by to mělo fungovat stejně.
Můj způsob zápisu položek do DB:

$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();
Lorem
Profil *
Zkusím to ještě teď upravit a dám vědět ;) Děkuji
Lorem
Profil *
Tak jsem to tedy upravila takto:
$idecka=array();
    $i=0;
    foreach ($_SESSION['kosik'] as $key => $value)
            {
            $idecka[$i]=array("id" => $key,"count"=> $value["count"],"size"=> $value["size"],"price"=> $value["price"],"price_without"=> $value["price_without"],"name"=> $value["name"],"content"=> $value["content"],"color"=> $value["color"]);
            $i++;
            $zakazky ="insert into admin_web_orders set door_name='".$value['name']."', door_description='".$value['content']."', door_size='".$value['size']."', door_color_css='".$value['color']."', door_price_without='".$value['price_without']."', door_price_with='".$value['price']."', door_ks='".$value['count']."'";
                $result_zakazky = mysql_query($zakazky); 
                }
    if($zakazky) {
    echo '<h1>Done</h1>';
    }       
    else {
    echo '<h1>Error</h1>';
    }


Ale i přesto to do databáze zapisuje nějaká nesmyslná čísla a ještě ke všemu snad na 10 řádků. Přitom když si to nechám vypsat přímo na stránku, tak jsou v těch array uložené správné hodnoty :( :(
Tori
Profil
Lorem:
do databáze zapisuje nějaká nesmyslná čísla
Mezi řádky 7 a 8 si přidejte
echo "<br>$zakazky"; 
- tak uvidíte, co přesně jde do databáze. Pokud se to neshoduje s tím, co se pak uloží, je několik variant: porouchaná diakritika = špatně nastavené kódování pro připojení k databázi. Některé texty jsou na konci ukousnuté = posíláte např.100 znaků do sloupce typu CHAR(50) - použijte větší hodnotu nebo jiný dat.typ. Případně může být sloupec jiného typu než vkládaná data, např. pokus o uložení "ahoj" do sloupce DATETIME.

Ověření, jestli se dotaz provedl: Změňte ř.8 na:
$result_zakazky = mysql_query($zakazky) or die(mysql_error());
V případě chyby se skript ukončí a vypíše chybu. Ověřování na ř.10-15 není správně, protože 1.v proměnné $zakazky je text SQL dotazu, který vždy bude true, a 2. se v cyklu ta proměnná přepisuje, takže vlastně testujete jen výsledek posledního dotazu.
Lorem
Profil *
Děkuji za pomoc, ale momentálně jsem totálně zmatená :D. Při použití echo "<br />".$zakazky; mi to vypsalo tohle. Přitom data, která se mají zapsat a to ještě ke všemu jen na jeden řádek jsem označila tučně. Čím to je? :D

insert into admin_web_orders set door_name='2', door_description='2', door_size='2', door_color_css='2', door_price_without='2', door_price_with='2', door_ks='2'5
1

insert into admin_web_orders set door_name='5', door_description='5', door_size='5', door_color_css='5', door_price_without='5', door_price_with='5', door_ks='5'1
110

insert into admin_web_orders set door_name='1', door_description='1', door_size='1', door_color_css='1', door_price_without='1', door_price_with='1', door_ks='1'1
100

insert into admin_web_orders set door_name='1', door_description='1', door_size='1', door_color_css='1', door_price_without='1', door_price_with='1', door_ks='1'1
Produkt02

insert into admin_web_orders set door_name='1', door_description='1', door_size='1', door_color_css='1', door_price_without='1', door_price_with='1', door_ks='1'P
Popis

insert into admin_web_orders set door_name='P', door_description='P', door_size='P', door_color_css='P', door_price_without='P', door_price_with='P', door_ks='P'P
#00e7cf

insert into admin_web_orders set door_name='P', door_description='P', door_size='P', door_color_css='P', door_price_without='P', door_price_with='P', door_ks='P'#
Lorem
Profil *
Přitom když napíšu echo $value."<br />"; Tak se mi vše vypíše správně :(
Tori
Profil
Lorem:
„když napíšu echo $value."<br />"; Tak se mi vše vypíše správně :(“
Mělo by se správně vypsat "Array". Vypadá to, že už data v session jsou jiná než očekáváte, možná i jen pozůstatky z předchozích pokusů. Zkusila bych nejdřív vymazat session: $_SESSION = array(); a pak provést celou objednávku znova od začátku. Když před ten foreach přidáte var_dump($_SESSION);, mělo by se zobrazit pole, složené z polí, které vypadají jako v [#5]. Když ty sql dotazy budou zase divné a v session budou nesprávná data, tak hledejte všude mezi uložením do košíku a uložením košíku do DB, jak a kde se mění.
Lorem
Profil *
Když jsem si tedy nechala vypsat echo var_dump($_SESSION);
Napsalo mi to tohle:
array(6) { ["id"]=> string(1) "4" ["kusu"]=> string(2) "50" ["rozmery"]=> string(24) "8000x8000 - Poznamka2 CS" ["cena_s"]=> string(4) "8000" ["cena_bez"]=> string(4) "8200" ["barva"]=> string(14) "#2554 (Modrá)" }
Moc dobře tomu nerozumím :(
Lorem
Profil *
Tak ještě změna, když jsem košík začala rozlišovat podle ID, a nacpala tam 2 produkty, vypsalo mi to tohle
array(2) { [4]=> array(6) { ["id"]=> string(1) "4" ["kusu"]=> string(2) "50" ["rozmery"]=> string(24) "8000x8000 - Poznamka2 CS" ["cena_s"]=> string(4) "8000" ["cena_bez"]=> string(4) "8200" ["barva"]=> string(17) "#2550 (Tyrkys CS)" } [3]=> array(6) { ["id"]=> string(1) "3" ["kusu"]=> string(2) "60" ["rozmery"]=> string(35) "2000x5000 - Poznámka k rozměru CS" ["cena_s"]=> string(5) "25000" ["cena_bez"]=> string(5) "20000" ["barva"]=> string(11) "# (Černá)" } }

Zapisuji je tam takto :
$_SESSION['kosik'][$_REQUEST["data"]["id"]] = array('id' => $_REQUEST['id'], 'kusu' => $_REQUEST['kusu'], 'rozmery' => $_REQUEST['rozmery'], 'cena_s' => $_REQUEST['cena_s'], 'cena_bez' => $_REQUEST['cena_bez'], 'barva' => $_REQUEST['barva']);

Přitom jako $_REQUEST["data"]["id"] zasílám ID produktu.
Tori
Profil
Lorem:
Podle [#11] i [#15] to vypadá, že foreach neprochází jednotlivé objednané produkty, ale pouze položky jediné objednávky (a proto jsou v SQL dotazech vždy stejné hodnoty pro všechny proměnné). To znamená, že někde se data špatně ukládají do session, pravděpodobně jen do $_SESSION['kosik'], místo $_SESSION['kosik']['id']. Zkuste to zkontrolovat.
Je nějaký rozdíl mezi $_REQUEST['id'] a $_REQUEST['data']['id']?
Lorem
Profil *
Super! Opravdu se špatně zapisovalo $_REQUEST['data']['id'], takže jsem namísto toho použila jen $_REQUEST['id'].
Tori (a samozřejmě i všem ostatním): Strašně moc děkuji! :)

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