Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cum sterg mails din Promotions

Vanzare cumparare fara transfer b...

Receptie ciudata, in functie de t...

Donez medicamente renale ptr pisica
 Ce componenta e asta si ce ziceti...

Dupa 20 ani de facultate, am uita...

Mobile.de ofera imprumut de bani ...

problema test grila
 Digi24 a disparut de pe TV Lg

Drept de proprietate intelectuala...

Jante noi shitbox

Trinitas TV 4K
 Dacia 1316 cu 6 usi ...

Frecventa modificata radio

Un nou pericol pt batrani

Ar trebui sa vindem imobiliarele ...
 

Probleme cu un if

- - - - -
  • Please log in to reply
20 replies to this topic

#1
masackru

masackru

    Junior Member

  • Grup: Members
  • Posts: 45
  • Înscris: 04.09.2007
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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 ;)

#3
masackru

masackru

    Junior Member

  • Grup: Members
  • Posts: 45
  • Înscris: 04.09.2007
Multumesc, voi incerca

#4
Mr.Jinx

Mr.Jinx

    Gigant ca NY

  • Grup: Senior Members
  • Posts: 3,186
  • Înscris: 11.07.2006
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
masackru

masackru

    Junior Member

  • Grup: Members
  • Posts: 45
  • Înscris: 04.09.2007
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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
masackru

masackru

    Junior Member

  • Grup: Members
  • Posts: 45
  • Înscris: 04.09.2007
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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
masackru

masackru

    Junior Member

  • Grup: Members
  • Posts: 45
  • Înscris: 04.09.2007
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 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
masackru

masackru

    Junior Member

  • Grup: Members
  • Posts: 45
  • Înscris: 04.09.2007
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

 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 :)
Thread-ul ramane deschis :)

#13
masackru

masackru

    Junior Member

  • Grup: Members
  • Posts: 45
  • Înscris: 04.09.2007
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
explicit, nu implicit. Tu ai acum valori "implicite" care defapt nici nu exista. Ai uitat atributul value al tagului option

#15
masackru

masackru

    Junior Member

  • Grup: Members
  • Posts: 45
  • Înscris: 04.09.2007
Caldura+lipsa experientei=migrene... :) multumesc mult de tot, cred ca o sa mai dau pe aici

#16
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
invata bine html inainte de toate

#17
Mr.Jinx

Mr.Jinx

    Gigant ca NY

  • Grup: Senior Members
  • Posts: 3,186
  • Înscris: 11.07.2006

 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
asta era și problema la care mă gândeam eu la început, din cauza căruia are șanse să nu-i meargă...;)

Edited by Mr.Jinx, 28 June 2008 - 14:08.


#18
masackru

masackru

    Junior Member

  • Grup: Members
  • Posts: 45
  • Înscris: 04.09.2007
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

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate