PDA

Arată versiune īntreagă : Ajutor pentru functia 'if'



hpaul
30.12.2009, 15:28
Salut,

Am inceput sa invat PHP si am scris urmatorul script pentru a calcula doua numere.
Dilema e urmatoarea:
Vreau ca atunci cand unul sau amandoua campuri sunt goale sa afiseze un mesaj.

Eu am reusit doar atunci cand amandoua campuri sunt goale, dar daca unul contine un numar afiseaza mesajul de succes.

<html>
<body>
<form method="post" action="numar.php" name="trimite">
Numar 1<br>
<input type="text" name="nr1"><br>
Numar 2<br>
<input type="text" name="nr2"><br>
<input type="submit" value="Trimite">
</form>
</body>
</html>
<?php
$num1=$_POST['nr1'];
$num2=$_POST['nr2'];
$sum= $num1 + $num2;

$eroare="Datele nu sunt disponibile";
$succes="Suma numerelor $num1 si $num2 este $sum";

if (!$_POST['nr1'] && !$_POST['nr2']) {
echo $eroare;

} else {
echo $succes; }

?>

Sper sa nu va suparati ca va cer un lucru simplu. :D

micku7zu
30.12.2009, 15:30
Tu ai folosit && = AND , foloseste || = OR


(!$_POST['nr1'] || !$_POST['nr2'])
//sau
(!$_POST['nr1'] OR !$_POST['nr2'])
//amandoua functioneaza la fel.

FinalDestiny
30.12.2009, 15:31
Scuze,am inteles gresit ce voiai. Ceea ce a zis micku7zu mai sus e corect.

hpaul
30.12.2009, 15:46
Multumesc, stiu ca mai vazusem undeva, dar nu stiam ce inseamna.

hpaul
30.12.2009, 20:43
Scuzati ca intervin din nou dar am mai dat de o problema.
Am fisierul numar.php

<html>
<head>
<title>Calculator simplu</title>
</head>
<body>
<form method="post" action="afiseaza.php?actiune=aduna" name="trimite">
Numar 1<br>
<input type="text" name="nr1"><br>
Numar 2<br>
<input type="text" name="nr2"><br>
<input type="submit" value="Trimite">
</form><br />
<form method="post" action="afiseaza.php?actiune=afla_x" name="trimite">
Numarul 1:<br />
<input type="text" name="num1" /><br />
Numarul x:<br />
<input type="text" name="x" readonly="true" value=""/><br />
Suma:<br />
<input type="text" name="suma" /><br />
<input type="submit" value="Trimite" />
</form>
</body>
</html>


Si afiseaza.php

<php
if(!isset($_GET['actiune'])) $_GET['actiune']='';
switch($_GET['actiune'])
{
case 'aduna':

$num1=$_POST['nr1'];
$num2=$_POST['nr2'];
$sum= $num1 + $num2;

$eroare="Datele nu sunt disponibile";
$succes="Suma numerelor $num1 si $num2 este $sum";

if (!$_POST['nr1'] || !$_POST['nr2']) {
echo $eroare;

} else {
echo $succes; }

break;

case 'afla_x':
$nr1=$_POST['num1'];
$suma=$_POST['suma'];

function rezultat($nr2='', $suma2='') {
$x=$suma2 - $nr2;
echo $x;
}

echo "rezultat($nr1, $suma);";
break;
}
?>

De ce atunci cand trimit datele prin fisierul numar.php nu imi afiseaza nimic?

Puteti vedea aici hpaul.ro/numar.php

micku7zu
30.12.2009, 20:48
Probabil ca daca deschideai <?php si nu <php mergea.

La ultimul echo, nu iti va afisa rezultatul functiei daca folosesti " " pentru ca iti va lua drept text.


echo "rezultat($nr1, $suma);"; //corect dar nu returneaza rezultatul functiei pentru ca ia drept text

echo rezultat($nr1, $suma); // returneaza rezultatul functiei.

hpaul
30.12.2009, 20:56
Multumesc din nou. :)

Mai am o nedumerire, pentru a returna rezultatul pe pagina cu formularul ce ar trebui sa introduc?
Sper ca nu cer prea multe. :D

micku7zu
30.12.2009, 20:59
Atunci trebuie sa te folosesti de ajax. Daca vrei ca rezultatul sa apara fara sa se schimbe pagina te folosesti de ajax, sau poti fi 'smecher' si cand dai rezultatul scrii din nou formularul dar cu raspunsul inauntru.



P.S: Puteai baga toate codurile in aceasi pagina...


<html>
<head>
<title>Calculator simplu</title>
</head>
<body>
<?php
if(!isset($_GET['actiune'])) $_GET['actiune']='';
switch($_GET['actiune'])
{
case '':
echo '<form method="post" action="afiseaza.php?actiune=aduna" name="trimite">
Numar 1<br>
<input type="text" name="nr1"><br>
Numar 2<br>
<input type="text" name="nr2"><br>
<input type="submit" value="Trimite">
</form><br />
<form method="post" action="afiseaza.php?actiune=afla_x" name="trimite">
Numarul 1:<br />
<input type="text" name="num1" /><br />
Numarul x:<br />
<input type="text" name="x" readonly="true" value=""/><br />
Suma:<br />
<input type="text" name="suma" /><br />
<input type="submit" value="Trimite" />
';
break;
case 'aduna':
//cod aduna
break;
case 'afla_x':
// cod afla x
break;
}
?>
</form>
</body>
</html>

Daca mai ai alte nedumeriri revin in jumate de ora.

aurelt
31.12.2009, 08:11
hpaul: daca vrei sa folosesti la ceva iti dau codul pentru asta: http://aurel.ro/adunari/ .
A fost facut pentru copiii mei, sa invete adunarea si scaderea.

hpaul
31.12.2009, 10:22
Nu, eu vreau sa invat PHP. Si pentru ca ma descurc destul de bine la matematica, imi este mai usor.

aurelt
31.12.2009, 12:10
Ok, cum vrei.

fervoare
22.03.2010, 17:55
Codul tău este funcţional īn cazul cel mai fericit. Īn situaţia īn care formularul nu este trimis către server sau cānd elementele trimise sunt stringuri goale ("") fie returnează un warning fie, greşit, un mesaj de eroare de-al tău. O altă problemă este folosirea inutilă a unor variabile aici. Uite forma curată a ceea ce vrei să scrii:



<?php
if (isset($_POST['nr1']) && isset($_POST['nr2'])) {
$num1 = floatval($_POST['nr1']);
$num2 = floatval($_POST['nr2']);
echo sprintf('Suma numerelor %f si %f este %f',$num1,$num2,($num1+$num2));
} else {
echo 'Datele nu sunt disponibile';
}
?>


Codul poate fi simplificat pentru a permite sumarea unui numar nelimitat de numere



if(isset($_POST)) {
foreach($_POST AS $key => $value) {
// Sa sumam doar campurile care contin numere, conform conventiei
if (strpos($key,'nr') !== FALSE) {
if (!isset($suma)) {
$suma = 0;
}
$suma += floatval($value);
$valori[] = floatval($value);
}
}

// Am descoperit vreun numar in formular?
if (isset($suma)) {
echo sprintf('Suma numerelor %f este %f',implode(', ',$valori),$suma);
} else {
echo 'Datele nu sunt disponibile';
}
} else {
echo 'Datele nu sunt disponibile';
}


Best of luck! Mai multe tutoriale @fervoare.com; exemplu: Date de expirare pentru fişiere īn .htaccess (http://cu.fervoare.com/html-si-css/date-de-expirare-pentru-fiiere-in-htaccess/)