2016-09-15 1 views
1

Я использую внешний php-файл в поле «действие» моей HTML-формы, чтобы действия, упомянутые в файле php, выполнялись при нажатии кнопки «Отправить».PHP isset ('submit') всегда возвращается FALSE

Для этого я использовал функцию isset() в файле php.

Однако, я обнаружил, что функция isset всегда возвращает FALSE, что приводит к выполнению инструкции else (как видно из журнала консоли).

Если я удалю функцию isset() (и, следовательно, операторы if-else), то код работает чудесно.

Уточнить проблему в моем коде?

Также я видел в других постах, что мне нужно использовать другой аргумент наряду с isset(), например,

if(isset($_POST['submit']) && !empty($_POST["xyz"])) 

это вообще требуется?

P.S .: Я все еще на начальной стадии разработки страницы, и поэтому я прошу вас игнорировать проблемы безопасности моего кода, которые я подтверждаю, что он существует. :)

Мои Суб-коды:

Мой HTML Форма:

<form id="info-form" method="POST" action="form-submit.php"> 
    <label for="Name">What is your Name? </label> 
    <input required type="text" name="name" placeholder="Enter your full name here." /> 

    <label for="Email">What is your email ID? </label> 
    <input required type="email" name="email" placeholder="[email protected]" /> 

    <label for="mobile">What is your 10-Digit Mobile Number? </label> 
    <input required type="text" name="mobile" maxlength="10" /> 

    <button name="submit-form" type="submit" class="btn btn-lg btn-success"><i class="fa fa-paper-plane" aria-hidden="true"></i> 
   Submit 
    </button> 
    <button type="reset" class="btn btn-lg btn-warning"><i class="fa fa-undo" aria-hidden="true"></i> 
     Reset 
    </button> 
</form> 

Моя форма-submit.php файл:

<?php 
    if(isset($_POST['submit-form'])) 
    { 
     require("database-connect.php"); 

     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $mobile = $_POST['mobile']; 

     $sql = "INSERT INTO tbl_details ". 
       "(name,email_id,mobile_number) ". 
       "VALUES ". 
       "('$name','$email','$mobile')"; 

     mysql_select_db('db_info'); 
     $return = mysql_query($sql, $connect); 

     if(! $return) 
     { 
      die('Could not enter data: ' . mysql_error()); 
     } 

     echo "Entered data successfully\n"; 
     mysql_close($connect); 
    } 

    else 
    { 
     echo "Not Set\n"; 
    } 
?> 
+4

'submit'! =' Submit-form' (название вашей кнопки отправки). Поэтому вы хотите использовать 'isset ($ _ POST ['submit'-form'])' в своем заявлении. – Qirel

+0

См. Http://stackoverflow.com/q/4559925/476 – deceze

+0

Кроме того, примечание по стандартам безопасности и программирования: 'mysql_ *' функции устарели с PHP 5.5 (и ** полностью удалены ** в PHP 7), и вы должны [прекратить использовать их] (http://stackoverflow.com/q/12859942), если сможете. Вы должны выбрать другой API, который позволяет использовать подготовленные операторы (которые вы действительно должны * при работе с пользовательским вводом), например 'mysqli_ * 'или PDO - см. [Выбор API] (http://php.net /manual/en/mysqlinfo.api.choosing.php). В принципе, вы широко открыты для SQL-инъекции - читайте в [Как я могу предотвратить SQL-инъекцию в PHP?] (Http://stackoverflow.com/q/60174/) – Qirel

ответ

4

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

Что вы действительно хотите, чтобы проверить на сервере либо, если запрос был запрос POST, или устанавливаются значения, которые вы хотите работать, или как:

if ($_SERVER['REQUEST_METHOD'] == 'POST') … 
if (isset($_POST['name'], $_POST['email'], $_POST['mobile'])) … 

Самое разумное, что будет:

if ($_SERVER['REQUEST_METHOD'] != 'POST') { 
    header('HTTP/1.0 405 Method Not Allowed'); 
    exit; 
} 

или:

if ($_SERVER['REQUEST_METHOD'] != 'POST') { 
    header('Location: myform.html'); 
    exit; 
} 

После того как вы утверждали, что вы дело с правильным методом HTTP, обрабатывать ваши данные:

$data = filter_input_array(INPUT_POST, [ 
    'name' => FILTER_DEFAULT, 
    'email' => FILTER_VALIDATE_EMAIL, 
    'mobile' => FILTER_DEFAULT 
]); 

Как вы видите, вы даже не нужно взаимодействовать с $_POST непосредственно на всех. См. http://php.net/filter_input_array.

+0

Спасибо @deceze. Я не могу тебя отблагодарить. Вы не только приступили к ответу на мой вопрос, но и предоставили лучший способ делать вещи, что очень важно для новичка, подобного мне. Вы научили меня одному важному уроку - «некоторые незначительные косметические изменения в интерфейсе ... не должны иметь никаких последствий для бэкэнда». Большое спасибо. Кстати, если это не понятно для других начинающих, таких как я, решение, предоставленное в этом ответе, сработало! Приветствия. – ABor

+1

Совет. Узнайте больше о протоколе HTTP и получите представление о * обработке HTTP-запросов * на вашем сервере. Получите привычку тестировать свой сервер, выдавая необработанные HTTP-запросы, используя завиток (или любой другой инструмент, который вы предпочитаете). Получите ваш сервер, чтобы вести себя как надлежащая конечная точка HTTP. Это сделает ваши приложения более здравыми, чем мышление с точки зрения кнопок и форм HTML. – deceze

+0

Спасибо за подсказку. :) – ABor

0

Изменение ваша кнопка тег как этот. Надеюсь, это поможет вам!

<input name="submit-form" value="Submit" type="submit" class="btn btn-lg btn-success"> 

Спасибо!

+1

Зачем ему менять '

+0

Единственная цель кнопки отправки - отправить данные формы HTML на серверный скрипт, указанный в атрибуте ACTION формы. –

+1

Да ... так почему это должно быть ''? '

0

Вы должны использовать input -элемент вместо кнопки.

<button name="submit-form" type="submit" class="btn btn-lg btn-success"> 
<i class="fa fa-paper-plane" aria-hidden="true"></i>Submit 
</button> 

Должен быть заменен на вход, как это:

<input name="submit-form" value="ButtonText" type="submit" class="btn btn-lg btn-success" /> 

Значение входа текст отображается пользователю.

Кроме того, в вашем вопросе вы упоминаете isset('submit') и isset($_POST['submit']), в то время как другие правы, и это не имя существующего в вашем HTML-код, ваш PHP код действительно содержит правильный isset($_POST['submit-form']). Это вызывает небольшую путаницу для некоторых «быстрых» читателей ...


Что касается дополнительных !empty($_POST["xyz"])), для ваших целей (проверка, если форма является постбэком), что не будет необходимости.

+1

'

+0

@RocketHazmat Я этого не знал ... спасибо – x13

+0

Кроме того, 'значение'' ' * оба * отображаемый текст и представленное значение. '

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

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