

1週間前から、PHPの勉強を独学で始めました。  
そこでTwitterのようなサービス作成をひとつの目標にして、行っているのですが、一人で解決出来ないところが出てきたので、質問させていただきます。

今現在、ユーザー登録、ログインをし、自分のタイムライン上で、他のユーザーに返信をするというプログラムを書いています。そこで、返信のときに、返信先のIDを格納するための、reply_post_idを設けました。画像のid
14の部分は、member_id 10のユーザがmember_id
8のユーザに返信をしているのですが、それがreply_post_idに反映されていません。下にコードを載せたのですが、どこか間違っているのでしょうか？ご教授よろしくお願い致します。

php

[code]

    //投稿を記録する 
    if(!empty($_POST)){ 
        if($_POST['message'] != ''){ 
            $sql = sprintf('INSERT INTO posts SET member_id=%d,  
                message="%s", reply_post_id=%d, created=NOW()', 
            mysqli_real_escape_string($mysqli,$member['id']), 
            mysqli_real_escape_string($mysqli,$_POST['message']), 
            mysqli_real_escape_string($mysqli,$_POST['reply_post_id']) 
            ); 
            mysqli_query($mysqli,$sql) or die($mysqli_error()); 
            header('Location: index.php'); 
            exit(); 
        } 
    } 
    
[/code]

html

[code]

    ＜input type="hidden" name="reply_post_id" value=" <?php echo 
    isset($_REQUEST['res']) ? htmlspecialchars($_REQUEST['res'],ENT_QUOTES,'UTF-8'):"" ; ?>" />
    
[/code]

![画像の説明をここに入力](https://i.stack.imgur.com/tWTJq.png)


CC BY-SA 3.0
2015-04-22T02:43:16.863
9432
2015-04-22T14:02:22.077
2015-04-22T02:58:02.213
3371
9427
question
php mysql
PHPでTwitter作成　返信機能について


`$_REQUEST['res']`の由来がわからないのですが、`reply_post_id`フィールドが空になっているか文字列になっているのではないでしょうか。ブラウザでフォームを表示した状態でソースを確認してみてください。

(スペースがあるのは好ましくないですが、動くはずなのですが…)

なお、SQLをsprintfで組み立てるとSQLインジェクションのリスクがありますので、

[code]

    $sql = 'INSERT INTO posts (member_id, message, reply_post_id,created) VALUES (?, ?, ?, NOW())';
    $stmt = mysqli_prepare($sql);
    mysqli_stmt_bind_param($stmt, "i", $member['id']);
    mysqli_stmt_bind_param($stmt, "s", $_POST['message']);
    mysqli_stmt_bind_param($stmt, "i", $_POST['reply_post_id']);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);
    
[/code]

のようにバインド機構を使用しましょう

なお、webアプリケーションは注意しないと簡単にセキュリティホールを作り込んでしまいます。少なくともIPAの[安全なwebサイトの作り方](http://www.ipa.go.jp/security/vuln/websecurity.html)は読んだ方がよいでしょう。「体系的に学ぶ
安全なWebアプリケーションの作り方」(ISBN 4797361190)など信頼できる書籍で勉強されることをお勧めします。


CC BY-SA 3.0
2015-04-22T03:28:14.260
9439
2015-04-22T04:02:03.717
2015-04-22T04:02:03.717
5793
5793
9432
answer