- 締切済み
配列データのレコード登録
はじめましてphp初心者ですが、ここ一ヵ月ほど悩みに悩んだのですが、答えがわかりませんので教えてください。初歩的なことだとは思うのですが、配列データのレコード登録方法がわかりません。 例えば、$a = array("あ","い","う","え","お"); とした場合に$aをレコードに追加するにはどうすればいいんでしょうか? そのまま、$sql = "INSERT INTO (`test`) VALUES ('{$a}')"; とやってもarrayとなってしまいます。やりたいのは個別レコードにしての登録です。 1,あ 2.い 3.う …というような。 どうか宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
$sql = "UPDATE `test` SET `txt` = '{$_REQUEST['txt']}' WHERE = '{$a}'"; $_REQUEST['txt']は、前出のとおりArrayをかえすのでだめでしょう。 しかもWHERE句にいきなりイコールをおかれても・・・。 そもそもこれはなにをどうUPDATEしたいのでしょうか? かりにtxtフィールドが$aだったときtxtを$aにする処理にしてしまうと 更新がされないし・・・意味不明です、補足のひつようがあります。
- hrm_mmm
- ベストアンサー率63% (292/459)
まず、複数レコードを挿入する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])+"')"; }
お礼
ご回答ありがとうございます。 使用しているデータベースは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>
補足
ループでのレコード追加はできたのですが、今度はループで個別にレコードを更新する方法で悩んでいます。下のようなスクリプトを書いてみたのですが、処理は行われているようなのですが、レコードの値が更新されない状態です。何が原因なのでしょうか? <!--処理部分--> <?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>
- php504
- ベストアンサー率42% (926/2160)
いっぺんには無理ですので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>
- syuuiwsd
- ベストアンサー率56% (17/30)
データベーステーブルの構造によって異なります。お使いになるテーブルはどうなってるのでしょうか?
補足
説明不足ですみません。 テーブル名は`test`で構造は、 id(int)index│txt(text) という風にしています。 id│txt 1 │あ 2 │い 3 │う 4 │え 5 │お という形にしたいと考えております。
お礼
配列の更新ですがなんとか解決することができました。ありがとうございました。
補足
お返事遅くなってしまいました、すみません。 どのように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文にはどのように組み込めばよいのでしょうか? 質問内容がかなりちぐはぐになってますが、宜しくお願いします。