1

こんにちは、値だけで完全に機能するこのコードがあります:

    <script type="text/javascript">
    $(document).ready(function() {
    $("input[type=button]").click(function () {
    var textarea_content = $('textarea#wall').val(); // get the content of what user typed    (in textarea) 
    if (textarea_content != '') { // if textarea is not empty 
    var sender =  "<?php echo $_SESSION['user_id'];?>";

     $.ajax({
            type: "POST",
            url: "send_message_function.php",
            data : "action=send&from_id="+sender+"&to_user="+$(this).siblings("input[type=text]").val()+"&message="+textarea_content,
            dataType: "json",
            success: function (data) {
               var  LastID = data["cid"];
               alert("toUser: " + $(this).siblings("input[type=text]").val()+"and text area " + textarea_content + " message id: " + LastID);
                                     }
        });//end success function

        //do something else

        } else {
        alert('Enter some text ! '); // just in case somebody click on share witout writing anything :)
    }
    });//end click function
    });//end ready function
    </script>

およびsend_message_function.php:

<?php
 require 'core/functions/init.php';

 $action  = $_POST['action'];
 if($action=="send"){
 $from_id = mysql_real_escape_string($_POST['from_id']);
 $to_id = mysql_real_escape_string($_POST['to_user']);
 $message = strip_tags($_POST['message']);

 $sql = mysql_query("INSERT INTO chat (from_id, to_id, message,   dt)VALUES('$from_id','$to_id','$message',NOW())") or die("0");

 echo json_encode(array("cid"=>(mysql_insert_id()),
                               "from_id"=>''.$message_id.''));
}
    ?>

問題は、複数のユーザーにメッセージを送信しようとしたときです。SQLクエリは、すべてのユーザーIDを同じ行に挿入しようとします。ループを実行する必要があることはわかっていますが、メッセージを送信するすべてのユーザーに対してクエリを実行する方法がわかりません。

$(this).siblings("input[type=text]").val()      

次のような複数のユーザーIDを返します:113,143,234

4

4 に答える 4

1

ユーザーID文字列をコンマ文字で分割してから、見つかった値ごとにクエリを実行する必要があります。

于 2012-09-28T14:54:43.583 に答える
1

1つのSQLクエリに複数の行を挿入するには、次のようにします

INSERT INTO foo(a, b) VALUES('c', 'd'), ('e', 'f'), ('h', 'i');

各VALUESセットを作成するにはループする必要がありますが、単一のクエリで挿入を行うことができます。

だから何かのような

<?php
    $to_id = explode(',', mysql_real_escape_string($_POST['to_user']));

    $sql = 'INSERT INTO chat (from_id, to_id, message) VALUES';
    foreach ($to_id as $id)
    {
        $sql .="('$from_id', '$id', '$message'),";
    }
    rtrim($sql, ','); //strip the final comma
?>

それはの線に沿ってクエリを形成する必要があります

INSERT INTO chat(from_id, to_id, message) VALUES('1', '2', 'hello from php'), ('1', '3', 'hello from php'), ('1', '4', 'hello from php')

このようにすると、単一のクエリのみが送信されることを意味します。したがって、データベースとの通信のオーバーヘッドが少なくなり、スクリプトが高速化されます。

于 2012-09-28T14:55:19.150 に答える
1

ループは必要ありません。次のように、1つのクエリで複数の挿入を実行できます。

 $to_id = explode(',', mysql_real_escape_string($_POST['to_user'])); //split the string to an array containing each id

 $sql = mysql_query("INSERT INTO chat (from_id, to_id, message, dt) VALUES('$from_id','$to_id[0]','$message',NOW()), ('$from_id','$to_id[1]','$message',NOW()), ('$from_id','$to_id[2]','$message',NOW()) ") or die("0");

注:$from_id主キーにするべきではありません。そうしないと、重複キーエラーが発生します。

編集:あなたがいいえを知らない場合。ユーザーの、

   $to_id = explode(',', mysql_real_escape_string($_POST['to_user']));

   foreach ($to_id as $v)
     $sql = mysql_query("INSERT INTO chat (from_id, to_id, message, dt) VALUES('$from_id','$v','$message',NOW()) ") or die("0");
于 2012-09-28T14:56:35.080 に答える
0
$toIDS = explode(',', mysql_real_escape_string($_POST['to_user']));
foreach($toIDS as $ID){
    $query=mysql_query("INSERT INTO foo(a, b) VALUES('c', 'd')");
    echo (mysql_affected_rows()>0)?$ID .'INSERTED':$ID.' NOT INSERTED';
}
于 2012-09-28T14:59:20.507 に答える