1 Востаннє редагувалося Betterthanyou (07.12.2014 16:40:37)

Тема: Перший скрипт, калькулятор

Я щойно почав вивчать PHP і спробував написати калькулятор він працює але код вийшов не дуже, перша проблема це повторення коду на операціях в switch /,*,-,+,%, я спробував створити функцію яка б містила все це а мінявся лише знак

function math_operations($S)
{
    $sum=Suma($sum,$S,$num);
    $num=$sum;
    $sign=$S;
    $bool=1;
}


але $sum,$num функція не бачить, я так розумію я створював глобальні зміні, чому ж функція їх не бачить ?
Я напевно допустив ще якісь помилки будь-ласка повідомте про них.

<html>
<meta charset="utf-8"/>
<head>
<title>PHP</title>
</head>
Введіть своє імя
<form name="form1">
<input name="name_user" value=""/>
<input type="submit" name="button" value="Підтвердить"/>
</form>

<?php
if (($_GET["name_user"])!="")
{
echo "Доброго дня! ";
echo $_GET["name_user"];
echo " , це вітання створено за допомогю PHP & HTML<br>";
}
?>

<?php
$sum=$_POST["sum"];
$num=$_POST["calculator"];
$sign=$_POST["sign"];
$bool=$_POST["bool"];
if($bool==1)
{
    $bool=0;
    $num="";
}
switch($_POST["button1"])
{
    case 1:$num=$num."1";break;
    case 2:$num=$num."2";break;
    case 3:$num=$num."3";break;
    case 4:$num=$num."4";break;
    case 5:$num=$num."5";break;
    case 6:$num=$num."6";break;
    case 7:$num=$num."7";break;
    case 8:$num=$num."8";break;
    case 9:$num=$num."9";break;
    case ".":
    for($i=0;$i<strlen($num);$i++)
    {
        if(strcmp($num[$i],".")==0)
        break;
        else 
        if($i==strlen($num)-1)
        $num=$num.".";
    }
    break;
    case "c":$num="";$sum="0";$sign="";break;
    case "0":$num=$num."0";break;
    
    case "+":
    $sum=Suma($sum,$sign,$num);
    $num=$sum;
    $sign="+";
    $bool=1;
    break;
    
    case "-":
    $sum=Suma($sum,$sign,$num);
    $num=$sum;
    $sign="-";
    $bool=1;
    break;
    
    case "*":
    $sum=Suma($sum,$sign,$num);
    $num=$sum;
    $sign="*";
    $bool=1;
    break;
    
    case "/":
    $sum=Suma($sum,$sign,$num);
    $num=$sum;
    $sign="/";
    $bool=1;
    break;
    
    case "%":
    $sum=Suma($sum,$sign,$num);
    $num=$sum;
    $sign="%";
    $bool=1;
    break;
    
    case "=":
    $sum=Suma($sum,$sign,$num);
    $num=$sum;
    $sign="S";
    $bool=1;
    break;
}

function Suma($num1,$_sign,$num2)
{
    switch($_sign)
    {
        case "+":return $num1+$num2;break;
        case "-":return $num1-$num2;break;
        case "*":return $num1*$num2;break;
        case "/":if($num2==0) return "Помилка"; return $num1/$num2;break;
        case "%":return $num1%$num2;break;
        case "S":return $num1;break;
        default :
        return $num2;
    }
}
?>

<form name="form2" method="POST">
<input name='calculator' readonly value="<?php echo $num ?>"/>
<input type='HIDDEN' name="sum" value="<?php echo $sum ?>"/>
<input type='HIDDEN' name="bool" value="<?php echo $bool ?>"/>
<input type='HIDDEN' name="sign" value="<?php echo $sign ?>"/>
<br />
<input type='submit' name='button1' value='1'/>
<input type='submit' name='button1' value='2'/>
<input type='submit' name='button1' value='3'/>
<input type='submit' name='button1' style="width: 24px" value='+'/>
<br />
<input type='submit' name='button1' value='4'/>
<input type='submit' name='button1' value='5'/>
<input type='submit' name='button1' value='6'/>
<input type='submit' name='button1' style="width: 24px" value='-'/>
<br />
<input type='submit' name='button1' value='7'/>
<input type='submit' name='button1' value='8'/>
<input type='submit' name='button1' value='9'/>
<input type='submit' name='button1' style="width: 24px" value='*'/>
<br />
<input type='submit' name='button1' value='0'/>
<input type='submit' name='button1' value='.' style="width: 23px;margin-left: 1.3;"/>
<input type='submit' name='button1' value='%' style="width: 23px;margin-left: 5;"/>
<input type='submit' name='button1' value='/' style="width: 24px;margin-left: 2.5;"/>
<br />
<input type='submit' name='button1' value='=' style="width: 86px;margin-left: 2;"/>
<input type='submit' name='button1' value='c' style="width: 28px;"/>
</form>
</html>

2

Re: Перший скрипт, калькулятор

switch(x)
{
    case 1:$num=$num."1";break;
    case 2:$num=$num."2";break;
    ...

Чи не простіше

switch(x)
{
    case 1: case 2: ...
        $num=$num.x;
    break;
    ...

І так само зі знаками? Ну і взагалі можна це на if-и потім замінити.
Потім - ви спершу викликаєте Suma, а потім присвоюєте $sign значення.
Ну і виставляти стиль в style, а не в css - трохи не теє.
А, так, і <?php echo вираз; ?> можна записати коротше, як <?= вираз ?>:

<input name='calculator' readonly value="<?= $num ?>" />

Просто красивіше для коротких виразів.

Подякували: Betterthanyou1

3

Re: Перший скрипт, калькулятор

koala написав:

Потім - ви спершу викликаєте Suma, а потім присвоюєте $sign значення.

Дякую koala, $sign в мене служить пам'яттю для знаків, якщо я спочатку $sign присвою значення калькулятор буде робить не правильно

4

Re: Перший скрипт, калькулятор

global $sum,$num; //в верх функції

=)
Подякували: Betterthanyou, koala2

5

Re: Перший скрипт, калькулятор

if(strcmp($num[$i],".")==0)
break;
else
if($i==strlen($num)-1)
$num=$num.".";

використовуйте дужки

if (){
}else{
}

так набагато легше читати ;)

Подякували: koala, Betterthanyou2

6

Re: Перший скрипт, калькулятор

І фільтруйте GET параметри,шоб уникнути XSS вразливості
Наприклад

echo htmlspecialchars($_GET['name_user']);
=)
Подякували: Betterthanyou1