-1

可能重复:
为什么我不能用 php 将数据插入我的 sql db

好吧,简而言之,我正在编写一个将数据存储到数据库中的登录表单。我的 html 和脚本应该可以完美地工作,在这个确切的时刻不需要过多考虑安全性。但我遇到的问题是我的 php 脚本不会更新我的 sql 数据库。一切检查正常,所有帖子变量都被继承,只是不会插入它们。我盯着认为用户(是的,我正在使用 root)由于某种原因没有足够的权限,所以我想知道如何设置一个新的“管理员用户”,如果你愿意的话。我在我的 Windows 7 机器上运行 WAMP,如果这有很大的不同。

我的表格:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Registration</title>
</head>

<body>

<form action="register.php" method="post" />
<p>Username:</p><input type="text" name="username" />
<p>Password:</p><input type="text" name="password" />
<p>Name:</p><p>First:<input type="text" name="fname" />Last:<input type="text" name="lname" /></p>
<p>Email:</p><input type="text" name="email" />
<input type="submit" />

</body>
</html>

我的脚本:

<?php

$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="login"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form 
$myusername=$_POST['username']; 
$mypassword=$_POST['password']; 
$myfname=$_POST['fname'];
$mylname=$_POST['lname'];
$myemail=$_POST['email'];



// To protect MySQL injection 
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// username taken
echo "Username already taken";
exit();
}

//protection against sql injection
if (get_magic_quotes_gpc())
{
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map(stripslashes_deep, $value) :
stripslashes($value) ;
return $value;
}
$_POST = array_map(stripslashes_deep, $_POST);
$_GET = array_map(stripslashes_deep, $_GET);
$_COOKIE = array_map(stripslashes_deep, $_COOKIE);
$_REQUEST = array_map(stripslashes_deep, $_REQUEST);
}

//insert form into DB members




'INSERT INTO members SET
username="' . $myusername . '",
password="' . $mypassword . '",
fname="' . $myfname . '",
lname="' . $mylname . '"
email="' . $myemail . '"';

session_register("myusername");
session_register("mypassword"); 
header("location:registersuccess.html");
?>

用于创建表的sql命令:

use login
>database changed
CREATE TABLE members(
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL,
fname VARCHAR(30) NOT NULL,
lname VARCHAR(30) NOT NULL,
email VARCHAR(30) NOT NULL
)
;

然后我可以从命令行添加用户更新,但 php 不行,再次使用 root 帐户和密码。该脚本确实连接到服务器,因为它确实成功地检查了用户是否已准备就绪。如果需要更多信息,请询问。

4

2 回答 2

3

1)首先,不要使用旧功能,它们不安全且贬值(请参见此处mysql_*的红框)。相反,看看使用 PDO 或 MySQLi,它们不需要很长时间来学习,而且,恕我直言,在各个方面都好得多,包括一旦你习惯了它们就易于使用。

2)其次,SET主要用于UPDATE命令,不常用于INSERT. 一个INSERT命令通常应该是这样的;

INSERT INTO `tbl` (`column1`,`column2`) VALUES ('value1','value2');

请参阅 MySQL手册

3)第三,我不确定代码是否复制不正确,但看起来您没有将以下插入字符串分配给变量,也没有执行它?

'INSERT INTO members SET
username="' . $myusername . '",
password="' . $mypassword . '",
fname="' . $myfname . '",
lname="' . $mylname . '"
email="' . $myemail . '"';

(再次参见第 2 点。关于语法)。

4)第四,缩进!!使阅读和调试更容易。正确缩进的代码可以通过阅读代码向您显示错误,甚至在开始正确的“调试”过程之前,这可以为您节省大量时间!:)

于 2012-09-14T20:10:08.780 回答
0

我没有看到您在数据库中插入了一些东西,要运行插入,您需要使用mysql_query您在 select 语句中使用的相同函数,此外,插入的语法不正确,请查看MySQL 手册以了解它是如何。

于 2012-09-14T20:01:57.293 回答