-3

解决了

在问这个之前我已经搜索过,但什么也没找到,所以我会在这里为将来的任何人写信。但是要修复它,我所要做的就是确保 $username 指向某个东西,我已经在 login.php 脚本中声明了它,但由于某种原因,它没有找到它,所以设置 $username=$_SESSION['myusername ']; 解决了这个问题。


简而言之,我有一个名为“状态”的列,它是文本,140 个字符。这只是一个乱搞php的测试,所以我可以习惯它。现在起初它正在更新数据库但为空,我意识到我没有将帖子数据设置为 $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 但我什至不能再这样做了,这很奇怪,因为我是一个菜鸟,我很茫然。

4

3 回答 3

0

使用 session_start(); 而不是 SESSION_START();

请确保您的表中是否有一个名为root的用户名

于 2013-02-22T10:09:45.897 回答
0

您的代码有几个问题。首先,它使用mysql_API​​,而人们总是说这个API已经结束。从 PHP 5.5 开始,它甚至已被弃用。所以尝试使用mysqli或PDO。

然后你必须小心。由于您没有正确转义变量,因此您的 sql 查询容易受到注入的影响。

or die(mysql_error());尝试使用mysql_query 调用旁边的众所周知的代码来调试代码怎么样?

于 2013-02-22T09:48:05.557 回答
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";

}

您也不需要以 结尾?>,不要使用它。如果您在结束标记后有空格,它将避免您遇到错误。

于 2013-02-22T09:58:12.803 回答