🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
POST

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

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1003閲覧

$_POST変数からの正しい値の取得方法について

lnavi.bex810vh

総合スコア12

POST

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

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/12/13 09:28

編集2020/12/13 21:46

自己解決しました。自己解決方法を投稿したのですが、404NOT FOUNDになってしまい、投稿できていなかったようです。解決方法としましては、$dbhのデータベースオブジェクトの変数名まで連番を振ってしまっていたことが原因でした。$_POSTの判定方法としては、最初にisset関数を使い変数の定義をチェックした後に、空文字かどうかを判定するだけでいけるようです。
大変おさわがせしまして申し訳ございません。修正済みコードを掲載しておきます。sanitizeが何をやっているかというと、htmlspecialcharsを実行して返しているだけです。

array(3) { ["pref"]=> string(9) "千葉県" ["main_pic"]=> string(54) "62cu6sfozmznp0u6vs5kbaaefjbvid5s6bwk6cnh9bbczeehdy.JPG" ["pic1"]=> string(54) "g5a55yhh8uglma6io4x7zymaoetbl3y6ip2kt3jno8mtf48cfd.JPG" }

<<<画面遷移前のフォーム画面>>>

<?php session_cache_limiter('private_no_expire'); require_once('login_tmp.php'); require_once('../common/common.php'); ?> <!DOCTYPE html> <html> <head><meta charset=UTF-8> <title>プロフィール確認</title> </head> <body> <?php print '<h3>プロフィール確認</h3><br />'; print '<form name="regist_profile" method="post" action="regist_profile_done.php" enctype="multipart/form-data"><br />'; print 'お住いの都道府県<br />'; $pref_arr=["0"=>"内緒","1"=>"北海道","2"=>"青森県","3"=>"岩手県","4"=>"宮城県","5"=>"秋田県", "6"=>"山形県","7"=>"福島県","8"=>"茨城県","9"=>"栃木県","10"=>"群馬県", ~中略~ "40"=>"福岡県","41"=>"佐賀県","42"=>"長崎県","43"=>"熊本県","44"=>"大分県","45"=>"宮崎県","46"=>"鹿児島県","47"=>"沖縄県"]; $post=sanitize($_POST); $pref_id=$post['pref_id']; $pref=$pref_arr[$pref_id]; print $pref.'<br />'; print '<input type="hidden" name="pref" value="'.$pref.'">'; $appeal=$post['appeal']; //main画像の処理 $main_pic=$_FILES['main_pic']; if($_FILES['main_pic']['error'] == UPLOAD_ERR_OK) { $main_pic_ex=strrchr($main_pic['name'],'.'); $main_pic_name=random_string(50); ~省略(画像生成処理)~ else { print '[メイン画像]ファイルが選択されていません。<br />'; } //画像1の処理 $pic1=$_FILES['pic1']; if($_FILES['pic1']['error'] == UPLOAD_ERR_OK) { $pic1_ex=strrchr($pic1['name'],'.'); $pic1_name=random_string(50); if($pic1) { $err=''; switch ($pic1_ex) { case '.jpg': break; print '[画像1]有効なファイル形式ではありません。<br />'; $err='1'; } } ~省略(画像生成処理)~ else { print '[画像1]ファイルが選択されていません。<br />'; } //画像2の処理 $pic2=$_FILES['pic2']; if($_FILES['pic2']['error'] == UPLOAD_ERR_OK) { $pic2_ex=strrchr($pic2['name'],'.'); $pic2_name=random_string(50); if($pic2) { $err=''; switch ($pic2_ex) { case '.jpg': break; default: print '[画像2]有効なファイル形式ではありません。<br />'; $err='1'; } } ~省略(画像生成処理)~ if($appeal){ print '<textarea name="appeal" rows="8" cols="20">'.$appeal.'</textarea><br />'; }else { print 'アピール文が入力されていません。800字以内で入力してください。'; } } print '<br />'; print '<input type="submit" value="登録">'; print '<br /><br />'; print '<input type="button" onclick=history.back() value="修正する">'; print '</form>'; ?> </body> </html>

