Stránka: 1 z 1
| [ Príspevkov: 22 ] | |
Autor | Správa |
---|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 | 135 Bydlisko: Bratislava ... |
mám kod v ktorom mám odstavec podmienok:
if1
if2
if3
if4
atd (pre ukazku)
a teraz v com je problem. hned po nacitnuti stranky mi hodi niektoru hlasku s echo reakcie podmienok vyssie uvedenych. A teraz neviem ako tomu zamedziť. Neporadí niekto? skúšal som cosi také ako prvú podmienku dat if(isset($_POST['send'])) alebo nieco podobné, ale potom mi nevyhadzovalo uz echo hlasky...lebo ja som celý odstavec vlastne zbalil do toho ifu:
podmienka if pre kontrolu (isset){ - začiatok podmienky
odstavec podmienok - vnutro
} - koniec podmienky
a to pocohopiteľne nejde. tento problém mam uz dlhsie, vlastne vzdy ked vytvorim nieco s chybovymi hlaskami, ale rozhodol som sa s tým nieco robit az teraz.
ocenil by som nejaké priestorné riešenie a nemusí to byť na dve strany:)
dakujem
|
|
Registrovaný: 30.05.06 Prihlásený: 08.10.14 Príspevky: 1756 Témy: 35 | 35 Bydlisko: BA - WESTSIDE |
Mám to chápať tak, že si si vyvinul vlastný programovací jazyk a dúfaš, že ľudia tu na fóre mu budú rozumieť?
Teraz vážne, popis tvojho problému je úplne zlý, skús radšej konkrétne ukázať ten kód.
_________________
A. S. Tanenbaum píše: The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice. |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
myslim, ze tak, ako si to spravil, je to ok, cize az ked je odoslany formular, kontrolujes vsetko ostatne... chyba bude pravdepodobne v tvojom kode, lebo normalne to takto fungovat logicky musi...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Skús tie tvoje if-y obaliť do ďalšieho if-u
Kód: if(count($_POST)>0){...} Sú určite elegantnejšie riešenia, no iba toto som z popisu dokázal vycucnúť
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 | 135 Bydlisko: Bratislava ... |
no ok tu je ta cast kodu:
Kód: function prezivkavdb ($nick) { $vysledok=mysql_query("select * from users where nick='".$nick."'"); return (boolean) mysql_num_rows($vysledok); }
if ($_POST['pass'] != $_POST['pass2']){ die("Heslá musia byť rovnaké!"); $deasly = 1; } else { $deasly = 0; }
if(strlen($_POST['nick']) < 3){ die("Nick pravdaže nesmie obsahovať menej ako 3 znaky!"); $sneasly = 2; } else { $sneasly = 0; }
if(empty($nick) || empty($pass) || empty($pass2)){ die("Prázdnu registráciu môže chcieť odoslať len prázdna hlava!"); $weasly = 3; } else { $weasly = 0; }
if(prezivkavdb($nick)){ die("Ľutujem ale vami zvolené meno si už zaregistroval nejaký iný návštevník, prosím zvoľte iné."); $leasly = 4; } else { $leasly = 0; }
if($deasly == 0 && $sneasly == 0 && weasly == 0 && $leasly = 0){ die("Chyba! Ľutujem ale na serveri sa zrejme vyskytol problém, a tak vaša registrácia nie je platná.<br>Prosím skúste to znova neskôr."); } else { $sql = 'INSERT INTO users (`haha`, `haha`, `haha`, `haha`, `haha`, `laska`) VALUES ("'.$haha.'", "'.$haha.'", "'.$haha.'", "'.$haha.'", "'.$haha.'", "'.$haha.'")'; $result = mysql_query($sql); header("Location: http://localhost/accept.php"); }
v sql som tie nazvy premennych zmenil na haha s toho dovodu aby som...no proste mal som taku potrebu takze radsej mi pomozte
dakujem
|
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 | 30 Bydlisko: Bratislava |
chyba je uz ze pouzivas die.
die je ako echo + exit.
vyhodi ti text a ukonci skript. nic co mas za tym uz nezbehne
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Kód: if(count($_POST)){ function prezivkavdb ($nick) { $vysledok=mysql_query("select * from users where nick='".$nick."'"); return (boolean) mysql_num_rows($vysledok); }
if ($_POST['pass'] != $_POST['pass2']){ die("Heslá musia byť rovnaké!"); $deasly = 1; } else { $deasly = 0; }
if(strlen($_POST['nick']) < 3){ die("Nick pravdaže nesmie obsahovať menej ako 3 znaky!"); $sneasly = 2; } else { $sneasly = 0; }
if(empty($nick) || empty($pass) || empty($pass2)){ die("Prázdnu registráciu môže chcieť odoslať len prázdna hlava!"); $weasly = 3; } else { $weasly = 0; }
if(prezivkavdb($nick)){ die("Ľutujem ale vami zvolené meno si už zaregistroval nejaký iný návštevník, prosím zvoľte iné."); $leasly = 4; } else { $leasly = 0; }
if($deasly == 0 && $sneasly == 0 && weasly == 0 && $leasly = 0){ die("Chyba! Ľutujem ale na serveri sa zrejme vyskytol problém, a tak vaša registrácia nie je platná.<br>Prosím skúste to znova neskôr."); } else { $sql = 'INSERT INTO users (`haha`, `haha`, `haha`, `haha`, `haha`, `laska`) VALUES ("'.$haha.'", "'.$haha.'", "'.$haha.'", "'.$haha.'", "'.$haha.'", "'.$haha.'")'; $result = mysql_query($sql); header("Location: http://localhost/accept.php"); } }
Mimochodom prezývka je s tvrdým ý
Skús to bez takých stringov ako "Prázdnu registráciu môže chcieť odoslať len prázdna hlava", ťa to môže dostať do peknej šlamastiky ak niečo takto necháš a pošleš zákazníka do...
"Nick pravdaže nesmie obsahovať menej ako 3 znaky" skús tiež nejako inak napísať. To pravdaže tam strašne kričí
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 | 66 Bydlisko: Žilina |
okrem toho, baxo, tebe asi veľa nehovorí napríklad pravidlo "premenné pomenúvame výstižne", že? A nechci mi nahovoriť, že napr. premenná weasly je výstižné pomenovanie !
ďalej, tieto podmienky obalené v ďaľšej budeš musieť mať (keď si konečne zmeníš die na echo). if(isset($_POST['send'])) alebo nieco podobné to je akože čo? použi predsa podmienku s tým, že kontroluješ isset($_POST['name_z_inputu_submit']) ! bohvie jak máš nazvaný submitový input vo formulári keďže si ho tu neuviedol...
_________________ C#, PHP, ... |
|
Registrovaný: 02.09.08 Prihlásený: 23.01.13 Príspevky: 81 Témy: 17 | 17 |
zbytocne pouzivas dlhe nazvy premennych. na zaciatok skriptu si daj kod:
Kód: $pass = $_POST['pass'];
a uz hodnoty z $_POST['pass'] budes mat ulozene v premennej $pass. takto osetri aj ostatne premenne a nebudes musiet tolko tukat do klavesnice
|
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 | 135 Bydlisko: Bratislava ... |
el mariachi píše: okrem toho, baxo, tebe asi veľa nehovorí napríklad pravidlo "premenné pomenúvame výstižne", že? A nechci mi nahovoriť, že napr. premenná weasly je výstižné pomenovanie ! ďalej, tieto podmienky obalené v ďaľšej budeš musieť mať (keď si konečne zmeníš die na echo). if(isset($_POST['send'])) alebo nieco podobné to je akože čo? použi predsa podmienku s tým, že kontroluješ isset($_POST['name_z_inputu_submit']) ! bohvie jak máš nazvaný submitový input vo formulári keďže si ho tu neuviedol...
nemaj zbytocny strach. pokial ide o pomenuvavanie premennych, myslim si ze je kazdeho vec ako si ju nazve, ze. výstižné pomenovanie? ano? a co by si tam napisal ty? napísal by si tam jogurt, šlahačka, torta, citron? a nemozem si zmenit DIE na echo lebo by to nefungovalo. ked som mal echo tak to nefungovalo proste, islo to dalej prehliadlo to vsetky podmienky a odoslali sa informacie do databaze hned a prazdne, po nacitani stranky. die mi stopne script a pusti len vtedy ak je podmienka splnena, neviem co riesis teda - je to presne to co potrebujem
o submit vo formulari strach nemaj, ten sa volá send.
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Výstižné pomenovávanie je tvoja vec, pokiaľ pracuješ sám a nikdy nikto po tebe ten kód už nebude upravovať.
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 | 66 Bydlisko: Žilina |
nehnevaj sa baxo, ale v tejto téme sa ti ma podarilo rozosmiať chvíľu som si pozornejšie pozeral ten zdroják a logika proste nula bodov, dá sa to riešiť milionkrát efektívnejšie a prehľadnejšie, nehovoriac o tom, že toto proste fungovať správne nemôže, čo si aj sám priznal že to blbne. odporúčam preštudovať základy programovacej logiky a zásady správneho programovania, lebo toto čo si sem ukázal...
vieš, keby si si aspoň nechal poradiť, lenže ty sa ma spýtaš čo riešim, že tebe to takto vyhovuje !? fajn, idem sa vrátiť späť k svojej práci a tu už nebudem strácať čas
rooobertek, súhlasím len z časti... a čo keď povedzme pracuješ sám, ale zdrojáky ti majú pár tisíc riadkov a máš hentak doslova prasácky nazvané premenné ? nebodaj ešte keď ti to začne takto blbnúť a postneš svoj výtvor na internet nech ti ostatní začnú radiť.... v prvom rade, výstižné pomenovanie nie je pre srandu králikov alebo len pre spolupracovníkov, ono to totiž súvisí aj so znovupoužiteľnosťou kódu a aj s tým, že keď sa pozrieš povedzme za 5 rokov späť, aby si nestrávil hodiny len tým, že si budeš spomínať čo si tým chcel vlastne povedať
_________________ C#, PHP, ... |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Tých pár tisíc riadkov v súbore som nespravil ja. Nemám vlastné projekty, robím len pre firmy. Kde si videl moje premenné? Takmer nikdy nedávam svoje zdrojáky na web, takže je možné, že počas písania príspevkov som nejaký ten zdroják nejak zad.bal. Ak myslíš to, čo som hodil v tejto téme, bolo iba copy+paste a to som obalil jedným trápnym if.
Baxo, ty by si mal tento kus kódu vymazať a napísať ho úplne odznova. Z tohto nič nebude.
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 | 66 Bydlisko: Žilina |
rooobertek, zle si ma pochopil tým som chcel len ilustrovať čo chcem tými premennými povedať, nič konkrétne ohľadom tvojich zdrojákov to nebolo len som tým chcel povedať, že je viacero dôvodov prečo nepomenúvať premenné napr $mrkvicka keď kontrolujeme formulár a podobne a platí to pre každého, nielen pre tých čo pracujú v teame
_________________ C#, PHP, ... |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
teraz by uz konecne mohol nasledovat post, ktory sa priamo tyka nastoleneho problemu
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Riešenie: vymaž to a skús šťastie znova. Potom pošli, čo si vykúzlil.
Rád by som ťa upozornil, že v tomto prípade je $deasly bezpredmetné, pretože nemôže nikdy nastať, keď je tesne predtým die:
die("Heslá musia byť rovnaké!");
$deasly = 1;
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 | 135 Bydlisko: Bratislava ... |
ok ok, takze prepisal som to na funkcne riesenie. funguje to rovnako ako stare, nechapem preco som to tak neriesil hned
ale, stale neviem ako to aby sa DIE hlasky nehadzali hned po nacitani stranky, ved user este ani formular neodoslal a uz sa to hodi.
skusal som if isset na tlacitko submit send, ale to nepomohlo. mozno som to len zle zapisal ja neviem, ale kazdopadne by som prosil nejake riesenie, tu je novy prepisany cely kod (a nekritizujte zas to DIE, ja ho potrebujem a mam ho rad):
Kód: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <link rel='stylesheet' type='text/css' href='style.css'>
</head>
<title>test</title>
<body>
<form action="reg.php" method="POST">
<fieldset class="field" style="width: 100px; font-weight: bold;"><legend>Registrácia</legend>
Meno:<input id="la1" class="name" type="text" name="nick" maxlength="10"><br><br>
Heslo:<input id="la2" class="pass" type="password" name="pass" maxlength="12"><br><br>
Heslo znovu:<input id="la3" class="pass" type="password" name="pass2" maxlength="12"><br><br>
<input class="send" type="submit" name="send" value="Registruj">
</fieldset>
</form>
</body>
</html>
<?php
include "connect.php";
$nick = trim(htmlspecialchars(addslashes($_POST['nick']))); $pass = trim(htmlspecialchars(addslashes($_POST['pass']))); $pass2 = trim(htmlspecialchars(addslashes($_POST['pass2']))); $text = htmlspecialchars(addslashes($_POST['text'])); $ip = $_SERVER["REMOTE_ADDR"]; $pass = md5($pass); $cas = date('d.m.Y g:i a');
function prezivkavdb ($nick) { $vysledok=mysql_query("select * from users where nick='".$nick."'"); return (boolean) mysql_num_rows($vysledok); }
if ($_POST['pass'] != $_POST['pass2']){ die("Heslá musia byť rovnaké!"); } elseif(strlen($_POST['nick']) < 3){ die("Nick pravdaže nesmie obsahovať menej ako 3 znaky!"); } elseif(empty($nick) || empty($pass) || empty($pass2)){ die("Prázdnu registráciu môže chcieť odoslať len prázdna hlava!"); } elseif(prezivkavdb($nick)){ die("Ľutujem ale vami zvolené meno si už zaregistroval nejaký iný návštevník, prosím zvoľte iné."); }
else { $sql = 'INSERT INTO users (`pass`, `nick`, `ip`, `text`, `cas`) VALUES ("'.$pass.'", "'.$nick.'", "'.$ip.'", "'.$text.'", "'.$cas.'")'; $result = mysql_query($sql); header("Location: http://localhost/accept.php"); }
?>
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 | 66 Bydlisko: Žilina |
keď ti sem hodím prerobený kód, uznáš že si sa mýlil ?
_________________ C#, PHP, ... |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
a čo takto namiesto toho die dať $error="popis chyby"? Samozrejme na začiatok $error=false;
Potom dáš if(!$error){/* zapis do databazy a presmerovanie */}
To die by som nepoužíval na takomto mieste. Die je skôr na kritickejšie veci ako nesprávne vypísaný formulár.
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 | 135 Bydlisko: Bratislava ... |
el mariachi píše: keď ti sem hodím prerobený kód, uznáš že si sa mýlil ?
no dobre ale sak ja ti nic nevycitam. tu ide o to, ze to funguje. ja nedavam prednost efektivite pred funkcnostou. pozri, ty si urcite ostrielany programator ktory uz nieco vie ze, ale ja nie som az tak dobry na to aby som ked sa mi podari zbuchat konecne nieco funkcne, este efektivne vymyslal nieco...ten kod stejne nikdo nevidi, nie je pre zakaznikov teda si mozem vymysliet ake chcem hlasky, a mimochodom hlavny problem je o tom, ze potrebujem spravit to aby sa hlasky nevyhodili hned.
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Trosku som ti to poupravoval (hadam tam nie je ziadna chyba)... pre nazornost mozes skusit nasledujuci kod (vsetko v jednom subore):
Kód: <?php include "connect.php";
function prezivkavdb ($nick) { $vysledok=mysql_query("select * from users where nick='".$nick."'"); return (boolean) mysql_num_rows($vysledok); }
$errMsg = "";
if(isset($_POST['send'])) { $nick = trim(htmlspecialchars(addslashes($_POST['nick']))); $pass = trim(htmlspecialchars(addslashes($_POST['pass']))); $pass2 = trim(htmlspecialchars(addslashes($_POST['pass2']))); $text = htmlspecialchars(addslashes($_POST['text'])); $ip = $_SERVER["REMOTE_ADDR"]; $cas = date('d.m.Y g:i a');
if(empty($nick) || empty($pass) || empty($pass2)) { $errMsg .= "Musite vyplnit vsetky povinne udaje!<br>"; } else { if ($pass!=$pass2) { $errMsg .= "Heslá musia byť rovnaké!<br>"; }
if(strlen($nick) < 3){ $errMsg .= "Nick musi obsahovat minimalne 3 znaky<br>"; }
if(prezivkavdb($nick)){ $errMsg .= "Ľutujem ale vami zvolené meno si už zaregistroval nejaký iný návštevník, prosím zvoľte iné."; } } if(empty($errMsg)) { $pass = md5($pass); $sql = 'INSERT INTO users (`pass`, `nick`, `ip`, `text`, `cas`) VALUES ("'.$pass.'", "'.$nick.'", "'.$ip.'", "'.$text.'", "'.$cas.'")'; $result = mysql_query($sql); header("Location: http://localhost/accept.php"); } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <link rel='stylesheet' type='text/css' href='style.css'>
</head>
<title>test</title>
<body> <?php if(!empty($errMsg)) { echo $errMsg; } ?> <form action="" method="POST">
<fieldset class="field" style="width: 100px; font-weight: bold;"><legend>Registrácia</legend>
Meno:<input id="la1" class="name" type="text" name="nick" maxlength="10"><br><br>
Heslo:<input id="la2" class="pass" type="password" name="pass" maxlength="12"><br><br>
Heslo znovu:<input id="la3" class="pass" type="password" name="pass2" maxlength="12"><br><br>
<input class="send" type="submit" name="send" value="Registruj">
</fieldset>
</form>
</body>
</html>
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 | 135 Bydlisko: Bratislava ... |
vyborne Stenley! fakci to dobre
nieco takéto som potreboval, a nie diskusiu o tom preco tam je DIE alebo echo. dakujem velmi pekne
|
|
Stránka: 1 z 1
| [ Príspevkov: 22 ] | |
|