Autor | Zpráva | ||
---|---|---|---|
Rellik Profil |
Zdravím,
mám problémek, který už opravdu nevím jak vyřešit. Jedná se o e-shop - zápis položek ze session s unikátním ID zákazníka. Na zápis sem si vytvořil funkci, která funguje dobře, ale ID zákazníka se ukládá úplně jiné než jaké by mělo a navíc pořád stejné a to i když sem změnil názvy proměnných, nebo nechal generovat číslo přímo ve volání funkce. Funkce na zápis a její volání: // zápis zboží z košíku do DB 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']."'"; $result_zakazky = mysql_query($zakazky); } session_destroy(); setcookie("kosik", $add); $zakaznik ="insert into zakaznik set zakaznik='".$id_z."', adresa='".$zasilaci_adresa."'"; $result = mysql_query($zakaznik); } // pár podmínek po jejichž splnění se volá funkce zápisu zakazka(rand(1111111111,9999999999)); // tady se generuje unikátní číslo, které by se mělo zapsat do tabulek v DB Když to zavolám zakazka('1232456'); tak se to uloží se zadaným číslem, když to číslo uložím do cookies a volám zakazka($_COOKIE['id_zakaznik']); nebo všemi možnými způsoby tak to pořád vkládá číslo 2147483647 !! Už si nevím rady. Zkoušel sem to posílat i přes hidden input, ale zase to samé číslo. Nikde není uloženo nikde se nic jiného negeneruje a pořád to dělá :( Tabulky: CREATE TABLE IF NOT EXISTS `zakazky` ( `id` int(11) NOT NULL AUTO_INCREMENT, `zakaznik` int(11) NOT NULL, `zbozi` text CHARACTER SET cp1250 COLLATE cp1250_czech_cs NOT NULL, `pocet` int(11) NOT NULL, UNIQUE KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ; CREATE TABLE IF NOT EXISTS `zakaznik` ( `id` int(11) NOT NULL AUTO_INCREMENT, `zakaznik` int(11) NOT NULL, `adresa` text CHARACTER SET cp1250 COLLATE cp1250_czech_cs NOT NULL, UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=80 ; |
||
motik Profil |
#2 · Zasláno: 23. 7. 2011, 18:19:01
Rellik:
„zakazka(rand(1111111111,9999999999)); // tady se generuje unikátní číslo, které by se mělo zapsat“ to negeneruješ unikátní, ale náhodné číslo!! šak máš tabulku zákazník, tak z ní použij to ID |
||
Rellik Profil |
#3 · Zasláno: 23. 7. 2011, 18:21:23 · Upravil/a: Rellik
motik:
> to negeneruješ unikátní, ale náhodné číslo!! > šak máš tabulku zákazník, tak z ní použij to ID neřeš unukátní nebo náhodné - to vím - to pak ověřuju. :) Do těch dvou tabulek to zapisuje - do jedné se zapíše ID zákazníka a jeho adresa a do druhé ID zákazníka, číslo zboží a jeho zboží. Jinak zákazník neexistuje, tak to nemám odkud brát... |
||
motik Profil |
#4 · Zasláno: 23. 7. 2011, 18:24:13
Rellik:
„Jinak zákazník neexistuje, tak to nemám odkud brát...“ první si vytvoř zákazníka a vrať si jeho ID a potom vytvoř zakázku a použij už to ID zákazníka (předtím jsem se špatně vyjádřil, sry) |
||
Rellik Profil |
#5 · Zasláno: 23. 7. 2011, 18:31:08
motik:
„první si vytvoř zákazníka“ To bych mohl, ale proč vytvářet zákazníka, který si třeba nic nekoupí. Pak budu mít v DB zbytečné údaje... Musel bych dát jedině aby se zákazník registroval a to nechci, protože to sám nemám rád, když chci koupit jen jedno zboží a vím že už nikdy tam nic kupovat nebudu, tak proč se registrovat. Proto sem chtěl , aby zákazníci byli odlišení až při odeslání objednávky tím id_zakaznik Chtěl sem vyřešit právě toto "chybu" s tím ukládáním toho čísla. Nechápu, kde se to číslo pořád bere. :( |
||
motik Profil |
#6 · Zasláno: 23. 7. 2011, 18:36:45
Rellik:
„To bych mohl, ale proč vytvářet zákazníka, který si třeba nic nekoupí. Pak budu mít v DB zbytečné údaje... Musel bych dát jedině aby se zákazník registroval a to nechci, protože to sám nemám rád, když chci koupit jen jedno zboží a vím že už nikdy tam nic kupovat nebudu, tak proč se registrovat.“ šak se nemusí registrovat, stačí když dá např. tlačítko "dokončit objednávku" a ty si první vložíš do DB zákazníka a následně tu jeho objednávku |
||
Rellik Profil |
#7 · Zasláno: 23. 7. 2011, 18:42:31
díky za rady, ale to pořád neřeší můj problém, proč a kde se bere to číslo, když není nikde uvedené. Jinak s tím "dokončením" objednávky to nepůjde - to by uložilo ID do jedné tabulky, ale já ho potřebuju do obou stejné - podle toho pak chci filtrovat výpis z DB - z jedné tabulky se vypíše to ID (číslo faktury) a adresa zákazníka a z té druhé zboží a jeho počet.
|
||
nightfish_ Profil * |
#8 · Zasláno: 23. 7. 2011, 18:53:26
generuješ číslo z rozsahu 1111111111..9999999999, avšak v databázi používáš datový typ int, do kterého se takhle velké hodnoty nevlezou (resp. hodnoty větší než 2147483647 se oříznou právě na tuto hodnotu)
|
||
Rellik Profil |
#9 · Zasláno: 23. 7. 2011, 19:10:16
nightfish:
Aha to mě nenapadlo. Když sem těm řádkům nastavil BIGINT tak to funguje. :-) Díky |
||
motik Profil |
#10 · Zasláno: 23. 7. 2011, 21:32:19
Rellik:
„Pak budu mít v DB zbytečné údaje.“ .. „ale já ho potřebuju do obou stejné“ pokud máš zákazníka pouze k jedné zakázce >> ID.zakázky = ID.zákazník a ušetříš v každé tabulce jeden zbytečný sloupec (přece tam nechceš mít zbytečné údaje) |
||
Časová prodleva: 13 let
|
0