Probleme cu un if
Last Updated: Jun 28 2008 18:46, Started by
masackru
, Jun 28 2008 12:07
·
0
#1
Posted 28 June 2008 - 12:07
M-am impotmolit la urmatoarea problema, sper sa ma puteti ajuta. Avem urmatorul formular din pagina index:
Quote <form action="formular.php" method="post"> <select name="alege"> <option>1 <option>2 </select> <input type="submit" value="trimite!"> </form> Si urmatorul script care prelucreaza informatia: Quote <?php $valoare = $_POST['alege']; if ($valoare = 1) { include 'v1.php'; } if ($valoare = 2) { include 'v2.php'; } ?> Din cate am observat, scriptul nostru include ambele fisiere indiferent de oricare ar fi valoarea lui $valoare. De ce, si cum pot trece pese acest mic impediment. THX in advance |
#2
Posted 28 June 2008 - 12:11
greseala clasica ce se mai poate intampla si la profesionisti, ai folosit "=", simbolul citit "atribuie" in loc de simbolul "==" citit "este egal"
= este un operator "matematic" (nu chiar, defapt este un operator de mutare a unei valori de la o locatie la alta), == este operator logic. Pentru a te feri de astfel de erori, te sfatuiesc sa scrii mereu if(constanta == $variabila), acolo unde compari o constanta cu o variabila. Astfel PHP va raporta o eroare in cazul probabil in care scrii: "if(constanta=$variabila)", greseala fiind ca nu poti atribui o valoare unei constante. In cazul tau, valoarea numerica 1 este constanta. Aceasta tehnica iti permite sa-l faci pe PHP sa lucreze PENTRU tine, nu impotriva ta |
#4
Posted 28 June 2008 - 12:15
din cum ți-ai scris tu formularul și de asemenea cum l-ai prelucrat, și după greșeala menționată de OriginalCopy, tind să cred că scriptul tău tot nu va merge.
|
#5
Posted 28 June 2008 - 12:21
Ba da, a mers. Multumesc mult.
ps. daca ai o sugestie mai buna, sunt gata sa ascult, doar sunt incepator si vreau sa invat |
#6
Posted 28 June 2008 - 12:33
Gandeste-te ce se intampla daca userul da submit fara sa aleaga o valoare? Corect: valideaza inputul. Doar faptul ca atribui unei variabile $valoare valoarea itemului 'alege' a array-ului superglobal $_POST nu inseamna ca valoarea variabilei $valoare va fi buna/corecta/valida.
|
#7
Posted 28 June 2008 - 12:37
Si atunci ce sa fac? Sa mai pun un <option>alege, si
if ($valoare == alege) { echo 'va rugam alegeti o varianta'; } .... sau n-am inteles ce ai vrut tu sa imi zici? |
#8
Posted 28 June 2008 - 12:38
In plus, structura logica folosita de tine if/if nu are sens, caci o variabila nu poate avea ambele valori si 1, si 2, simultan. Ceea ce ai facut tu avea sens doar in cazul improbabil in care schimbai valoarea variabilei in primul block if:
if(1==$foo) { // do stuff $foo = 2; } if(2 == $foo) { //do stuff }insa in practica de obicei vedem asa ceva: if(1 == $foo) { //... } elseif(2 == $foo) { //.. } else { //invalid value, error }In plus, nu uita sa folosesti switch atunci cand ai mai mult de 2 blocuri if/else/elseif, caci e mai rapid. |
#9
Posted 28 June 2008 - 12:47
Varianta cu if/elseif nu merge doar pentru doua variante?
Da, ma gandeam ca trebuie cu switch insa momentan fac exercitii si nu stiam de ce nu imi iese. Probabil ca n-are sens ce am vrut eu sa pun acolo, sa explic putin. Ca prim "proiect" am facut o pagina index cu un formular care are diferite valori. In acel formular, am si un combo box de unde omul alege o cifra. In functie de acea cifra, sa ii dea un alt rezultat (povestioara). Puteam sa bag toate variantele intr-o singura pagina, insa era mult cod si ma incurcam. Asa ca am preferat sa fac fiecare poveste, urmand ca in functie de ce alege omul, sa ii arate povestea luata direct din pagina respectiva. Asta imi este si mai usor daca vreau sa adaug povesti noi, doar mai bag o pagina si un if(+varianta in formular). |
#10
Posted 28 June 2008 - 12:56
masackru, on Jun 28 2008, 12:37, said: Si atunci ce sa fac? Sa mai pun un <option>alege, si if ($valoare == alege) { echo 'va rugam alegeti o varianta'; } .... sau n-am inteles ce ai vrut tu sa imi zici? Ehm, incepusem sa scriu explicatii peste explicatii, dar facem invers, eu scriu un PoC cu un cod cat de cat elegant, iar tu revii cu brainstorming si spui (dupa ce citesti manualul) ce m-a motivat sa fac asa cum am facut si de ce e mai bine asa: <?php $valid_alege = array(1,2); ?> <form method="post"> <select name="alege"> <?php foreach($valid_alege as $value) { echo '<option>'.$value.'</option>'; } ?> </select> <input type="submit" value="trimite!"> </form> <?php if(isset($_POST['submit']) && 'trimite!' == $_POST['submit']) { //userul a postat formularul if(is_numeric($_POST['alege']) && in_array($_POST['alege'],$valid_alege)) { //'alege' are o valoare valida, acum include: $to_include = 'v'.$_POST['alege'].'.php'; if(is_readable($to_include)) { include($to_include); } } else { //eroare } } ?> LE: si am facut aceeasi gresealaa la generarea HTML-ului ca si tine. Afla care |
|
#11
Posted 28 June 2008 - 12:56
Uff, prea complicat pentru mine. Prefer sa iau lucrurile pas cu pas. Astazi invat un if, maine altceva, scriu niste proecte extrem de simple cu metode primitive, maine mai avansez cu o treapta. Voi ajunge la stadiul de halfprogramator in 20 ani, nu imi place sa fac lucruri complicate cand eu nu stiu notiuni simple. Despre ala... cred ca vb peste un an
|
#12
Posted 28 June 2008 - 12:58
masackru, on Jun 28 2008, 12:56, said: Uff, prea complicat pentru mine. Prefer sa iau lucrurile pas cu pas. Astazi invat un if, maine altceva, scriu niste proecte extrem de simple cu metode primitive, maine mai avansez cu o treapta. Voi ajunge la stadiul de halfprogramator in 20 ani, nu imi place sa fac lucruri complicate cand eu nu stiu notiuni simple. Despre ala... cred ca vb peste un an |
#13
Posted 28 June 2008 - 13:01
Greseala de Html... ori durerea asta nenorocita de cap, datorata nenumeratelor incercari ma face sa delirez, ori trebuia sa fie o valoare aleasa in mod inplicit?
|
#14
Posted 28 June 2008 - 13:10
explicit, nu implicit. Tu ai acum valori "implicite" care defapt nici nu exista. Ai uitat atributul value al tagului option
|
#15
Posted 28 June 2008 - 13:16
Caldura+lipsa experientei=migrene... multumesc mult de tot, cred ca o sa mai dau pe aici
|
|
#17
Posted 28 June 2008 - 14:07
OriginalCopy, on Jun 28 2008, 14:10, said: explicit, nu implicit. Tu ai acum valori "implicite" care defapt nici nu exista. Ai uitat atributul value al tagului option Edited by Mr.Jinx, 28 June 2008 - 14:08. |
#18
Posted 28 June 2008 - 18:37
De mers merge. Daca ii dau echo $_POST['numar'] chiar imi arata numarul chiar daca nu are atributul value. Give it a try
|
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users