0

このコードの何が問題になっていますか?

データベースにデータを追加するために使用していますが、空$toidになり$toname、挿入しようとしています。

これがフォームです。変数$toid$tonameはここで大丈夫です。

//write new message
if (isset($_GET['action']) && $_GET['action'] == compose) { 
        if (isset($_GET['toid'])) {
            $toid = $_GET['toid'];
            $tosql = "select * from authors where id =".$toid.""; 
            $toquery = mysql_query($tosql,$connection) or die(mysql_error());
            $torow = mysql_fetch_array($toquery);   
            $toname = $torow['displayname'];
        if (isset($_GET['subject'])) { $subject = $_GET['subject']; }
        if (isset($_GET['message'])) { 
            $message = $_GET['message']; 
            echo "<h3>Replying</h3>
            <table>
                <tr>
                    <td colspan='2'>Replying to ".$toname.".</td>
                </tr>
                <tr>
                    <td colspan='2'>".$subject."".nl2br($message)."<br />
                    </td>
                </tr>
            </table><br />Type your answer:<br /><br />";
        } else { echo "New message"; }
        echo "<form action=\"mail.php?action=send\" method=post>
            <table>
                <tr>
                    <td>To:</td><td><input type=\"text\" name=\"to\" size=\"50\" value=\"".$toname."\"></td>
                </tr>
                <tr>
                    <td>Title:</td><td><input type=text name=subject size=50 value=".$subject."></td>
                </tr>
                <tr>
                    <td valign=\"top\">Message:</td><td><textarea  rows=\"10\" cols=\"70\" name=\"message\"></textarea></td>
                </tr>
                <tr>
                    <td align=\"right\" colspan=\"2\"><input id=\"submitstyle\" type=\"submit\" value=\"Enviar Mensagem\"></td>
                </tr>
            </table>
        </form>"; 
        }
} 

これは、メッセージをデータベースに挿入するためのコードです。ここでは、$toid$tonameは空です。上記のフォームから取得することになっていますよね?

//send message  
if (isset($_GET['action']) && $_GET['action'] == send) { 

    if ($subject == "" || $message == "") {
        header('Location: mail.php?action=compose&toid='.$toid.'&subject=\''.$subject.'\'&sendpm=false');
        exit(); 
    }

    $date = DATE(YmdHis); 

    echo $userid."from<br />to".$toid."<br />toname".$toname;

    $sendsql = "INSERT INTO mail (sender, reciever, subject, message, created_at, status, sender_deleted, reciever_deleted) 
                        VALUES (".$userid.", ".$toid.", ".$subject.", ".$message.", ".$date.",unread, 0, 0)"; 
    $sendquery = mysql_query($sendsql,$connection) or die(mysql_error());

    echo "<div class=\"alert\" style=\"text-align: center; margin-top: 13px;\"><b>Mensagem particular enviada com sucesso!</b></div>
            <br /><table align=\"center\" width=\"75%\" class=\"sortable\">
                <tr>
                    <td colspan='2' style=\"text-align:center;font-weight:normal;\">Mensagem particular enviada para ".$toname.".</td>
                </tr>
                <tr>
                    <td colspan='2'>
                        Title: ".$subject."
                        Message: ".nl2br($message)."

                    </td>
                </tr>
            </table>";
}

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' RE: assunto3, 3, 20121017023723,unread, 0, 0)'また、 2行目でこのSQLエラーが発生していますが、これは、言及されている空の変数が原因だと思います。

4

3 に答える 3

1

まず、これらの変数を非表示のフォーム値として渡す必要があります:http ://www.echoecho.com/htmlforms07.htm

次に、$_POSTを介してフォームから変数を取得する必要があります。

$ toid = $_POST['toid']および$toname= $_POST['toname']を試してください。ただし、SQLインジェクションには注意してください:http://php.net/manual/en/security.database.sql-injection.php

$_POSTから盲目的に値を受け入れるだけではいけません。必ず最初にそれらを検証してフィルタリングしてください。

または、toid / tonameがユーザーによって変更できない場合は、単にそれらを再クエリしないのはなぜですか?

于 2012-10-17T06:00:59.327 に答える
1

INSERT値をエスケープし、文字列を引用符で囲む必要があります。

$sendsql = 'INSERT INTO mail (sender, reciever, subject, message, created_at, status, sender_deleted, reciever_deleted) 
            VALUES ("'.mysql_real_escape_string($userid).'", "'.mysql_real_escape_string($toid).'", "'.mysql_real_escape_string($subject).'", "'.mysql_real_escape_string($message).'", "'.mysql_real_escape_string($date).'","unread", 0, 0)'; 

また、 SQLクエリですぐに使用される値を$_GETまたは$_POSTから常にエスケープするようにしてください。そうしないと、SQLインジェクションが発生する可能性が高くなります

于 2012-10-17T06:07:27.113 に答える
1

あなたはそのようなphpでSQLステートメントを書く必要があります:

 $tosql = "select * from authors where id ='$toid'"; 

 $sendsql = "INSERT INTO mail (sender, reciever, subject, message, created_at, status, sender_deleted, reciever_deleted) 
                    VALUES ('$userid', '$toid', '$subject', '$message', '$date', 'unread', 0, 0)";

これはあなたの助けになると思います。

于 2012-10-17T06:08:40.160 に答える