解决
我在询问之前已经搜索过但没有找到任何内容,所以我将来会在这里为任何人写这篇文章。但要解决这个问题,我必须做的就是确保$ username指向某个东西,我已经在login.php脚本中声明了它,但由于某种原因,它没有找到它所以设置$ username = $ _ SESSION ['myusername “];解决了这个问题。
简而言之,我有一个名为“Status”的列,它是文本,140个字符。这只是一个混乱使用php的测试,所以我可以习惯它。现在起初它正在更新数据库但是为null,我意识到我没有将发布数据设置为$ status并且在我完成它之后工作,我更新了数据库两次然后它就停止工作...页面显示没有错误,但是这个值与最后一次改变它(uuu)时的情况相同。
我有一张表格:
<form action="status-update.php" method="post">
<p>
<input name="status" type="text" id="status" value="<?PHP echo $query_row[status]; ?>">
<input type="submit" name="submit" value="Update">
</p>
</form>
然后按下按钮会转到此脚本:
<?php
SESSION_START();
//WAMP Login Details
$host = "localhost";
$username="root";
$password="";
$db_name="database";
$tbl_name="members";
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("Database doesn't exist.");
//Set $status to the post
$status=$_POST['status'];
//This grabs the data from the form on the settings page and updates
$sql="UPDATE $tbl_name SET status='$status' WHERE username='$username'";
$result=mysql_query($sql);
//if true then redirect else echo error
if($result){
header("location:me.php");
}
else {
echo "ERROR";
}
?>
我试着这样做,所以它再次将值设置为null,但我甚至不能再这样做了,这很奇怪,因为我是一个菜鸟我不知所措。
答案 0 :(得分:0)
您的代码有几个问题。
首先,它使用mysql_
API,但总是说这个API结束了。从PHP 5.5开始,它甚至已被弃用。所以尝试使用mysqli或PDO。
然后你必须向外看。你的sql查询很容易被注入,因为你没有正确地转义你的变量。
如何尝试使用mysql_query调用旁边众所周知的or die(mysql_error());
调试代码?
答案 1 :(得分:0)
尝试使用PDO,它更不容易受到错误和攻击。以下是使用PDO对脚本进行的基本更新:
<?php
// set PDO dsn by socket
$dsn = 'dbname=DATABASE_NAME;unix_socket=/var/lib/mysql/mysql.sock';
// or by tcp
$dsn2 = 'dbname=DATABASE_NAME;host=localhost;port=3306';
// create connection using sockets change $dsn to $dsn2 to use tcp if using windows or external host
$conn = new PDO('mysql:' . $dsn, USERNAME, PASSWORD);
// prepare query
$pdo = $conn->prepare("UPDATE TABLE_NAME SET status = :status WHERE username = :username");
// set up parameters
$params = ['username' => $_POST['username'], 'status' => $_POST['status']];
// loop through the paramaters to determine the type
foreach ($params as $key => $value) {
switch ($value) {
case is_int($value):
$param = PDO::PARAM_INT;
break;
case is_bool($value):
$param = PDO::PARAM_BOOL;
break;
case is_null($value):
$param = PDO::PARAM_NULL;
break;
default:
$param = PDO::PARAM_STR;
break;
}
// bind paramter to query
$pdo->bindValue(":$key", $value, $param);
}
// execute the query
$result = $pdo->execute($params);
// if true then redirect else echo error
if ($result) {
header("location:me.php");
} else {
echo "ERROR";
}
您也不需要以?>
结尾,请将其关闭。如果在结束标记之后有空格,它将为您节省错误。
答案 2 :(得分:0)
使用session_start();而不是SESSION_START();
请确保您的表格中是否有用户名,名为 root !