0

PHPを使用して、mysqliテーブルにある情報を更新しようとしています。mysqlではなくmysqliを使用することにしました。残念ながら、私はOOPの知識がなく、すべてのチュートリアル(私が見つけた)がOOPにあるため、手続き型スタイルも完了しようとしているため、どこにも答えが見つからないようです。

以下は私が作成したスクリプトです。各コマンドが何をしていると思うかを示すコメントを追加しました。

<?php    
DEFINE('DB_USER', 'root');
DEFINE('DB_PASS', 'password');
DEFINE('DB_NAME', 'test');
DEFINE('DB_HOST', 'localhost');

//connect to db
$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die(mysqli_connect_error($dbc));
mysqli_set_charset($dbc, 'utf8');

//form not submitted
if(!isset($_POST['submit'])){

    $q = "SELECT * FROM people WHERE people_id = $_GET[id]";//compares id in database with id in address bar
    $r = mysqli_query($dbc, $q);//query the database
    $person = mysqli_fetch_array($r, MYSQLI_ASSOC);//returns results from the databse in the form of an array

}else{//form submitted

    $q = "SELECT * FROM people WHERE people_id = $_POST[id]";//compares id in database with id in form
    $r2 = mysqli_query($dbc, $q);//query the database
    $person = mysqli_fetch_array($r2, MYSQLI_ASSOC);//returns results from the database in an array

    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $age = $_POST['age'];
    $hobby = $_POST['hobby'];
    $id = $_POST['id'];

    //mysqli code to update the database
    $update = "UPDATE people
               SET    people_fname = $fname,
                      people_lname = $lname,
                      people_age = $age,
                      people_hobby = $hobby
               WHERE  people_id = $id";

    //the query that updates the database
    $r = @mysqli_query($dbc, $update) or die(mysqli_error($r));

    //1 row changed then echo the home page link
    if(mysqli_affected_rows($dbc) == 1){    
        echo "<a href=\"index.php\">home page</a>";
    }
}
?>

更新フォーム

<form action="update.php" method="post">
    <p>First name<input type="text" name="fname" value="<?php echo "$person[people_fname]" ?>" /></p>
    <p>Last name<input type="text" name="lname" value="<?php echo "$person[people_lname]" ?>" /></p>
    <p>Your age<input type="text" name="age" value="<?php echo "$person[people_age]" ?>" /></p>
    <p>Your hobby<input type="text" name="hobby" value="<?php echo "$person[people_hobby]" ?>" /></p>
    <input type="hidden" name="id" value="<?php echo $_GET['id'] ?>" />        
    <input type="submit" name="submit" value="MODIFY" />
</form>`

フォームを送信すると、次のエラーメッセージが表示されます

Warning: mysqli_error() expects parameter 1 to be mysqli, boolean given in C:\xampp\htdocs\sandbox\update.php on line 39

私はこれが問題がにあることを私に伝えていることを理解しています

$r = @mysqli_query($dbc, $update) or die(mysqli_error($r));

そこで、2番目のパラメーターとしてsqliコードを入れようとしましたが(これは変数を入れるのと同じですが、最後の手段でした)、正しくないようで、まだ機能しませんでした。私もphp.netを見ましたが、彼らが与えた例から答えを見つけることができませんでした

アドバイスしてください、これは単純なことだと思いましたか?

4

4 に答える 4

1
$update = "UPDATE people
           SET    people_fname = $fname,
                  people_lname = $lname,
                  people_age = $age,
                  people_hobby = $hobby
           WHERE  people_id = $id";

変数を引用する必要があります。

$update = "UPDATE people
           SET    people_fname = '$fname',
                  people_lname = '$lname',
                  people_age = '$age',
                  people_hobby = '$hobby'
           WHERE  people_id = '$id'";

でも

バインドされたパラメータを調べる必要があります。ユーザー入力を取得してデータベースに直接書き込んでいます。つまり、悪意のあるユーザーがあらゆる種類のいたずらを行う可能性があります。

mysqliのbind_paramのマニュアルページをご覧ください。サンプルコードスニペットがたくさんあります。

于 2012-09-05T20:28:37.877 に答える
0

$rmysqli_errorに渡さないでください。オプションのmysqlリンクを受け入れますが、とにかくクエリ結果は受け入れません。

あなたの場合、クエリが実行されます。これはfalseと評価され、に割り当てられ$rます。割り当てはfalseと評価され、falseで呼び出すことになりdie(mysqli_error($r))ます$r

$dbcmysqli_errorに渡すつもりだったと思います。

于 2012-09-05T20:28:24.913 に答える
0

問題はデータベース接続($ dbc)にあるように私には見えます。使用しているので

@mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME)

'@'は、接続エラーを何らかの形で隠している可能性があります。

また、実生活でデータのサニタイズを行っていると言ってください。そうでない場合は、すべてのPOSTおよびGETデータに対してmysqli_real_escape_string()を実行する必要があります。

于 2012-09-05T20:38:04.780 に答える
-1

あなたが書いた

//returns results from the database in an array
$person = mysqli_fetch_array($r2, MYSQLI_ASSOC);

しかし、あなたは書くべきです

//returns results from the database in an array
$person = mysqli_fetch_array(MYSQLI_ASSOC);
于 2016-03-09T14:10:06.943 に答える