質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

963閲覧

$_SESSION['user_id']をajaxのPOSTに渡したい

pegy

総合スコア245

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/08/09 12:41

前提

例えば以下の様なコードでユーザーがログインした後を前提に、$_SESSION['user_id']には1 が格納されているものとします。ajaxでこのユーザーidの結果を利用して、post.php MYSQL の処理を実行したいと考えそれぞれのコードを作成して動かしてみました。想定通りの動作はしてくれるのですが、ここでふと疑問に思いました。

Javascript上(クライアントサイド)においては
data:{'user_id':1,'content':content}
となっていて、このuser_idはユーザーが悪意のある値をいくらでも埋め込み送信できてしまうため、想定していないINSERT INTOがpost.phpサイドで実行されてしまうと思いました。

従って、post.php側で$_SESSION['user_id']の値がdata:{'user_id': INT}で受け取った値と一致していることを確認する、またはこの値に関しては、Javascript(クライアントサイド)を経由せずに直接サーバーサイドだけでpost.php側に$_SESSION['user_id']の値(ここの例で言うと1)を渡さなければならないと考えました。

質問

一般的にこの様な場合、どの様にpost.php$_SESSION['user_id']の値を正しく渡す、または一致を確認すべきなのでしょうか?

基礎的なことで申し訳ございませんが、よろしくお願い申し上げます。

php

1//main.php 2<?php 3session_start(); 4$_SESSION['user_id'] // 例えば1 5?> 6<body> 7 <input type="text" class="text_content" > 8 <button class="btn">送信</button> 9 10 11 <script> 12 $('btn').on('click',function(){ 13 var content = $('text_content').val(); 14 $.ajax({ 15 url:"post.php", 16 method:"POST", 17 data:{ 18 'user_id':<?php echo htmlspecialchar($_SESSION['user_id'],ENT_QUOTES);?>, 19 'content':content 20 } 21 }) 22 }).done((result)=>{ 23 // do something 24 }) 25 </script> 26 27<body>

php

1//post.php 2$get_user_id = filter_input(INPUT_POST,'user_id'); 3$get_content = filter_input(INPUT_POST,'content'); 4//各validation作業について中略 5 6//PDOによるMYSQL接続 中略 7$sql = "INSERT INTO test_table (id,content) VALUES (?,?)"; 8$stmt= prepare($sql); 9stmt->bindValue(1, $get_user_id, PDO::PARAM_INT) 10stmt->bindValue(2, $get_content, PDO::PARAM_STR) 11$flag = $stmt->execute(); 12//後略 13

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一般的にこの様な場合、どの様にpost.phpに$_SESSION['user_id']の値を正しく渡す、または一致を確認すべきなのでしょうか?

単にそのままpost.php$_SESSION['user_id']を使ってしまう、では何か問題があるとお考えでしょうか?

投稿2021/08/09 13:05

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pegy

2021/08/09 13:45

コメントありがとうございます。 $_SESSIONは現に表示されているページでのみ機能するものであるという勝手な先入観を持っておりました。ご助言ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問