2015-09-07 119 views
0

我想从表单插入数据到表中,但每次我提交没有任何反应,我检查并重新检查了一切,但我找不到原因。插入表单数据到MySQL数据库表

indextest1.php

<!DOCTYPE html> 

<html>  
    <head> 
     <title></title>  
     <meta charset="UTF-8">  
     <meta name="author" content="">  
     <meta name="description" content="">  
     <meta name="keywords" content=""> 
    </head>  
    <body> 
     <form action="test1.php" method="post"> 
     <input type="text" name="name"><br> 
     <input type="text" name="lastname"><br> 
     <input type="radio" name="radio" value="one" checked> one<br> 
     <input type="radio" name="radio" value="two" > two<br> 
     <select name="drop"> 
      <option value="0" selected>0</option>  
      <option value="1">1</option>  
      <option value="2">2</option>  
      <option value="3">3</option>  
      <option value="4">4</option>  
      <option value="5">5</option> 
      <option value="6">6</option>  
      <option value="7">7</option>  
      <option value="8">8</option>  
     </select> 
     <input type="checkbox" name="check" value="1"><br>  
     <input type="submit" value="Submit"> 
     </form>  
    </body> 
</html> 

test1.php

<?php 

$servername = "localhost"; 
$username = "root"; 
$password = "root"; 
$dbname = "db-test"; 

$connect = ("$servername, $username, $password, $dbname") or die ("ERROR DURING CONNECTION"); 

$name = $_POST["name"]; 
$lastname = $_POST["lastname"]; 
$radio = $_POST["radio"]; 
$drop = $_POST["drop"]; 
$check = $_POST["check"]; 

$sql_insert = mysql_query("INSERT INTO test-table (id, name, lastname, radio, drop, check) VALUES ('', '$name', '$lastname', '$radio', '$drop', '$check')"); 
     header("location: indextest1.php"); 

?> 

数值表提前

enter image description here

谢谢,希望我们提供所需的所有信息。

+2

您的连接线是foobar'd – Drew

+1

'id'不应该在插入查询中定义,因为它可能是一个自动增量字段。另外,你的代码很容易受到SQL注入攻击,我建议通过执行'mysql_real_escape_string()'来跳过任何有趣的字符。“# – ScottMcGready

+0

实际上,@Drew是正确的。因此,您应该在您的PHP页面或日志中指出错误,指出您的确切路线 – ScottMcGready

回答

3

除了对方的回答,

首先,您的查询的这个部分:

INSERT INTO test-table (id, name, lastname, radio, drop, check) 

INSERT INTO `test-table` (id, name, lastname, radio, `drop`, `check`) 

MySQL是解释您的表作为“测试应该读减去表“。使用勾号,或使用下划线test_table这是一个安全的分隔符重新命名。

然后你使用两个MySQL保留字“drop”和“check”。也使用蜱。

参考:

见MySQL是如何告诉你的语法错误开始的地方?

您的SQL语法错误;检查对应于你的MySQL服务器版本使用附近“下拉正确的语法手册,检查)

,它会显示你以后是

你有一个错误另一个你的SQL语法;检查对应于你的MySQL服务器版本的手册正确的语法使用近“检查)

只是为了澄清,你是混合的MySQL的API与

mysql_query("INSERT ... 

其中那些mysql_功能不混用用你现在的方法。使用相同的连接查询

mysqli_query($connect, "INSERT ... 

当然,事实上,你是开放的SQL注入。使用准备好的语句:

您也应该检查对你的POST阵列如!empty()空字段。

旁注:如果要插入撇号或任何其他字符,MySQL会抱怨,那么你必须逃避它们。无论如何,你应该。

另外,请记住在标题后添加exit;。否则,如果你有更多的代码,它可能想要继续并执行。

header("location: indextest1.php"); 
exit; 
+0

现在,它的工作我伤心的乐趣结束后,​​错误消息,除了我的语言障碍,我认为滴和检查的事情,但不知道保留字,阅读你的评论后,我添加了''的话,仍然得到了这样的错误,以摆脱核心问题,并更换代码上的每一个字,并正确插入数据。 – Minnen

+1

@Minnen很高兴它解决了,欢呼 –

+2

@Minnen只要将这个附加到Fred的答案上 - 反引号是你的朋友:如果你不确定,那么''''字符。 – ScottMcGready

0

我建议你先阅读如何先连接到PHP MySQL,然后再继续执行,因为你的代码显然是以其他方式显示的。

http://php.net/manual/en/function.mysqli-connect.php http://php.net/manual/en/mysqli.query.php

停止使用mysql,因为它已被弃用。您需要在脚本中正确指定参数。你$connect是完全无效的语法(用于连接到MySQL)

<?php 

$servername = "localhost"; 
$username = "root"; 
$password = "root"; 
$dbname = "db-test"; 

$connect = mysqli_connect($servername, $username, $password, $dbname) 
or die ("ERROR DURING CONNECTION"); 

$name = $_POST["name"]; 
$lastname = $_POST["lastname"]; 
$radio = $_POST["radio"]; 
$drop = $_POST["drop"]; 
$check = $_POST["check"]; 
$sql = "INSERT INTO test-table (name, lastname, radio, drop, check) VALUES ('$name', '$lastname', '$radio', '$drop', '$check')"; 
//Don't need to insert id since it's an PRI_KEY A_I 
$result = mysqli_query($connect, $sql) 
or die (mysqli_error($connect)); 
header("location: indextest1.php"); 
?> 

别的不说,你问到与SQL injection attack,你可以很容易地通过阻止被击中。 mysqli_real_escape_string

+1

所以是的,确保从mysql_ *到mysqli_ *的转换不是一个快速和脏的端口,将用户提供的数据传递给dbengine。只是因为OP并不担心'atm',他说,他将会是 – Drew

+0

我得到这个错误白色你的代码Valkyrie“警告:mysqli_connect():php_network_getaddresses:getaddrinfo失败:主机desconocido。在C:\ wamp \ www \ workspace第8行“和”警告:mysqli_connect():(HY000/2002):php_network_getaddresses:getaddrinfo失败:主机desconocido。在C:\ wamp \ www \ workspace \ test \ test1.php在第8行“ – Minnen

+1

从我对西班牙语的基本理解来看,您的连接失败,可能是因为服务器地址,密码错误,连接错误,很多原因 –

0

为varchar数据类型添加到我们必须把它放在单引号SQL表,所以先放单引号后,如果值是可变比双引号和点之间放(为PHP只) 。

对于自动递增值,我们只需要传递null。

写下您的查询。

$sql_insert = mysql_query("INSERT INTO test-table (id, name, lastname, radio, drop, check) VALUES (null, '".$name."', '".$lastname."', '".$radio."', ".$drop.", ".$check.")"); 

希望这会起作用。

+0

虽然这可能是一个非常好的答案,但请考虑解释为什么以及如何工作。 –

+0

@GeraldVersluis现在好了看看编辑过的答案。 –