2016-01-17 76 views
1
<?php 

$fname= $_REQUEST['firstname']; 
$lname= $_REQUEST['lastname']; 
$email= $_REQUEST['email']; 
$pass = $_REQUEST['password']; 

$dbhost = 'localhost'; 
$dbuser = 'root'; 
$dbpass = ''; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect '); 
} 
$ins1 = "INSERT into signup values('$fname' , '$lname', '$email','$pass')"; 


$select = mysql_select_db('ait', $conn); 
if(! $select) 
{ 
    die("<h2> incorrect input <h2>".mysql_error()); 
    header('location:index.php'); 

} 

$in1 = mysql_query($ins1); 
if (!$in1) 
{ 
    die("<h2> incorrect input <h2>".mysql_error()); 
    header('location:signed.php'); 
} 


mysql_close($conn); 
header('location:signed.php'); 
exit; 
?> 

我正在注册表单并将其添加到数据库中但我得到此错误“错误的输入列计数不匹配值计数在第1行“。我没有从这个代码插入id,因为它是自动增量。不正确的输入列计数与第1行的值计数不匹配

+0

显示'注册表'结构。 –

+1

尝试在查询中明确指定列名称。 'INSERT INTO table(column1,column2)VALUES(value1,value2)'此外,请注意,您的代码* *开放** * SQL注入**。您将用户输入视为代码并执行用户向您发送的任何内容。 – David

+0

我是PHP新手,仍在学习。所以我需要了解更多关于SQL注入的知识。 – AshirogiMuto

回答

0

在查询中明确记下列的名称。

INSERT into signup(first_name,last_name,email,password) 
values('$fname' , '$lname', '$email','$pass') 

看看SQL注入。像这样传递参数不是一种安全的方法。

0

如果id是自动增量(这是你跳过只列在表中的第一个),用途:

$sql = "INSERT into signup values (null, '$fname' , '$lname', '$email','$pass')"; 

这样,你让mysql填写id的值,但你仍然需要指定它。

另一种方法是使用:

$sql = "INSERT into signup (col1, col2, col3, col4) values ('$fname' , '$lname', '$email','$pass')"; 

如果你的实际列名称替换col*

+0

您是怎么知道只有1列丢失而且可以为空的? –

+0

因为Op说:“我不是从这个代码中插入id,因为它是自动递增的。” –

+0

通常,id列是第一个添加到表中的列。 –

相关问题