Autor Zpráva
thomas9800
Profil *
if (!$error):
  $id_osoby = $_POST["id_osoby"];
  if (($id_osoby) > 0):
    $au = new Auth(); 
    $vysledek = $au->odstranOsobu($id_osoby); 
      if ($vysledek):
        $message = "<div class=\"message\">OK, ossoba s ID: $id_osoby byla vymazana!</div>"; 
      else:
        $message = "<div class=\"message\">Chyba! Tento uživatel v databázi neni!</div>";
      endif;
  endif;
else:
  $message = "<div class=\"message\">Nesprávná hodnota</div>";
endif;



nenapada nekoho jak bych mohl osetrit aby mi to hodilo hlasku: CHyba! Tento uzivatel neni v databazi? Protoze já kdyz tam dam cislo ktere v databazi neni, tak mi to stejne vzdycky hodi: OK, osoba s ID:... byla odstranena.....


nenapada nekoho neco prosim?
Rfilip
Profil
Dej sem zdroják třídy Auth
thomas9800
Profil *
Rfilip:
Dej sem zdroják třídy Auth

public function odstranOsobu($id_osoby) {
        try {
            $ap = new Application();                                                                     
                                  
            $odstran = 'DELETE FROM osoby WHERE id_osoby='.$id_osoby.'';
            $stid = oci_parse($ap->db, $odstran);
            oci_execute($stid);
                                  
      
            return true;
        } catch (Exception $e) {
            return false;
        }
    }
Alphard
Profil
Vždy vrátíte true (předpokládám, že oracle nevyhodí výjimku jen proto, že podmínka pro mazání nic nenašla).
Buď si nechat vrátit počet ovlivněných záznamů (oci_num_rows()), nebo před to dát ještě select, který to ověří.

Mimochodem, metoda oci_parse() má parsovat dotaz, kde jsou proměnné uvedené parametricky. Jestli tímto stylem (přímé dosazení proměnných) máte všechny dotazy, není to vhodné.
thomas9800
Profil *
Alphard:
Vždy vrátíte true (předpokládám, že oracle nevyhodí výjimku jen proto, že podmínka pro mazání nic nenašla).
Buď si nechat vrátit počet ovlivněných záznamů (oci_num_rows()), nebo před to dát ještě select, který to ověří.
>
>
Mimochodem, metoda oci_parse() má parsovat dotaz, kde jsou proměnné uvedené parametricky. Jestli tímto stylem (přímé dosazení proměnných) máte všechny dotazy, není to vhodné.

jj to sem taky nejak premyslel pres ten select...
vim ze asi moc otravuju ale nemohl by si mi to nejak napsat ten kod treba pomoci toho oci_num_rows? já to mam do bakalarske prace a da se rict ze se hp i trochu ucim...
Alphard
Profil
Snad return oci_num_rows($stid);
thomas9800
Profil *
Alphard:

už to jede, moc moc dekuju! jeste tady resim jednu vec, muzu se optat?


Alphard:
tak mi to stejne nejde, kdyz sem zadal cislo co tam je v databazi, tak ted mi to stale haze hlasku ze nenni v databazi a pritom tam je...dal sem ze vysledek ==1 a asi mi to vzdycky vrati jeden radek a nevim proc..

if (!$error) {
        $id_osoby = $_POST["id_osoby"];        
                

        if (($id_osoby) > 0) {
            $au = new Auth();            
            
            $vysledek = $au->odstranOsobu($id_osoby);            
            
            if ($vysledek == 1) {
                $message = "<div class=\"message\">OK, osoba s ID: $id_osoby byla vymazana!</div>";                
            } else {
                $message = "<div class=\"message\">Chyba! Tento uživatel v databázi neni!</div>";
            }
        } else {
            $message = "<div class=\"message\">Nesprávná hodnota</div>";
        }
    }
Alphard
Profil
Tu podmínku jste ani měnit nemusel, přetypuje se to automaticky.
Prostě tam dejte echo vysledek a zjistěte, co vám to vrací, trochu samostatnosti.
thomas9800
Profil *
Alphard:
prave ze to vzdycky vrati 0 :-(
thomas9800
Profil *
nemohl by nekdo poradit prosim?
thomas9800
Profil *
už sem to rozchodil
Alphard
Profil
Můžete napsat, v čem byl problém?
Já bych vám býval poradil víc, ale dle manuálu mělo mé řešení fungovat a s oraclem mám mizivé zkušenosti.
thomas9800
Profil *
no slo o to ze vsechno vraci neco jineho, execute vraci myslim porad 1 a pak jsem to zkousel jeste pres neco, a to vracelo stale 0, tak jsem udelal execute, to vraci porad true, jako ze se ten delete vzdy provede, a pak jsem si spocital pocet odstranenych radku pomoci oci_num_rows...

public function odstranOsobu($id_osoby) {
            $ap = new Application();                                                                     
            
            $odstran = 'DELETE FROM osoby WHERE id_osoby='.$id_osoby.'';
            $stid = oci_parse($ap->db, $odstran);
            oci_execute($stid);
            $r = oci_num_rows($stid);

            if($r == 1){
                return true;     
                }else{
                    return false;
                }
    }
Alphard
Profil
[#13] thomas9800
Takže oci_num_rows() funguje? To jsem vám psal hned...

public function odstranOsobu($id_osoby) {
            $ap = new Application();                                                                     
            
            $odstran = 'DELETE FROM osoby WHERE id_osoby='.$id_osoby.'';
            $stid = oci_parse($ap->db, $odstran);
            oci_execute($stid);
            return oci_num_rows($stid);    
}

Já jsem si právě myslel, že oci_num_rows() z nějakého důvodu nefunguje.

execute() nevracelo 1, ale true, protože nenastala chyba. 0 smazaných záznamů není chyba.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0