2009-11-25 45 views
0

最近我在我的表单中将<input type="button">更改为<button>,但是由PHP处理的表单不会提交到数据库。我在代码中丢失了什么吗?带类型提交和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"); 
    } 
} 
+0

嗯,只是好奇......为什么两个嵌套跨度? – cletus 2009-11-25 23:42:39

+0

你想'mysql_real_escape_string'。 'addslashes'在任何情况下都不安全。 – bobince 2009-11-26 00:45:54

回答

0

我猜<button>标签不会被提交,因此不会以$ _POST结尾。只需在脚本顶部执行以验证:

print $_POST["submitAdd"]; 

无论如何,您为什么要从输入更改为按钮?我会建议添加一个名为form_action或类似的隐藏字段,并根据您的逻辑... if ($_POST['form_action'])而不是if ($submitAdd)

+0

是的没有打印。我应该怎么做才能解决这个问题? (PHP新手) 要回答你的问题按钮提供了一致的样式的更好的方式(除了IE6)。查看Google或Twitter上的按钮。我正在做类似的事情。 http://stopdesign.com/eg/buttons/3.0/code.html – Katundu 2009-11-25 23:48:12

0

每w3schools.com

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

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

2

它不起作用,因为按钮版本没有价值。您的代码表示:

$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,即使点击,也会有值''。当您这样做时,空字符串的计算结果为false:

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; 
+0

谢谢,我明白,这工作。 所以我明白和了解,为什么改变其他代码段,有什么优势? – Katundu 2009-11-25 23:57:40

+0

优点是双重的:1)你的代码完全符合你的意图(因为你只关心按钮是否被按下,而不是它的值),2)简洁(你为了达到同样的目的而编写的代码越少,它越好一般来说)。 – cletus 2009-11-26 00:18:16

+0

更好的是,包含一个'hidden'字段来表示表单正在提交。你通常不希望依赖提交控制给你一个价值,因为提交控件的时间有点怪异,当它是一个按钮时,它的价值是什么。 – bobince 2009-11-26 00:51:21

1
  1. 充分利用submitAdd输入字段隐藏
  2. 呼叫按钮的点击一个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

有同样的问题,我的解决方案不使用JavaScript。它主要和用户vsr以前的回答一样。

添加一个隐藏的输入与数据要透过:

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

名称按钮莫名其妙其他:

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

按钮将提交表单,和你想要的数据会在隐藏的输入,并很好地提交进一步。希望能帮助到你!