首页 文章

按钮元素类型提交和PHP挑战

提问于
浏览
0

最近我在我的表单中从 <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

    每w3schools.com

    重要提示:如果您在HTML表单中使用button元素,则不同的浏览器将提交不同的值 . Internet Explorer将在和标签之间提交文本,而其他浏览器将提交value属性的内容 . 使用input元素在HTML表单中创建按钮 .

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

  • 0

    它不起作用,因为按钮版本没有值 . 你的代码说:

    $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! " />
    

    它有一个value属性 . 此值将传递给PHP脚本,并且是您正在测试的内容 . 你的 <button> 没有 .

    没有值 $submitAdd ,即使点击,也会有一个值'' . 执行此操作时,空字符串的计算结果为false:

    if ($submitAdd) {
    

    所以,我会推荐一些改变 . 首先,改变这个:

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

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

    因为你并不真正关心 Value .

    其次,与此无关,但仍值得一提,我会这样做:

    $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;
    
  • 0
    • 隐藏 submitAdd 输入字段

    • 单击按钮调用Javascript函数

    标记:

    <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

    我猜 <button> 标签在__POST中结束了 . 只需在脚本顶部执行此操作即可验证:

    print $_POST["submitAdd"];
    

    你为什么要从输入更改为按钮呢?我建议添加一个名为 form_action 的隐藏字段或类似的东西,并将你的if逻辑基于... if ($_POST['form_action']) 而不是 if ($submitAdd) .

  • 1

    有同样的问题,我的解决方案不使用JavaScript . 它与之前回答的用户 vsr 主要相同 .

    使用要进行汇总的数据添加隐藏输入:

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

    以其他方式命名按钮:

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

    按钮将提交表单,您想要的数据将隐藏在输入中,并且可以进一步提交 . 希望能帮助到你!

相关问题