Элемент Button с типом Submit и вызовами PHP - PullRequest
0 голосов
/ 26 ноября 2009

В последнее время я изменяю с <input type="button"> на <button> в моих формах, однако форма, обрабатываемая PHP, не будет отправляться в базу данных. Я что-то упустил в своем коде?

В основном все, что я сделал, изменилось так:

<input type="submit" name="submitAdd" value="Ask Question! " />

К этому:

<button type="submit" class="btn" name="submitAdd"><span><span>Ask Question!</span></span></button>

Вот основной код обработки PHP:


//Extract question from submission
$question = (isset($_POST["question"]))?$_POST["question"]:"";
$question_date = (isset($_POST["question_date"]))?$_POST["question_date"]:"";
$submitAdd = (isset($_POST["submitAdd"]))?$_POST["submitAdd"]:"";

//Open connect to database 
include("include/session.php");

//Prepare data for submission
$db_question = addslashes($question);
$db_question_date = addslashes($question_date);

//If form has been submitted, insert question into database
if ($submitAdd) {
    $sql ="INSERT INTO questions
    (question,question_date)
    VALUES ('$db_question', '$db_question_date')";
    $result = mysql_query($sql);
    if (!$result) {
        $message = "Failed to add question. MySQL said " . mysql_error();
    } else {
        header("Location:http://localhost/grill/register.php"); 
    }
}

Ответы [ 5 ]

2 голосов
/ 26 ноября 2009

Не работает, потому что версия кнопки не имеет значения. Ваш код говорит:

$submitAdd = (isset($_POST["submitAdd"]))?$_POST["submitAdd"]:"";

но у вас есть:

<button type="submit" class="btn" name="submitAdd"><span><span>Ask Question!</span></span></button>

Сравните это с:

<input type="submit" name="submitAdd" value="Ask Question! " />

, который имеет атрибут значения. Это значение передается в скрипт PHP и является тем, что вы тестируете. У вашего <button> его нет.

Без значения $submitAdd, даже при нажатии, будет иметь значение ''. Пустая строка оценивается как ложная, когда вы делаете это:

if ($submitAdd) {

Итак, пару изменений я бы порекомендовал. Во-первых, измените это:

$submitAdd = (isset($_POST["submitAdd"]))?$_POST["submitAdd"]:"";

до

$submitAdd = isset($_POST['submitAdd']);

, так как вы на самом деле не заботитесь о значении.

Во-вторых, независимо от этого, но все же стоит упомянуть, я бы сделал это:

$db_question = mysql_real_escape_string($question);
$db_question_date = mysql_real_escape_string($question_date);
$sql = <<<END
INSERT INTO QUESTIONS (question, question_date)
VALUES ('$db_question', '$db_question_date')
END;
1 голос
/ 26 ноября 2009
  1. Сделать поле ввода submitAdd скрытым
  2. Вызов функции Javascript по нажатию кнопки

Markup:

<input type="hidden" name="submitAdd" value="Ask Question! " />

<button type="submit" onclick="submitForm();" class="btn" name="submitAdd">
<span><span>Ask Question!</span></span></button>

Javascript:

function submitForm(){
    document.forms["form_name"].submit();
}

Я бы не рекомендовал это, поскольку вы зависите от javascript для отправки формы. Но даже Gmail делает это так: P

0 голосов
/ 07 января 2014

Была такая же проблема, и мое решение не использует JavaScript. В основном это то же самое, что пользователь vsr , ранее отвечавший.

Добавить скрытый ввод с данными, которые вы хотите добавить:

<input name="submitAdd" type="hidden" value=" Ask Question! ">

Назовите кнопку как-нибудь еще:

<button type="submit" class="btn" name="submitsForm"> Ask Question! </button>

Кнопка отправит форму, и нужные вам данные будут в скрытом вводе, и будут отправлены дальше. Надеюсь, это поможет!

0 голосов
/ 26 ноября 2009

за w3schools.com

Внимание! Если вы используете элемент button в форме HTML, разные браузеры будут отправлять разные значения. Internet Explorer отправит текст между тегами и, а другие браузеры отправят содержимое атрибута value. Используйте элемент ввода для создания кнопок в форме HTML.

http://www.w3schools.com/tags/tag_button.asp

0 голосов
/ 26 ноября 2009

Я предполагаю, что <button> теги не отправляются и, следовательно, не заканчиваются в $ _POST. Просто сделайте это в верхней части вашего скрипта, чтобы проверить:

print $_POST["submitAdd"];

Почему вы все-таки переключились с ввода на кнопку? Я бы порекомендовал добавить скрытое поле с именем form_action или что-то подобное и основывать свою логическую схему if на этом ... if ($_POST['form_action']) вместо if ($submitAdd).

...