0

ここでは、単純な php を使用してログブックを作成しようとしています。

問題は、作成したデータベースに何も追加されていないことです。データベースをチェックするたびに、ゲストブック フォームにテキストを追加して送信した後、空のデータセットを取得し続けます。

私のコードに問題がある人はいますか?

<?php
$sql = mysql_connect("localhost" , "root") or die(mysql_error);
mysql_select_db("guestbook" , $sql);

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{
    $name = mysql_real_escape_string($_POST['name']);
    $email = mysql_real_escape_string($_POST['email']);

    $query = mysql_query("INSERT INTO message (name , email) VALUES ('$name' ,      '$email')");
    echo ("Message succesfully added.");
}
?>

<html>
    <head>
        <title>Guestbook</title>
    </head>
    <form action="index.php" method="post">
        Name: <input type="text" name="name"/><br>
        Email: <input type="text" name="email"/><br>
        <input type="submit" value="Post!"/>
    </form>
</html>

<?php
$result = mysql_query("SELECT * FROM message ORDER BY id DESC");
while($row = mysql_fetch_array($result))    
{
?>

<table>
    <tr>
        <td>Name:</td>
        <td><?php echo $row['name'] ?></td>
    </tr>
    <tr>
        <td>Message:</td>
        <td><?php echo $row['email'] ?></td>
    </tr>
</table>

<?php
}
?>
4

2 に答える 2

0

nameそれはmysqlの予約語だと思いますよね?

次のように、挿入スクリプトを変更する必要がある場合があります。

$query = mysql_query("INSERT INTO message (`name` , email) VALUES ('$name', '$email')");

そうは言っても、あなたのスクリプトはインジェクション攻撃に対して広く開かれています。PDO を使用し、SQL ステートメントに貼り付ける前にデータを検証する必要があります。ユーザーbob;drop table users;が自分の名前を入力してクエリが実行されたらどうしますか?

編集:また、ブラケットがありませんでした。

編集 2: それでもエラーが発生する場合は、これを実行して、表示された内容をお知らせください。

$sql = "INSERT INTO message (`name` , email) VALUES ('$name', '$email')";
echo $sql;

変数の 1 つが空であることがよくわかります。

編集3:

<?php

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{
    $name = mysql_real_escape_string($_POST['name']);
    $email = mysql_real_escape_string($_POST['email']);

    if(!empty($name) && !empty($email))
    {
        $query = mysql_query("INSERT INTO message (name , email) VALUES ('$name' ,      '$email')");
        echo ("Message succesfully added.");
    }
    else
    {
        echo "It seems that either name or email was empty, so not inserting data.<br>";
    }
}
?>

編集 4 - 別名Goodness me! また、質問からコピーしたコードに余分なブラケットを追加できなかったことにも気付きました。今から含めるように編集しました。

<?php

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{
    $username = mysql_real_escape_string($_POST['username']);
    $username = mysql_real_escape_string($_POST['useremail']);

    if(!empty($name) && !empty($email))
    {
        $query = mysql_query("INSERT INTO message (name , email) VALUES ('$username', '$useremail')");
        echo ("Message succesfully added.");
    }
    else
    {
        echo "It seems that either name or email was empty, so not inserting data.<br>";
    }
}


<html>
    <head>
    <title>Guestbook</title>
    </head>
    <form action="index.php" method="post">
    Name: <input type="text" name="username"/><br>
    Email: <input type="text" name="useremail"/><br>
    <input type="submit" value="Post!"/>
    </form>



?>
// Make sure you stick this </html> at the BOTTOM of you php file.
</html>
于 2012-07-18T09:15:38.950 に答える
0

交換

mysql_query("INSERT INTO message (name , email) VALUES ('$name' , '$email'");

mysql_query("INSERT INTO message (name , email) VALUES ('$name' , '$email')");
于 2012-07-18T09:40:37.230 に答える