<<<画面遷移後のコード>>>

<?php require_once('login_tmp.php'); require_once('../common/common.php'); ?> <!DOCTYPE html> <html> <head><meta charset=UTF-8> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>プロフィール登録完了</title> </head> <body> <h3>プロフィール登録完了</h3><br /> <?php //$post=sanitize($_POST); var_dump($_POST); $id=$_SESSION['id']; if($id=='') { print '無効なパラメータです。'; exit(); } //データベース接続 $dsn='mysql:host=localhost;dbname=idol;charset=utf8'; $user='root'; $password=''; $dbh= new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); if (isset($_POST['pref'])) { if ($_POST['pref'] != "") { $sql1='INSERT INTO mst_pref (mem_id,pref) VALUES (?,?)'; $stmh1=$dbh->prepare($sql1); $stmh1 -> bindValue(1, $id, PDO::PARAM_INT); $stmh1 -> bindValue(2, $_POST['pref'], PDO::PARAM_STR); $stmh1->execute(); $dbh1=null; } } if (isset($_POST['appeal'])) { if ($_POST['appeal'] != "") { $sql2='INSERT INTO mst_appeal (mem_id,appeal) VALUES (?,?)'; $stmh2=$dbh->prepare($sql2); $stmh2 -> bindValue(1, $id, PDO::PARAM_INT); $stmh2 -> bindValue(2, $_POST['appeal'], PDO::PARAM_STR); $stmh2->execute(); } } if (isset($_POST['main_pic'])) { if ($_POST['main_pic'] != "") { $sql3='INSERT INTO mst_img (mem_id,image,img_flg) VALUES (?,?,?)'; $stmh3=$dbh->prepare($sql3); $stmh3 -> bindValue(1, $id, PDO::PARAM_INT); $stmh3 -> bindValue(2, $_POST['main_pic'], PDO::PARAM_STR); $stmh3 -> bindValue(3, '1', PDO::PARAM_INT); $stmh3->execute(); } } if (isset($_POST['pic1'])) { if ($_POST['pic1'] != "") { $sql4='INSERT INTO mst_img (mem_id,image) VALUES (?,?)'; $stmh4=$dbh->prepare($sql4); $stmh4 -> bindValue(1, $id, PDO::PARAM_INT); $stmh4 -> bindValue(2, $_POST['pic1'], PDO::PARAM_STR); $stmh4->execute(); } } if (isset($_POST['pic2'])) { if ($_POST['pic2'] != "") { $sql5='INSERT INTO mst_img (mem_id,image) VALUES (?,?)'; $stmh5=$dbh->prepare($sql5); $stmh5 -> bindValue(1, $id, PDO::PARAM_INT); $stmh5 -> bindValue(2, $_POST['pic2'], PDO::PARAM_STR); $stmh5->execute(); } } if (isset($_POST['pic3'])) { if ($_POST['pic3'] != "") { $sql6='INSERT INTO mst_img (mem_id,image) VALUES (?,?)'; $stmh6=$dbh->prepare($sql6); $stmh6 -> bindValue(1, $id, PDO::PARAM_INT); $stmh6 -> bindValue(2, $_POST['pic3'], PDO::PARAM_STR); $stmh6->execute(); $dbh=null; } } ?> </body> </html>

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

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

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

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

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

m.ts10806

2020/12/13 20:49

>$post=sanitize($_POST); これが行われている時点で「遷移前」ではないですよね。 入力フォームのコードをご提示ください。 あとsanitize₍₎という機能はデフォルトでは存在しません。 そして実務的な観点だとそういうメソッドは準備しません。 何をやっているか分からないので、応えようがない部分があります。 ご提示ください。
guest

回答1

0

自己解決

