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
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
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
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
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
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
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 *
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
nightfish:
Aha to mě nenapadlo. Když sem těm řádkům nastavil BIGINT tak to funguje. :-)
Díky
motik
Profil
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)

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