2015-01-20 7 views
0

Ниже приведена некоторая проверка javascript. У меня есть простая форма. В первый раз, когда я нахожусь, отправьте подтверждение, и сообщения об ошибках и об ошибках. Если я получаю сообщение об ошибке, введите новые значения, которые все еще неверны, и нажмите «отправить» снова, проверка не работает, и значения передаются в мою форму php.Проверка на стороне клиента Javascript с помощью PHP

Вот Javascript

<script type="text/javascript" language="javascript"> 
<!-- 
function validateMyForm () { 
    var isValid = true; 
    if (document.form1.gamedate.value === "Select One") { 
      document.getElementById("errorMessage").innerHTML = ("Please select a game"); 
      isValid = false; 
    } else if (document.form1.wteam.value === "Select One") { 
      document.getElementById("errorMessage").innerHTML = ("Please select the winning team"); 
      isValid = false; 
    } else if (document.form1.wscore.value === "Select One") { 
      document.getElementById("errorMessage").innerHTML = ("Please select the winning score"); 
      isValid = false; 
    } else if (document.form1.lscore.value === "Select One") { 
      document.getElementById("errorMessage").innerHTML = ("Please select the losing score"); 
      isValid = false; 
    } else if (document.form1.wscore.value <= document.form1.lscore.value){ 
      document.getElementById("errorMessage").innerHTML = ("Winning score must be larger than the losing score"); 
      isValid = false; 
    } 
    return isValid; 
} 
//--> 
</script> 

PHP формы с *******, чтобы удалить некоторые данные

<form action="*********" method="post" name="form1"> 
     <div class="form-group"> 
      <label>Game Date:</label> 
      <select name="gamedate"> 
       <option>Select One</option> 
       <?php 
       $stmt = $db->prepare("***********)"); 
       $stmt->execute(array(':**********' => $_SESSION['**********'])); 
       while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
       echo '<option value="'; 
       echo $row['*********']; 
       echo '">'; 
       echo $row['*********']; 
       echo '</option>'; 
       } 
       ?> 
      </select> 
     </div> 
     <div class="form-group"> 
      <label>Winning Team</label> 
      <select name="wteam"> 
       <option>Select One</option> 
       <option value="1">Home</option> 
       <option value="0">Opponent</option> 
      </select> 
     </div> 
     <div class="form-group"> 
      <label>Winning Score</label> 
      <select name="wscore"> 
       <option>Select One</option> 
       <option value="1">1</option> 
       <option value="2">2</option> 
       <option value="3">3</option> 
       <option value="4">4</option> 
       <option value="5">5</option> 
       <option value="6">6</option> 
       <option value="7">7</option> 
       <option value="8">8</option> 
       <option value="9">9</option> 
       <option value="10">10</option> 
       <option value="11">11</option> 
       <option value="12">12</option> 
       <option value="13">13</option> 
       <option value="14">14</option> 
       <option value="15">15</option>   
      </select> 
     </div> 
     <div class="form-group"> 
      <label>Losing Score</label> 
      <select name="lscore"> 
       <option>Select One</option> 
       <option value="0">0</option> 
       <option value="1">1</option> 
       <option value="2">2</option> 
       <option value="3">3</option> 
       <option value="4">4</option> 
       <option value="5">5</option> 
       <option value="6">6</option> 
       <option value="7">7</option> 
       <option value="8">8</option> 
       <option value="9">9</option> 
       <option value="10">10</option> 
       <option value="11">11</option> 
       <option value="12">12</option> 
       <option value="13">13</option> 
       <option value="14">14</option> 
       <option value="15">15</option> 
      </select> 
     </div> 
     <div class="form-group"> 
     <input type="submit" value="Submit" onclick="javascript:return validateMyForm();">  
</form> 

Любые мысли о том, что я делаю не так?

+0

Удалить 'javascript:' из 'onclick'. 'onclick' уже запускает javascript. – DanFromGermany

ответ

-1

