![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
はじめましてphp初心者ですが、ここ一ヵ月ほど悩みに悩んだのですが、答えがわかりませんので教えてください。初歩的なことだとは思うのですが、配列データのレコード登録方法がわかりません。
例えば、$a = array("あ","い","う","え","お");
とした場合に$aをレコードに追加するにはどうすればいいんでしょうか?
そのまま、$sql = "INSERT INTO (`test`) VALUES ('{$a}')";
とやってもarrayとなってしまいます。やりたいのは個別レコードにしての登録です。
1,あ
2.い
3.う
…というような。
どうか宜しくお願い致します。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_15.png?5a7ff87)
No.3ベストアンサー
- 回答日時:
まず、複数レコードを挿入するSQL構文を知る必要があります。
お使いのデータベースは何でしょう? MySQLと異なる構文に見えるのだけど?
とりあえずMySQLなら
INSERT INTO table_name (id,txt) VALUES (1,'a'),(2,'b');
となるので
for を使ってこのようになる文字列を作ります。
$sq = "insert into table_name (id,txt) values ";
for($i=0; $i<count($a); $i++){
if($i>0){
$sql += ',';
}
$sql += "("+($i+1)+",'"+mysql_real_escape_string($a[$i])+"')";
}
この回答への補足
ループでのレコード追加はできたのですが、今度はループで個別にレコードを更新する方法で悩んでいます。下のようなスクリプトを書いてみたのですが、処理は行われているようなのですが、レコードの値が更新されない状態です。何が原因なのでしょうか?
<!--処理部分-->
<?php
if ($_POST['submit']) {
for($a = 0; $a < count($_REQUEST['txt']); $a++) {
$sql = "UPDATE `test` SET `txt` = '{$_REQUEST['txt']}' WHERE = '{$a}'";
mysql_query($sql);
print "更新しました";
}
}
?>
<!--フォーム部分-->
<?php
$sql = "SELECT * FROM `test`";
$result = mysql_query($sql);
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<?php
while ($row = mysql_fetch_array($result)) {
?>
<input type="text" name="txt[<?=$row["id"]?>]" value="<?php print $row["txt"];?>"><br />
<?php } ?>
<input type="submit" name="submit" value="submit">
</form>
ご回答ありがとうございます。
使用しているデータベースはMySQLになります。
教えて頂いたサンプルスクリプトを参考に自分で下のように組んでみましたら思い通りの結果になりました。まだわからない関数などがありますが、自分で調べてちゃんと理解したいと思っております。
/*処理部分*/
if ($_POST['submit']) {
for($a = 0; $a < count($_REQUEST['txt']); $a++) {
$sql = "INSERT INTO `test` (`id`,`txt`) VALUES (0, '{$_REQUEST['txt'][$a]}')";
mysql_query($sql);
print "登録しました;";
}
}
?>
/*フォーム部分*/
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="txt[]"><br />
<input type="text" name="txt[]"><br />
<input type="text" name="txt[]"><br />
<input type="submit" name="submit" value="submit">
</form>
No.4
- 回答日時:
$sql = "UPDATE `test` SET `txt` = '{$_REQUEST['txt']}' WHERE = '{$a}'";
$_REQUEST['txt']は、前出のとおりArrayをかえすのでだめでしょう。
しかもWHERE句にいきなりイコールをおかれても・・・。
そもそもこれはなにをどうUPDATEしたいのでしょうか?
かりにtxtフィールドが$aだったときtxtを$aにする処理にしてしまうと
更新がされないし・・・意味不明です、補足のひつようがあります。
この回答への補足
お返事遅くなってしまいました、すみません。
どのようにUPDATEしたいかと言うとまず、
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<?php //レコード呼び出し
$sql = "SELECT * FROM `test(テーブル名)`";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {?>
<input type="text" name="txt[<?=$row["id"]?>]" value="<?=$row["txt"]?>">
<?php } ?>
<input type="submit" name="submit" value="submit">
</form>
という感じで全体のレコードを一覧で表示したあと、
それぞれのレコードをループで個別にUPDATEしたいと思っております。
for文を使って、
for($a = 0; $a <= count($_POST['txt']); $a++) {
$sql = "UPDATE `test` SET `txt` = '{$_POST['txt'][$a]}' WHERE `id` = '{$a}'";
mysql_query($sql);
if ($a == count($_POST['txt'])) { print "レコードを追加しました!"; }
}
このように書いてみましたが、$sqlをprintすると下のような命令文になってしまいます。
UPDATE `test` SET `txt` = '' WHERE `id` = '0'
UPDATE `test` SET `txt` = '123' WHERE `id` = '1'
UPDATE `test` SET `txt` = '456' WHERE `id` = '2'
※フォーム部分には上から順に123、456、789、と値を入れてます。
命令文のどこがおかしいのかはなんとなくわかるのですが、解決方法がわかりません。
配列をPOSTで受け取る場合、$_POST["txt"]だと思いますが、キー番号を(この場合`id`)一緒に受け取る場合はどのように指定すればよいのでしょうか?
またその場合UPDATE文にはどのように組み込めばよいのでしょうか?
質問内容がかなりちぐはぐになってますが、宜しくお願いします。
No.2
- 回答日時:
いっぺんには無理ですのでforeach等のループで1個ずつINSERTしていくしかないです
ご回答ありがとうございます。foreachを調べて下のようにスクリプトを書いてみたらforeachでも同じことができました。ループ処理にも色々あるのですね。勉強になりました。ありがとうございます。
<?php
/*処理部分*/
if ($_POST['submit']) {
foreach ($_REQUEST['a'] as $value) {
$sql = "INSERT INTO `test` (`id`,`txt`) VALUES (0,'{$value}')";
mysql_query($sql);
print "レコード追加完了";
}
}
?>
/*フォーム部分*/
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="txt[]"><br />
<input type="text" name="txt[]"><br />
<input type="text" name="txt[]"><br />
<input type="submit" name="submit" value="submit">
</form>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- その他(音楽・ダンス・舞台芸能) 「録音品質の良い」オススメのレコードを教えてください。 皆様のお持ちのレコードで「これは音がいい!」 8 2022/08/08 14:45
- WordPress(ワードプレス) WordPressで作ったHPの編集方法 2 2022/12/10 14:24
- iPod・ウォークマン・音楽プレーヤー レコードの楽曲をPCに取り込みたい レコードを何枚か持っているのですが、再生機器がありません。スマー 4 2022/10/03 09:51
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- 演歌・歌謡曲 シングルレコードの事でお聞きしたい。 4 2022/10/01 14:27
- スピーカー・コンポ・ステレオ ハイレゾとレコードの音質差について 宜しくお願いします。 レコードにはCDでは録音できない倍音成分が 21 2022/06/28 10:04
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- Oracle 列1と列2の関係性で列3の条件に一致するレコードを抽出したい 1 2022/04/13 07:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPの記述で値が取れません。
-
データベースに存在するデータ...
-
一度検索されたものに対するソ...
-
SQL文の処理を関数化したいです
-
php mysql接続での書き方
-
繰り返しのコードをまとめて簡...
-
VBA ACCESS SQL...
-
DBから抜き出した値を表示する方法
-
SQL Serverからのvarchar型のデ...
-
php テーブルを作れない
-
phpのエラーについてです
-
例外処理
-
Function内でのMySQLデータベー...
-
Resource id #3 をフィールドの...
-
連想二次元配列のUNIXTIMEでの...
-
DBに入力されている値のセレ...
-
PHP 勤務時間の合計を出したい
-
sprintf関数での%Sが分かりませ...
-
XAMMPが起動しません。
-
VBAをつかってクエリの情報を抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
<VB.NET>INSERT文でDBにデータ...
-
ResultSetインターフェイスでの...
-
Pro*Cの構文エラー
-
insert1つの処理でもトランザ...
-
データベースに存在するデータ...
-
VBA ACCESS SQL...
-
INSERT,DELETEを同時に
-
MySQLのINSERT時にたまに重複に...
-
VB.NET エラーになる箇...
-
PHP&MySQLでの文字列+数列の一...
-
PHP初心者です。syntax error, ...
-
like検索の複数キーワードで、...
-
php MySQL で、更新ボタンを押...
-
php postgres Insert と updat...
-
チェックボックスからの複数検...
-
ASPでSQL文を使う場合に。
-
Q&Aサイトを作成していてURLの...
-
phpでforeach ($stmt as $row)...
-
php データベースから値を取得する
おすすめ情報