
PHP+MySQLでの配列のinsert文について
はじめまして。
POSTされた配列データのDB一括挿入方法で約2週間悩み中で非常に困っております。
私の配列の理解が不足しているため、初心者の私でもわかるように解決方法をご教示いただけましたら大変助かります!何卒、よろしくお願い致します。
行いたい処理といたしまして、
[index.php]
CSVアップロード(名前・メアド・金額・年月日の4項目)→※解決しました。
↓↓↓
[check.php]
CSVデータをテーブルで入力されている行数分をループして表示→※解決しました。
↓↓↓
[finish.php]
check.phpで表示した配列データをPOSTで受け取りDBに登録する。→※未解決
となります。
ソースは下記のようになります。
※index.phpは今回無関係と思うので省略します。
━━━━ [check.php]ここから ━━━━
・
・
・
<form action="finish.php" method="post">
<? while($arr = fgetcsv_reg($fp,1024)){ ?>
<?
//空行以外を処理
$num = count($arr);
if(!$arr ==''){
//
$namae = $arr[0]; //名前
$mail = $arr[1]; //メアド
$money = $arr[2]; //金額
$year = $arr[3]; //年
$month_hen = $arr[4]; //月
$month = sprintf("%02d", $month_hen); //1~9月(1桁)の場合、前に0を付加する
$day_hen = $arr[5];//日
$day = sprintf("%02d", $day_hen); //1~9日(1桁)の場合、前に0を付加する
//
?>
<input type="hidden" name="namae[]" value="<?php echo $namae ?>">
<input type="hidden" name="mail[]" value="<?php echo $mail ?>">
<input type="hidden" name="money[]" value="<?php echo $money ?>">
<input type="hidden" name="year[]" value="<?php echo $year ?>">
<input type="hidden" name="month[]" value="<?php echo $month ?>">
<input type="hidden" name="day[]" value="<?php echo $day ?>">
・
・
・
<input type="submit" value=" 一括登録する " />
</form>
━━━━ [check.php]ここまで ━━━━
━━━━ [finish.php]ここから ━━━━
・
・
・
// DB登録部分開始
if ($_POST['submit']) {
$arr = array(
'reg_id', //auto_increment
'user_id', //ユーザーID(セッションで保持)
'namae', //名前
'mail', //メアド
'money',//金額
'ymd'//年月日
);
$value = array(
NULL,
mysql_real_escape_string( $_SESSION['user_id'] ),
mysql_real_escape_string( $_POST['namae'] ),
mysql_real_escape_string( $_POST['mail'] ),
mysql_real_escape_string( $_POST['money'] ),
mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] )
);
// DB登録部分終了
//ループ処理開始
foreach ( $arr as $value ) {
$sql = "insert into receipt_issue ( $arr ) values ( $value )";
mysql_query($sql);
$result = mysql_query( $sql ) ;
//ループ処理終了
}
}
・
・
・
━━━━ [finish.php]ここまで ━━━━
というソースなのですが、データベースに登録できません。
例えば「finish.php」内に、
print_r( $_POST['namae'] );
と記述すると、
Array ( [0] => ああ君 [1] => いい君 [2] => うう君 [3] => ええ君 )
とちゃんと配列は受けとれているようです。
そもそもDB接続ができていないということもありません。
※配列でない場合のテストでちゃんと接続・登録できていました。
いろいろ調べた中で、$value = array内の記述方法に問題があるのか・・・
と思い、色々調べて試したのですがダメでした。。。
上記の仕組みでループさせてデータベースに登録するには、どのように記述したらよろしいでしょうか?
情報に不足がございましたら、申し訳ございません。その点ご指摘いただきましたら必要な情報を再度投稿します。
何卒、お力をお貸しいただけましたら幸いでございます。
宜しくお願い致します!
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
#2です。
今ロジックで処理しようとすると、このようになると思いますよ。
求めているものとは異なると考えます。
insert into receipt_issue ( Array ) values ( reg_id )
insert into receipt_issue ( Array ) values ( user_id )
insert into receipt_issue ( Array ) values ( namae )
insert into receipt_issue ( Array ) values ( mail )
insert into receipt_issue ( Array ) values ( money )
insert into receipt_issue ( Array ) values ( ymd )
ダブルクォーテーションの中に変数を記すと確かに展開を行いますが、
配列の中身を勝手にカンマ区切りで展開するわけではありませんよ。
カンマ区切りで展開したいなら、
implode(",", $arr)
などとしないとできません。
また、
$sql = "insert into receipt_issue ( $arr ) values ( $value )";
echo $sql;
exit;
mysql_query($sql);
とした際に「Resource id #6」と表示されるならば、そもそも変数名を誤っているなど
が原因と思われます。
Resource id #nは、例えば今回で言えばDBにクエリを発行した際に取得できる
リソースなどがそれにあたります。
つまり、格納されている内容は文字列ではありません。
http://www.php.net/manual/ja/function.mysql-quer …
また、
> mysql_query($sql);
> $result = mysql_query( $sql ) ;
となっていますが、上のmysql_query()は不要ですね。
上記の状態が解消され、正しく文字列が出力されてきたら、SQLが誤っている状態であることが
確認できるでしょう。
そしたら、前回回答しましたが、正しいループ、正しい変数値を利用してSQL文を生成するよう
修正すればいいでしょう。
No.4
- 回答日時:
$sql = "insert into receipt_issue ( $arr ) values ( $value )";
<ここにecho $sql ; を入れてください。>
mysql_query($sql);
<ここに入れたのでは無いですか?>
$result = mysql_query( $sql ) ;
この回答への補足
ご指摘いただきましたように、
<ここにecho $sql ; を入れてください。>
の場所にecho $sql ;を入れて表示いたしましたら、
「Resource id #6」と出力されました。
これはどういう意味なのでしょう?
理解が不足しており、申し訳ございません。
No.3
- 回答日時:
>$sql = "insert into receipt_issue ( $arr ) values ( $value )";
>の下
ですよ。select が出てくることはないでしょ?
この回答への補足
すみません、、、
直下で echo $sql ;
を入れてみたところ、「Resource id #6」と出力されました。
これはどういう意味なのでしょう?
検索して調べてみましたが「エラー」という意味でもなさそうな・・・
No.2
- 回答日時:
$arrに入っているのはカラム名だけですよね?
それをループしてもカラム数分がループされて、全く意図しない動きになりますよ。
この作りだと
foreach ( $_POST["namae"] as $rowIndex => $dummy) {
$sql = "insert into receipt_issue ($arr[1], $arr[2], $arr[3], $arr[4], $arr[5]) values ( $value[1], $value[2][$rowIndex], $value[3][$rowIndex], $value[4][$rowIndex], $value[5][$rowIndex])";
みたくしないと出来ません。
この回答への補足
ご回答ありがとうございます。
私の記述が根本的に間違っているような気がしてきました。
もっともよいと考えれる記述方法をお教えいただけましたら大変助かります。
お手数ですが、よろしくお願い致します。
No.1
- 回答日時:
$sql = "insert into receipt_issue ( $arr ) values ( $value )";
の下に
$sqlを表示してみましょう。
insert into receipt_issue ( 'reg_id', 'user_id', 'namae', 'mail', 'money', 'ymd' )
values ( 'user_id','namae','mail','money','year' . '-' . 'month' . '-' . 'day' )
であれば正解?かと思ったのですが、'reg_id'は登録時に設定されるから不要かな。
この回答への補足
アドバイスありがとうございます。
$sqlを表示してみましたところ、
select * from ●● where ●●_user_id = '○○'
と表示されました。
なお、
> values ( 'user_id','namae','mail','money','year' . '-' . 'month' . '-' . 'day' )
といただきましたが、これでPOST送信された内容を受け取れるのでしょうか?
すみません、もう少し具体的にご説明いただきましたら大変助かります。
何卒、よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列で指定した値のみをMySQLか...
-
データベースサーバーにあるデ...
-
PHP MySQL で updateができま...
-
抽出結果にランク付けを・・・...
-
MYSQL→PHP→10件表示
-
自動的にchekboxを
-
チェックボックスの値の受け渡し
-
データベースのページング出力...
-
テーブル<TR></TR>の処理について
-
PHPでMySQLのデータを2次元配...
-
PHP+MySQL テーブルが表示され...
-
mySQLからデータを取り出す
-
php5.2.9に変更後に不具合について
-
sortable ギブアップです…助け...
-
PHP セレクトメニューの呼び出...
-
PHPの画像表示関連(?)プログラ...
-
PHPで[]の使い方について
-
PHPでデータベースに正しく入力...
-
文字化けするのはなぜですか
-
phpで以下のようにHTMLで出力さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DBで検索結果に該当するデータ...
-
PHPで[]の使い方について
-
mysql_fetch_assoc()の非推奨
-
アラートでyes noを作りたいです。
-
チェックボックスでチェックし...
-
チェックボックスから検索、PHP...
-
checkboxクリック時、SQLを実行...
-
phpでmysqlを使ってデータベー...
-
sortable ギブアップです…助け...
-
空だと思ったのに・・・
-
PHP 10件表示 "前へ" "次へ"
-
入力フォームが上手く動きませ...
-
PHP MYSQLから呼び出し後の比較
-
エクセルVBAについて
-
PHPでMySQLデータを呼び出し、w...
-
mysqlから取得した配列をカンマ...
-
データベースのページング出力...
-
チェックボックス検索システム
-
検索したときなにも無かった場合
-
dbに登録したデータをphpのプル...
おすすめ情報