1

ユーザーが投稿にコメントするために使用するフォームがあります。これで、このフォームの非表示の入力は正しくなりました。正しい「streamidcontent」を取得しますが、ajax を介してデータベースに送信すると、常に最後に作成されたステータス ID「4076」に変更され、その投稿の一番上に追加されます。フィードの。だから、私は何が間違っているのだろうかと思っています。

ストリームデータ_コメント

1 comment_id int(11) いいえ なし AUTO_INCREMENT
2 comment_poster int(11) いいえ なし
3 comment_streamitem int(11) いいえ なし
4 comment_datetime datetime いいえ なし

<form id="mycommentform" method="POST"  class="form_statusinput">
<input type="hidden"  name="streamidcontent" id="streamidcontent" value="'.$streamitem_data['streamitem_id'].'">
<input type="input" name"content" id="content" placeholder="Say something" autocomplete="off">
<input type="submit" id="button" value="Feed">
</form>

COMMENT_ADD.PHP

<?php
session_start();
require"include/load.php";
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

if(isset($_POST['streamidcontent'])&isset($_POST['content'])){

        $content =  htmlspecialchars($_POST['content']);
        $streamid = htmlspecialchars($_POST['streamidcontent']);
            $content = preg_replace('/(?<!S)((http(s?):\/\/)|(www.))+([\w.1-9\&=#?\-~%;\/]+)/','<a href="http$3://$4$5">http$3://$4$5</a>', $content);

            $insert = "INSERT INTO streamdata_comments(comment_poster, comment_streamitem, comment_datetime, comment_content) VALUES (".$_SESSION['id'].",'$streamid',UTC_TIMESTAMP(),'$content')";


            $add_post = mysqli_query($mysqli,$insert) or die(mysqli_error($mysqli));
            }

AJAX

<script>
$(document).ready(function(){
$("form#mycommentform").submit(function(event) {
event.preventDefault();
var streamidcontent = $("#streamidcontent").val();
var content = $(this).children('#content').val();

$.ajax({
type: "POST",
url: "comment_add.php",
cache: false,
dataType: "json",
data: { streamidcontent: streamidcontent, content: content}, 
success: function(html){  
$("#containerid").html("<div class='stream_comment_holder' id='comment_holder_"+html['comment_streamitem']+"'><div id='comment_list_"+html['comment_streamitem']+"'><div class='stream_comment' id='comment_"+html['comment_id']+"'>div class='stream_comment_holder' id= style='display:;'><div class='stream_comment'><table width='100%'><tbody><tr><td valign='top' width='30px'><img class='stream_profileimage' style='border:none;padding:0px;display:inline;' border=\"0\" src=\"imgs/cropped"+html['id']+".jpg\" onerror='this.src=\"img/no_profile_img.jpeg\"' width=\"40\" height=\"40\" ></td><td valign='top' align='left'><a href='profile.php?username="+html['username']+"'>"+html['first']+" </a>"+html['comment_content']+"</td></tr></tbody></table></div></div></div></div>");
}
});
return false
});
});
</script>

そして、正常に挿入された私の古いAJAX。しかし、これに好き、嫌い、削除ボタンを追加する必要があります。そのため、正しく動作しない上記の AJAX に変更しました。

function addcomment(streamid,content,containerid,posterid,postername,postid){
var obj = document.getElementById(containerid);
$.post("../comment_add.php", { streamid: streamid,content:content} );
obj.innerHTML = obj.innerHTML + "<div class='stream_comment'><table width='100%'><tbody><tr><td valign='top' width='30px'><img style='border:none;padding:0px;height:30px;width:30px;border-radius:0px;' src='imgs/cropped"+posterid+".jpg' onerror='this.src=&quot;img/no_profile_img.jpeg&quot;;'></td><td valign='top' align='left'><a href='profile.php?username="+posterid+"'>"+postername+" </a>"+content+"</td></tr></tbody></table></div>";
}
4

2 に答える 2

2

エラーが実際の挿入ではなく、実際にはフィードである可能性があると考えたことはありますか? それともAJAXでしょうか?

挿入が機能しているかどうかを確認するには、次を試してください。

echo $streamid;  // Shows you're getting the right value from AJAX.

$add_post = mysqli_query($mysqli,$insert) or die(mysqli_error($mysqli));
if($add_post) {
    $NewID = mysqli_insert_id(mysqli);
    $query = 'SELECT * FROM streamdata_comments WHERE comment_id=' . $NewID;  
    if ($result = mysqli_query($mysqli, $query)) {
        while ($row = $result->fetch_object()){
            var_dump($row);   // Check the actual input is as you expected.
        }
        mysqli_free_result($result);
    }
}

AJAX を使用している場合は、ネットワーク ツールのいずれかを使用して結果を監視する必要があります (Chrome の NET パネルで F12 キーを押すか、Win の場合はFiddler、Mac の場合はCharlesを使用します)。

于 2012-08-26T12:24:49.000 に答える
2

コードで奇妙なことが起こっています。

$content =  $_POST['content'];
$content =  strip_tags($_POST['content']);

$content変数に異なる値を 2 回入力しています。同じことがIDにも当てはまります:

$streamid = $_POST['streamidcontent'];
$streamid = strip_tags($_POST['streamidcontent']);

strip_tagsとにかく、データベースに挿入する前に使用する必要があるとは真剣に考えていません。htmlspecialchars()表示するときだけ使用してください。または、表示するときにhtmlpurifierを使用します。また、アプリケーションにSQL インジェクションの脆弱性があります。これを防止する方法について詳しくは、PHP で SQL インジェクションを防止するにはどうすればよいですか? を参照してください。.

共有したコードを使用すると、新しいレコードに新しい ID が割り当てられます。毎回同じIDを取得したことをどのように確認しましたか?.

最後に、次のようにして、mysqli に最後に挿入された ID を取得できます。

echo $mysqli->insert_id;

の後query()

また、レンダリングされた HTML をチェックして、そもそも id が何であるかを確認しましたか?

于 2012-08-26T12:15:41.457 に答える