2014-02-18 2 views
0

Надеюсь, вы могли бы помочь мне с моей проблемой. Мой скрипт для проверки формы (проверяет, не является ли текстовое поле пустым, а если это число, обратите внимание: в моем регионе мы используем десятичное число, запятая не указана, PHP работает только с десятичной точкой) не работают должным образом. HTML:инструкция if-else не запускается

... 
<form action="http://localhost/kalkulacka.php" method="post" name="formular"> 
    <table> 
    <tr> 
     <td>1 dávka(g):</td> 
     <td><input type="text" name="davka" maxlength="7" size="7"></td> 
    </tr> 
    <tr> 
     <td>Bielkoviny v 1 dávke(g):</td> 
     <td><input type="text" name="bielkoviny" maxlength="7" size="7"></td> 
    </tr> 
    <tr> 
     <td>Sacharidy v 1 dávke(g):</td> 
     <td><input type="text" name="sacharidy" maxlength="7" size="7"></td> 
    </tr> 
    <tr> 
     <td>Balenie(g):</td> 
     <td><input type="text" name="balenie" maxlength="7" size="7"></td> 
    <tr> 
     <td>Cena za balenie(€):</td> 
     <td><input type="text" name="cena" maxlength="7" size="7"></td> 
    </tr> 
    <tr> 
     <td><input type="submit" value="Vypočítaj"></td> 
    </tr> 
    </table> 
</form> 

PHP:

<?php 

$davka=$_POST['davka']; 
$bielkoviny=$_POST['bielkoviny']; 
$sacharidy=$_POST['sacharidy']; 
$balenie=$_POST['balenie']; 
$cena=$_POST['cena']; 
$is_valid=true; 

function vypocitaj($serving, $proteins, $pack, $price) 
{ 
    $proteins_percentage=($proteins/$serving)*100; 
    $price_per_gram=$price/($pack/100*$proteins_percentage); 
    printf("1 gram bielkoviny stoji: %.3f", $price_per_gram); 
} 

if (empty($davka)||empty($bielkoviny)||empty($sacharidy)||empty($balenie)||empty($cena)) 
{ 
    echo "Some boxes are empty!"; 
    $is_valid=false; 
} 
else /*when I remove this whole "else" block, script at least verifies if are boxes empty by if statement above, but when I add this block, it not even verifies if are boxes empty*/ 
{ 
    if (!is_numeric($davka)) 
    { 
     $davka=str_replace(",", ".", $davka); 
     if (!is_numeric($davka) 
     { 
      $is_valid=false; 
     } 
    } 
    if ($is_valid==true && !is_numeric($bielkoviny)) 
    { 
     $bielkoviny=str_replace(",", ".", $bielkoviny); 
     if (!is_numeric($bielkoviny) 
     { 
      $is_valid=false; 
     } 
    } 
    if ($is_valid==true && !is_numeric($sacharidy)) 
    { 
     $sacharidy=str_replace(",", ".", $sacharidy); 
     if (!is_numeric($sacharidy) 
     { 
      $is_valid=false; 
     } 
    } 
    if ($is_valid==true && !is_numeric($balenie)) 
    { 
     $balenie=str_replace(",", ".", $balenie); 
     if (!is_numeric($balenie) 
     { 
      $is_valid=false; 
     } 
    } 
    if ($is_valid==true && !is_numeric($cena)) 
    { 
     $cena=str_replace(",", ".", $cena); 
     if (!is_numeric($cena) 
     { 
      $is_valid=false; 
     } 
    } 
    if ($is_valid) 
    { 
     vypocitaj($davka, $bielkoviny, $balenie, $cena); 
    } 
    else 
    { 
     echo "Only number are accepted!"; 
    } 
} 
?> 

Тот же сценарий, написанный в синтаксисе в JavaScript работает должным образом в JavaScript, но в PHP не будет работать. Когда я удалил основную инструкцию «else», основной оператор «if» работал, но когда я добавил его, весь код не работал. Когда я пробовал каждую функцию отдельно - они работали.

Я застрял в течение нескольких дней в этом, и я не могу двигаться. Я хотел бы знать причину, почему она не работает должным образом. Я ценю любые советы. Спасибо;) Извините за мой английский.

+0

Вы используете, если еще более одного раза. Можете ли вы добавить комментарии к своему коду, чтобы указать, что вы имеете в виду? –

+2

Как не работает? Являются ли переменные не ожидаемыми? Есть ли ошибки? Вы пробовали упростить свой код? Например, в блоке «main else» замените весь код простым «эхом» ELSE, достигнутым «», чтобы узнать, достигнут ли этот бит кода (т. Е. Ваш if conditional работает так, как вы ожидаете). – Etzeitet

+0

Я предлагаю вам заменить функцию 'empty()' на 'isset()' – Martijn

ответ

2

Я просто вставить этот код в моем IDE он сказал мне, что есть отсутствует закрывающая фигурная скобка:

if (!is_numeric($davka)) 
{ 
    $davka=str_replace(",", ".", $davka); 
    if (!is_numeric($davka) 
         //^missing brace here 
    { 
     $is_valid=false; 
    } 
} 

... это должно быть:

if (!is_numeric($davka)) 
{ 
    $davka=str_replace(",", ".", $davka); 
    if (!is_numeric($davka)) 
    { 
     $is_valid=false; 
    } 
} 

Если это решает проблему, пожалуйста, используйте редактор с подсветкой синтаксиса ...

+0

спасибо большое;) наконец я могу спокойно спать. Два дня я искал ошибку при манипуляции. Я чувствую себя таким глупым – user3320983

+1

@ user3320983 Ну, следующая вещь, которую вы должны сделать, это установить [Netbeans] (https://netbeans.org/), [Sublime] (http://www.sublimetext.com/) или другую среду IDE или редактор, который немедленно обнаружит эти ошибки. – feeela

+0

Я сделаю это. Время настолько дорого для этих ошибок – user3320983

Смежные вопросы