-3

解決した

これを尋ねる前に検索しましたが、何も見つからなかったので、今後誰かのためにここに書きます。しかし、それを修正するには、$usernameが何かを指していることを確認するだけでした.login.phpスクリプトで宣言しましたが、何らかの理由でこれが見つからなかったので、 $username=$_SESSION['myusername ']; 問題を解決しました。


要するに、140文字のテキストである「ステータス」という列があります。慣れるためにphpをいじってみるだけのテストです。最初はデータベースを更新していましたが、null にしましたが、投稿データを $status に設定していないことに気付き、動作していた後、データベースを 2 回更新した後、動作を停止しました... ページが表示されますエラーはありませんが、値は最後に変更したときと同じままです (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

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 に答える
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 呼び出しの横にある well-known を使用してコードをデバッグしてみてはどうでしょうか?

于 2013-02-22T09:48:05.557 に答える