2016-07-27 3 views
-4

В моей форме есть несколько полей, которые я хочу проверить перед отправкой формы. Если есть ошибки, форма не будет отправлена, и пользователь будет предупрежден с ошибкой.Как проверить отправку формы на PHP?

С этой целью я пытаюсь поймать событие, на которое отправлена ​​форма, в php. Я должен получить предупреждение с текстом «Представлено». Однако я этого не делаю. Какую ошибку я делаю?

<?php 
if(isset($_POST['submit'])) 
    echo "<span>Submitted!</span>"; 
    sleep(2); 
?> 

<form action="next_page.php" method=post> 
*Other fields beside input* 
<input type="submit" name="submit" value="Submit form"> <br> 
</form> 
+0

HTML5 атрибут 'pattern' или вы можете использовать JS. Oh и 'submit' тип! – user5173426

+1

Вы видите элемент формы с именем «submit» в любой форме? Нет? И я тоже. Как вы можете ожидать увидеть его в своем коде? –

+0

Также похоже, что вы смешиваете javaScript и PHP (если только вы не написали свою собственную функцию alrt(), но на основе простоты этого вопроса я очень сомневаюсь в этом). –

ответ

3

alert() не функция, обеспечиваемая PHP, так что это будет ошибка.

Вы, кажется, сбиваете с толку JavaScript.

Чтобы вывести текст из PHP, вам необходимо установить echo за пределами <?php ... >? блоков. Чтобы запустить JavaScript, вам понадобится элемент <script>.

<?php 
if(isset($_POST['submit'])) { 
?> 
    <script> alert("Submitted!"); </script> 
<?php 
} 
?> 

<form action="next_page.php" method=post> 
    <!-- You also need to have a form control that matches the test you are doing --> 
    <button name="submit" value="X">Submit</button> 
</form> 
1

Ваша форма не соответствует форме submit. Также вам необходимо указать echo окно с предупреждением, так как alert() НЕ является функцией PHP.

<?php if(isset($_POST['submit'])) 
    echo"<script>alert('Submitted!');</script>"; ?> 

<form action="next_page.php" method=post> 
<input type = "submit" name = "submit" value = "Sub"/> 
</form> 
+0

Нет, его нет. Проверьте редактирование – RiggsFolly

+0

@RiggsFolly Ahh, теперь я вижу отредактированный! ':-)' – user5173426

0

Существует множество способов выполнить то, что вы хотели бы выполнить. Используете ли вы какие-либо рамки? Возможно, это было сделано для этого. Как правило, неплохо было полагаться на стандартные функции или библиотеки для проверки.

Если нет, вам придется сделать это самостоятельно и решить, когда вы хотите, чтобы он был серверным (php) или пользовательским (javascript). Независимо от того, вы должны проверить его на стороне сервера, чтобы поймать любые вредоносные сообщения.

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

<?php 
$username = ''; 
$warning = ''; 

if(isset($_POST['submit'])){ 
    if(!empty($_POST['username']) && strlen(trim($_POST['username'])) != 0){ 
     $username = $_POST['username']; 
     if(strlen($username) > 8){ 
      $warning = 'Only 8 characters allowed!'; 
     }else{ 
      header("Location: next_page.php"); 
     } 
    } 
    else 
    { 
     $warning = 'Username is empty, please provide a valid name.'; 
    } 
} 
?> 
<form action="form.php" method="post"> 
    <input type="text" name="username" value="<?php echo($username); ?>" /> 
    <?php echo($warning); ?> 
    <input type="submit" name="submit" /> 
</form> 

Этот фрагмент кода сохранит ввод в случае, если что не так, и только перенаправлять на следующую страницу, если данные были корректными. Пример использования JQuery может выглядеть следующим образом:

<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>event.preventDefault demo</title> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 
</head> 
<body> 


    <form action="form.php" method="post"> 
     <input type="text" name="username" id="formUsername" /> 
     <span id="warning"> </span> 
     <input type="submit" name="submit" /> 
    </form> 

    <script> 
    $(document).ready(function() { 

     $("form").submit(function(event) { 
      var username = $("#formUsername").val().trim(); 

      if(username.length > 0 && username.length < 9){ 
       $("form").submit(); 
      } 
      else if(username.length > 8) 
      { 
       $("#warning").text("More than 8 characters."); 
       event.preventDefault(); 
      } 
      else{ 
       $("#warning").text("Empty username?"); 
       event.preventDefault(); 
      } 
     }); 

    }); 
    </script> 
</body> 
</html> 
+1

Вы смешиваете '$ _GET' и' $ _POST' в своем первом примере, также форма по-прежнему отправляется через POST, а вторая строка будет вызывать 'UNDEFINED Variable', если только имя пользователя не установлено через URL-адрес , (все еще только в первом примере) – Epodax

+0

Спасибо, я немного улучшил его. Сначала я работал с другой идеей, поэтому смешивание с '$ _GET'. Это только означает, что вы можете дать кому-то идею о том, что можно сделать. У него много недостатков. – Seth

0

Как я понимаю, вы пытаетесь вывести сообщение на той же странице, после того, как форма отправлена, а не предупреждение. Атрибут action в теге HTML-формы перенаправляет вас на next_page.php. Поэтому оставьте атрибут действия пустым, и после того, как вы проверили все свои поля, используйте функцию php header() для перенаправления на next_page.php. Помните, что не выводить какое-либо сообщение перед функцией header(), в этом случае он не будет работать. ли smthing так:

<?php 
if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    $err_message = ''; 
    //validate your fields 
    if($_POST['yourfield'] == ''){ 
     $err_message = 'Please check your fields'; 
    } 
    //other validations 
    ... 
    if($err_message == ''){ 
     //redirect to your next page 
     header('Location:next_page.php'); 
     //prevent further code execution 
     exit(); 
    } 
    //output your message 
    echo $err_message; 
} 
?> 

<form action="" method=post> 
*Other fields beside input* 
<input type="submit" name="submit" value="Submit form"> <br> 
</form> 
0

Там же много способов, вы можете сделать это.

Здесь снова является альтернативой, если вы хотите, чтобы держать его на основе под эхо:

<?php 
if (isset($_POST['submit'])) 
{ 
    echo '<script>alert("Submitted!");</script>'; 
} 
?> 

<form action="" method=post> 
    *Other fields beside input* 
    <input type="submit" name="submit" value="Submit form"> <br> 
</form> 

EDIT: Вообще я стараюсь оставить PHP в верхней части той же страницы, вместо того, что указать в других местах это не так уж и нужно.

0

Способ, которым я решил использовать JQuery, с чем-то вроде, как показано ниже.

$('#form1').submit(
    function() { 
     //your validation rules here 
     var email = $('#YourEMail').val() 
     if(!validEmail(email)) 
     { 
      $('#invalidAlert').html('<i>Invalid e-mail address!</i>') 
      return false; 
     } 
     else 
      return true; 
    }); 
Смежные вопросы