проверки Javascript отлично, однако вы также должны делать те же шаги проверки в вашем PHP обработчик формы. Затем, если он не пройдет проверку с обработчика формы PHP, вы снова перенаправляетесь на страницу с вашей формой. Предпочтительно предварительно заполнять допустимые поля и указывать, какие поля необходимо исправить.

Проверка Javascript должна рассматриваться как ДОБАВЛЕНИЕ к проверке на стороне сервера.

@danl Вот некоторые основные проверки PHP. Я не уверен, какой формат должен быть для вашей переменной gamedate. Остальные очень просты.

$haserror=false; 

$gamedate=$_POST['gamedate']; 
//not sure what is valid for gamedate. But you should check it against something 
if(strlen($gamedate)<1){ 
    $haserror=true; 
    $errordetail.=' Game Date must be selected'; 
} 

$wteam=$_POST['wteam']; 
if(!(($wteam==1) || ($wteam==0))){ 
    $haserror=true; 
    $errordetail.=' Winning team must be selected'; 
} 

$wscore=$_POST['wscore']; 
if(!is_numeric($wscore)){ 
    $haserror=true; 
    $errordetail.=' Winning score does not appear to be a valid number'; 
} 
$lscore=$_POST['lscore']; 
if(!is_numeric($lscore)){ 
    $haserror=true; 
    $errordetail.=' Losing score does not appear to be a valid number'; 
} 

if($lscore > $wscore){ 
    $haserror=true; 
    $errordetail.=' Losing score should not be more than the winning score.'; 
} 

if($haserror){ 
    echo $errordetail; 
    exit(); 
} 
else{ 
    echo' Success! . Process the data here'; 
} 
+0

Спасибо за ваш комментарий. Я очень новичок в программировании и просмотрел PHP-проверку, но все это пошло по моей голове. Глядя на код выше, есть простой способ проверить, что Select One не введен и что wscore больше, чем lscore с PHP? – danl

+0

добавил подтверждение php, и я не смог его полностью сломать! спасибо за помощь! – danl

4

Ваша функция проверки вызывается из-за неправильного места. Он должен быть вызван из onsubmit метода формы, а не представлять onclick метод баттона:

<form action="*********" method="post" name="form1" onsubmit="return validateMyForm()"> 
+0

Спасибо за совет. Я обновил местоположение onsubmit и протестировал, и он по-прежнему позволяет мне вводить ошибочные данные, но теперь он принимает больше кликов и обновлений, чтобы, наконец, принять его, поэтому мы двигаемся в правильном направлении по крайней мере :-) – danl

+0

@danl, Возможно, это связано с вами, используя '===', а не просто '=='. Попробуйте использовать только '==' и посмотрите, что произойдет. – developerwjk

+0

Все еще работает некорректно с == вместо ===. Я начинаю задаваться вопросом, как-то я должен полностью очистить переменную каждый раз, когда отображается сообщение об ошибке. – danl

0

Вы пытаетесь захватить значение в раскрывающемся списке в вашем JavaScript, но тогда вы сравниваете его с текстом в раскрывающемся списке. Либо присвойте значения параметрам раскрывающегося списка по умолчанию, либо сравните их, либо измените свой javascript, чтобы захватить текст (например, «Выбрать один»).

+0

Я думал, что это сработало, поскольку я не получал ошибок, независимо от того, насколько сильно я пытался до тех пор, пока я не отправил форму правильно, а затем вернулся на страницу формы, чтобы войти в другой выбор, и я снова могу отправить ошибочные данные. :-( – danl

+0

Прокомментируйте содержимое ValidateMyForm() и просто всегда возвращайте false. Можно ли отправить ошибочные данные тогда? Если нет, начните раскомментировать и протестировать каждый валидатор отдельно. Добавьте предупреждение, чтобы отобразить представленные данные на сверху, чтобы вы могли убедиться, что вы правильно держите данные и что ваши сравнения точны для каждого шага проверки. – pwarrenp

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

  • Нет связанных вопросов^_^