自己解決いたしました。昨晩自己解決したと投稿したのですが、404NOT FOUNDになって更新されていなかったようです。方法としましては本文を編集しましたのでご覧ください。具体的には$_POSTの判定方法を変更したことと$dbhオブジェクトに連番を振らないように変更したことです。
下記、変更後のコードになります。

<?php require_once('login_tmp.php'); require_once('../common/common.php'); ?> <!DOCTYPE html> <html> <head><meta charset=UTF-8> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>プロフィール登録完了</title> </head> <body> <h3>プロフィール登録完了</h3><br /> <?php //$post=sanitize($_POST); var_dump($_POST); $id=$_SESSION['id']; if($id=='') { print '無効なパラメータです。'; exit(); } //データベース接続 $dsn='mysql:host=localhost;dbname=idol;charset=utf8'; $user='root'; $password=''; $dbh= new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); if (isset($_POST['pref'])) { if ($_POST['pref'] != "") { $sql1='INSERT INTO mst_pref (mem_id,pref) VALUES (?,?)'; $stmh1=$dbh->prepare($sql1); $stmh1 -> bindValue(1, $id, PDO::PARAM_INT); $stmh1 -> bindValue(2, $_POST['pref'], PDO::PARAM_STR); $stmh1->execute(); $dbh1=null; } } if (isset($_POST['appeal'])) { if ($_POST['appeal'] != "") { $sql2='INSERT INTO mst_appeal (mem_id,appeal) VALUES (?,?)'; $stmh2=$dbh->prepare($sql2); $stmh2 -> bindValue(1, $id, PDO::PARAM_INT); $stmh2 -> bindValue(2, $_POST['appeal'], PDO::PARAM_STR); $stmh2->execute(); } } if (isset($_POST['main_pic'])) { if ($_POST['main_pic'] != "") { $sql3='INSERT INTO mst_img (mem_id,image,img_flg) VALUES (?,?,?)'; $stmh3=$dbh->prepare($sql3); $stmh3 -> bindValue(1, $id, PDO::PARAM_INT); $stmh3 -> bindValue(2, $_POST['main_pic'], PDO::PARAM_STR); $stmh3 -> bindValue(3, '1', PDO::PARAM_INT); $stmh3->execute(); } } if (isset($_POST['pic1'])) { if ($_POST['pic1'] != "") { $sql4='INSERT INTO mst_img (mem_id,image) VALUES (?,?)'; $stmh4=$dbh->prepare($sql4); $stmh4 -> bindValue(1, $id, PDO::PARAM_INT); $stmh4 -> bindValue(2, $_POST['pic1'], PDO::PARAM_STR); $stmh4->execute(); } } if (isset($_POST['pic2'])) { if ($_POST['pic2'] != "") { $sql5='INSERT INTO mst_img (mem_id,image) VALUES (?,?)'; $stmh5=$dbh->prepare($sql5); $stmh5 -> bindValue(1, $id, PDO::PARAM_INT); $stmh5 -> bindValue(2, $_POST['pic2'], PDO::PARAM_STR); $stmh5->execute(); } } if (isset($_POST['pic3'])) { if ($_POST['pic3'] != "") { $sql6='INSERT INTO mst_img (mem_id,image) VALUES (?,?)'; $stmh6=$dbh->prepare($sql6); $stmh6 -> bindValue(1, $id, PDO::PARAM_INT); $stmh6 -> bindValue(2, $_POST['pic3'], PDO::PARAM_STR); $stmh6->execute(); $dbh=null; } } ?> </body> </html>

投稿2020/12/13 21:50

lnavi.bex810vh

総合スコア12

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

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

lnavi.bex810vh

2020/12/13 21:59

m.ts10806さん、ありがとうございました。遷移前のフォーム画面は記入していたのですが。。。sanitizeはhtmlspecialcharsを実行しているだけです。解決方法としては自己解決にて掲載しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問