Autor Zpráva
thomas9800
Profil *
Když chci do databáze vložit dalšího uživatele a má stejné poštovní
směrovací číslo jako již uložený předchozí uživatel, tak mi to hodí
chybu, že nelze uložit dalšího uživatele se stejným PSČ. Nevím jak to
mám ošetřit když mi první SQL dotaz hodí chybu. Nenapadá Vás prosím
něco jak to obejít? nebo tam dát nějaký if?


takto vypada moje function:
public function createZamestnance($username, $password, $jmeno,
$prijmeni, $email, $tel, $mesto, $ulice, $cp, $psc, $irole) {
        //echo $username . "," . $password. "," . $jmeno. "," .
$prijmeni. "," . $email. "," . $telefoniCislo. "," . $mesto. "," .
$ulice. "," . $cp. "," . $psc. "," . $stat;

        try {
            $ap = new Application();

            $ida;
            $ido;
            $idpsc;

            $query = "INSERT INTO psc(PSC, mesto) " .
                    "VALUES ('" . $psc . "','" . $mesto . "') " .
                    "RETURN PSC INTO :idpsc";
            $stid = oci_parse($ap->db, $query);
            oci_bind_by_name($stid, ":idpsc", $idpsc, 20, SQLT_INT);
            oci_execute($stid);

            $query = "INSERT INTO adresy(ulice, cislo, PSC) " .
                    "VALUES ('" . $ulice . "','" . $cp . "','" .
$idpsc . "') " .
                    "RETURN id_adresy INTO :ida";
            $stid = oci_parse($ap->db, $query);
            oci_bind_by_name($stid, ":ida", $ida, 20, SQLT_INT);
            oci_execute($stid);

            $salt = sha1($_POST['email']);
            $password = sha1($_POST['pass1'] . $salt);

            $query = "INSERT INTO osoby(login, heslo, jmeno, prijmeni,
email, telefon, id_adresy, id_role) " .
                    "VALUES ('" . $username . "','" . $password .
"','" . $jmeno . "','" . $prijmeni . "','" . $email . "','" . $tel .
"','" . $ida . "','" . $irole . "') " .
                    "RETURN id_osoby INTO :ido";
            $stid = oci_parse($ap->db, $query);

            oci_bind_by_name($stid, ":ido", $ido, 20, SQLT_INT);
            oci_execute($stid);

            return true;
        } catch (Exception $e) {
            return false;
        }
    }
Alphard
Profil
Částečně navazuje na PHP skript - špatné hlášení, hlavně má rada parametrizovat dotazy.

Takhle to přece nemůžete řešit. Samotný návrh musí být úplně jiný, oddělte ty entity. Přečtěte si něco o návrhu aplikace, tohle nebudu vysvětlovat na diskusi.

A podívejte se na parametrické dotazy, někdo se bude jmenovat O'Neill a celé se to rozsype.
thomas9800
Profil *
Alphard:

jsem uplny zacatecnik, kdybych to vedel jak to mam udelat poradne tak bych se tu neptal :-(
opravdu nevim jak to jinak vyresit...proto prosim o jakoukoli pomoc


zkousel jsem i aby mi to vypsalo pocet radku z tabulky po tom selectu, ale vzdy mi to vypise 0, ikdyz tam to PSC jednou je.

public function overPSC($psc) {
            $ap = new Application();                                                                     
                                  
           
            $stid = oci_parse($ap->db, 'SELECT psc FROM psc WHERE psc='.$psc.'');
            oci_execute($stid);
            
            $r = oci_num_rows($stid);
           
           echo '  pocet rad:';
            echo $r;
           
            if($r == 1){
                return true;     
            } else {
                return false;
            }
    }
Alphard
Profil
thomas9800:
Kdybych to řešil já, asi bych se vykašlal na oddělenou tabulku psc s unikátním klíčem a dával bych psc přímo do adresy, kde žádný unikátní index nebude.
Váš návrh je teoreticky správný, prakticky ale přinese víc problémů, než užitku. Smysl by to začalo mít ve chvíli, kdy byste si stáhl všechny psč do databáze a dělal nějaké validace.

Použití oci_num_rows() je jiné, viz manuál. A tak šílené podmínky nemusíte sestavovat, ekvivalentní zápis je return $r == 1;

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: