はじめましてphp初心者ですが、ここ一ヵ月ほど悩みに悩んだのですが、答えがわかりませんので教えてください。初歩的なことだとは思うのですが、配列データのレコード登録方法がわかりません。
例えば、$a = array("あ","い","う","え","お");
とした場合に$aをレコードに追加するにはどうすればいいんでしょうか?
そのまま、$sql = "INSERT INTO (`test`) VALUES ('{$a}')";
とやってもarrayとなってしまいます。やりたいのは個別レコードにしての登録です。
1,あ
2.い
3.う
…というような。
どうか宜しくお願い致します。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Pro*Cの構文エラー
-
C#でDBの特定列をUpdate
-
mysqlの命令文をPDOに書き換...
-
VBA ACCESS SQL...
-
order by での変数使用について。
-
phpmyadminにタグを格納するには
-
【初歩】配列の格納データ数だ...
-
SQLインジェクション対策
-
PEARのgetOneでレコードが見つ...
-
MySQLでデータベースにデータin...
-
実行時エラー3131 FROM 句の構...
-
Accessのテーブルへ複数の主キ...
-
DB(MySQL)から複数行のデータを...
-
php sqlite count 列数取得
-
DBのデータを表示させたい
-
結合したテーブルの特定カラム...
-
[php]mysqlデータ配列取得について
-
mysqlから取得した配列をカンマ...
-
php データ削除
-
エクセルVBAについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
insert1つの処理でもトランザ...
-
データベースに存在するデータ...
-
JAVA SQLServerException 列名 ...
-
<VB.NET>INSERT文でDBにデータ...
-
ResultSetインターフェイスでの...
-
Pro*Cの構文エラー
-
phpで複数の検索語を検索対象に...
-
INSERT,DELETEを同時に
-
VBA ACCESS SQL...
-
phpでforeach ($stmt as $row)...
-
MySQLのINSERT時にたまに重複に...
-
MYSQL UPDATE
-
配列をループさせてUPDATE
-
VB.NET エラーになる箇...
-
PHPからデータベースに接続した...
-
php postgres Insert と updat...
-
PHPのSQL文のデバッグ方法とコ...
-
PHP+PDO+MYSQL で実行されたSQ...
-
phpのupdate,sql文にて連番カラ...
-
PHPよりMySQLの操作のコードの...
おすすめ情報