PHP - 更新和设置不更新数据库?

时间:2013-02-22 09:40:25

标签: php mysql null set

解决

我在询问之前已经搜索过但没有找到任何内容,所以我将来会在这里为任何人写这篇文章。但要解决这个问题,我必须做的就是确保$ 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,但我甚至不能再这样做了,这很奇怪,因为我是一个菜鸟我不知所措。

3 个答案:

答案 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