2014-03-25 57 views
0

PHP代码PHP和MySQL不工作

<?php 
// Create connection 
$con=mysqli_connect("localhost","root","root","demo1"); 
echo "Connection was successful"; 

// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

mysql_select_db("demo1",$con); 

$sqli="INSERT INTO employee (Employee ID,NAME,Date Hired,Position,Salary,Department Code,Can HIRE,BOSSID) 

      VALUES('$_POST[EMPID]','$_POST[NAME]','$_POST[DATEHIRED]','$_POST[POSITION]','$_POST[SALARY]','$_POST[D EPTCODE]','$_POST[CANHIRE]','$_POST[BOSSID]')"; 

if (!mysqli_query($con,$sqli)) 
    { 
    die('Error: ' . mysqli_error($con)); 
    } 
echo "1 record added"; 

mysqli_close($con); 

?> 

HTML代码

<!DOCTYPE html> 
<html> 
    <body> 
    <h1> EMPLOYEE </h1><br> 
    <form action="LAB5.php" method="post"> 
     Employee ID: &nbsp;<input type="text" name="EMPID" ><br> 
     NAME: <input type="text" name="NAME" ><br> 
     Date Hired &nbsp;<input type="text" name="DATEHIRED" ><br> 
     Position: <input type="text" name="POSITION" ><br> 
     Salary: &nbsp;<input type="text" name="SALARY" ><br> 
     Department Code: <input type="text" name="DEPTCODE" ><br> 
     Can HIRE &nbsp;<input type="text" name="CANHIRE" ><br> 
     BOSSID: <input type="text" name="BOSSID" ><br> 
     <input type="image" src="Submit.gif" alt="Submit" width="100" height="50"><br> 
</body> 
</html> 

错误信息

连接是successfulError:你有一个错误你的SQL语法; 检查对应于你的MySQL服务器版本的权利 语法使用附近的手册“编号,姓名,聘用日期,职位,工资,部门代码,可以租用,BOSSID)VALU”在行1

表截图http://tinypic.com/r/vni4bc/8

+0

首先...请不要使用'mysql_ *'功能,因为它们是贬值了。请使用“PDO”或“mysqli_ *”。此外,您的代码受注入攻击。请看这个了解更多:http://www.php.net/manual/en/security.database.sql-injection.php –

+0

已经给出的答案;想知道他们是否抓住了这一点细节,*或两个*,然后再次可能甚至*三*。我没有触及这个。 –

回答

0

你与MySQL的库MySQLi混合代码。我已将您的代码转换为MySQLi。并且请避免在列名中使用(空格)。你可以使用mysqli_real_escape_string防止一些SQL注入

LAB5.php:

<?php 

/* CHECK CONNECTION */ 

$connection=mysqli_connect("localhost","root","root","demo1"); 

if (mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$empID=mysqli_real_escape_string($connection,$_POST['EMPID']); 
$name=mysqli_real_escape_string($connection,$_POST['NAME']); 
$datehired=mysqli_real_escape_string($connection,$_POST['DATEHIRED']); 
$position=mysqli_real_escape_string($connection,$_POST['POSITION']); 
$salary=mysqli_real_escape_string($connection,$_POST['SALARY']); 
$deptcode=mysqli_real_escape_string($connection,$_POST['DEPTCODE']); 
$canhire=mysqli_real_escape_string($connection,$_POST['CANHIRE']); 
$bossID=mysqli_real_escape_string($connection,$_POST['BOSSID']); 

/* MYSQLI REAL ESCAPE STRING WOULD PREVENT A BIT OF SQL INJECTION */ 

mysqli_query($connection,"INSERT INTO employee (EMPID, NAME, DATEHIRED, POSITION, SALARY, DEPTCODE, CANHIRE, BOSSID) /* DOUBLE CHECK YOUR COLUMN NAME */ 
VALUES('$empID','$name','$datehired','$position','$salary','$deptcode','$canhire','$bossid')"; 

mysqli_close($con); 

?> 

你的HTML代码:

<html> 
<body> 

<h1> EMPLOYEE </h1><br> 
<form action="LAB5.php" method="post"> 
Employee ID: &nbsp;<input type="text" name="EMPID" ><br> 
Name: <input type="text" name="NAME" ><br> 
Date Hired &nbsp;<input type="date" name="DATEHIRED" ><br> 
Position: <input type="text" name="POSITION" ><br> 
Salary: &nbsp;<input type="number" name="SALARY" ><br> 
Department Code: <input type="text" name="DEPTCODE" ><br> 
Can HIRE &nbsp;<input type="text" name="CANHIRE" ><br> 
BOSSID: <input type="text" name="BOSSID" ><br> 
<input type='submit'> 
</form> 

</body> 
</html> 
+0

嗨洛根,谢谢你的回答。当我点击提交时,我运行了你的代码和结果,.php页面变为空白。你能帮我吗。 –

+0

@VirenPatel没问题!我的回答是否有助于解决您的问题?然后不要忘记选择我的答案为正确的或upvote我的答案。 :) –

+0

@VirenPatel当然它只是空白。但是当你看着你的数据库时,它会有新插入的数据,不是吗?无论如何,你想要输出什么? –

2

字段不能有空格像Employee ID,仔细检查数据库表的列名。

此外,您的代码易受SQL注入影响。您应该转义任何将在SQL查询中使用的用户输入。尝试在所有$_POST$_GET$_REQUEST输入周围包装mysql_escape_string($_POST['value'])

+0

打败我吧。发现。 –

+0

'as'员工Id''主意不适用于插入。他只需要知道他的实际列名。 – paqogomez

+0

啊,是的,我输入得太快了。认为它是一个'SELECT'。 –

0

使用mysqli为什么“mysql_select_db”? mysqli的将是:

bool mysqli_select_db (mysqli $link , string $dbname) 
0

您应该切换到准备好的发言得到摆脱现在的SQL注入问题。

另外,如果您的现场或表名称包含空格,你需要将它们用反引号:

INSERT INTO employee (`Employee ID`,NAME, .... 

而且你不能像混合mysqli_*mysql_*功能,坚持mysqli_*

0

您正在混合数据库对象。

mysql_select_db("demo1",$con); 

应该

mysqli_select_db("demo1", $con); 

这条线:

$sqli="INSERT INTO employee (Employee ID, NAME, Date Hired, Position,Salary, Department Code, Can HIRE ,BOSSID) 

    VALUES('$_POST[EMPID]','$_POST[NAME]','$_POST[DATEHIRED]','$_POST[POSITION]','$_POST[SALARY]','$_POST[D EPTCODE]','$_POST[CANHIRE]','$_POST[BOSSID]')"; 

也是一个重大的安全风险,因为你不似乎逃脱你插入数据数据库。

看一看prepared statements