2013-02-15 2 views
0

Я делаю проверку безопасности с помощью своих переключателей, и она возвращает ошибку, хотя я не думаю, что она должна быть. Любая идея, что я делаю неправильно?Использование переключателей

Это класс для обновления

public function set ($iStatus) 
{ 
    $this->iStatus = $iStatus; 
} 
public function create() 
{ 
    if ($this->iStatus != 0 || $this->iStatus != 1 || $this->iStatus != 2) 
    { 
     echo "Your idea must have a valid status"; 
    } 
    else 
    { 
     //update the database 
    } 
} 

, а затем HTML форма

if (isset($_POST["submit"])) 
{ 
    $class->set($_POST["status"]); 
    $class->create(); 
} 
else 
{ 
    <input type="radio" name="status" value="0" checked/> 
    <input type="radio" name="status" value="1" /> 
    <input type="radio" name="status" value="2" /> 
} 

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

if ($this->iStatus != '0') { /*blah*/ } 

, но это не сработало. Поэтому я смущен

+0

Глупый вопрос, вы уверены, что форма типа POST, а не GET? Что вы получите, если вы замените $ _POST $ _REQUEST? – Vasilis

+0

нет, это сообщение, мне нравится думать за пределами коробки. У меня есть другие поля в форме, которые отлично работают, но когда я добавил эти переключатели, после этого он не будет представлен. – Alex

ответ

1

ваша логика назад:

if ($this->iStatus != 0 || $this->iStatus != 1 || $this->iStatus != 2) 

должно быть:

if ($this->iStatus != 0 && $this->iStatus != 1 && $this->iStatus != 2) 

полный тест:

<?php 
class foo{ 
    private $iStatus; 

    public function set($iStatus){ 
     $this->iStatus = $iStatus; 
    } 
    public function create(){ 
     if ($this->iStatus != 0 && $this->iStatus != 1 && $this->iStatus != 2){ 
      echo "Your idea must have a valid status"; 
     }else{ 
      echo "All good"; 
     } 
    } 
} 

if (isset($_POST["submit"])){ 
    $class = new foo; 
    $class->set($_POST["status"]); 
    $class->create(); 
}else{ 
    echo ' 
    <form method="post" action="./"> 
    <input type="radio" name="status" value="0" checked> 
    <input type="radio" name="status" value="1"> 
    <input type="radio" name="status" value="2"> 
    <input type="radio" name="status" value="3"> 
    <input name="submit" type="submit"> 
    </form>'; 
}?> 
+0

спасибо! вы правы. Я изменил операторы сравнения с == на! = и забыл также изменить логические операторы. Спасибо! – Alex

1

ошибка в выражении if. Вы должны подставить || с & &

в противном случае вы всегда получите сообщение об ошибке

Потому что даже если это 0 ваш, если оператор возвращает истину, потому что = 1 верно

+0

это не ошибка php, просто ошибка, которую у меня есть «Ваша идея должна иметь действительный статус», и я попробовал ее, по-прежнему та же проблема – Alex

+0

, когда вы печатаете значение $ iStatus, что у вас получается? – Vasilis

+0

Я получаю 0, так что да, я не знаю, что происходит – Alex

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