
こんにちは。
MySQLのデータをphpで管理するページを作っていますが、壁にぶつかってしまいました。
データベースのあるフィールドに、「あああ」「いいい」「ううう」というようにいろんな言葉が登録されています。
これらを削除・追加するために、phpで取り出して、チェックボックスでリストアップします。
リストにない言葉は新たに登録できるように、テキストフィールドも用意しています。
□あああ □いいい □ううう 新規:[ ](テキストフィールド)
というふうにです。
このフォームはちゃんと機能していまして、追加した言葉はデータベースに記録されているのですが、なぜかフォームにリストアップされないのです。
例えば、
□あああ □いいい □ううう 新規:[ ]
で、新規のところに「かかか」と入れて送信すると、
□あああ □いいい □ううう □かかか 新規:[ ]
となってほしいわけですけど、
□あああ □いいい □ううう □ 新規:[ ]
となってしまうのです。
フォームを使って送信した言葉が、データベースに記録されていながら、取り出せないというのは、何が原因だと考えられるでしょうか?
何かすごく単純なことのような気がするので、ソースは載せないでおきます。
ご教示をよろしくお願いいたします。
No.6ベストアンサー
- 回答日時:
「array_unique()」の挙動が質問者の意図するものではないということが原因でしょう。
「$results」をダンプしてみると意味が分かるはずです。「foreach」構文を利用してインプット要素を表示するように修正すれば、意図する動作になるかと思います。
躓いたときは、落ち着いてマニュアルを参照することが大事です。
参考URL:http://www.php.net/manual/ja/function.array-uniq …
ありがとうございます。
foreachを使うことで、あっさり解決してしまいました。
今回のことではいろいろ勉強になりました。
ご回答くださった皆様には深くお礼申し上げます。
No.5
- 回答日時:
すみません、自分の環境で再現できなかったのでおうかがいします。
$kotoba = preg_split('/\//',$row["kotoba"],-1,PREG_SPLIT_NO_EMPTY);
print_r($kotoba);
exit;
とすると、どのような結果になりますか?
よろしければ教えてください。
この回答への補足
preg_splitの行の真下にご指定の2行を入れると、
データベースの最初のデータだけを/で分割して返してきます。
最初のデータは「あああ/いいい/ううう」ですので、
Array ( [0] => あああ [1] => いいい [2] => ううう )
となります。
No.4
- 回答日時:
>言葉なしのチェックボックスだけ
ああ、たしかにそう書いてありますね。見落としてました。
おそらく日本語の文字コードの問題かと。
「かかか」のような日本語ではなく「kakaka」でやっても
同じでしょうか?
もしkakakaが通るようなら、
$db = mysql_select_db($mydb, $link);
したあとに
$result = mysql_query("SET NAMES '正しいキャラクターコード'");
的なものを発行してから、ためしてみては?
また、kakakaも通らないようであれば$_POSTがうまく渡ってないのでは?どこかに
print_r($_POST["kotoba"]);
などしてデバッグしてみてください
たびたびありがとうございます。
kakakaも同様です。
print_r($_POST["kotoba"]);をどこかに入れて、「かかか」と送信すると、
Array ( [0] => かかか ) と出ますので、ちゃんと渡せているようです。
ところで、一つ気付いたことがあります。
最初の、何も問題がなかった時点。
□あああ □いいい □ううう 新規:[ ]
ここで「かかか」と入れると、
□あああ □いいい □ううう □ 新規:[ ]
となると書きました。そこでこのまま「kakaka」と入れると、予想通りに、
□あああ □いいい □ううう □ □ 新規:[ ]
となり、もう一度、「sasasa」と入れると、
□あああ □いいい □ううう □ □ □ 新規:[ ]
となったのですが、今度は「tatata」と入れてみたら、
□あああ □いいい □ううう □ □ □ □かかか 新規:[ ]
と、前に入れた「かかか」が出てきたのです。
そこでこのまま「れれれ」と入れてみましたら、
□あああ □いいい □ううう □ □ □ □かかか □kakaka 新規:[ ]
と出てきました。
私にはさっぱりわけがわかりませんが、何か解決の手がかりになりますでしょうか?
No.3
- 回答日時:
すみません、以下お伺いしたいです。
・var_dump()などを使ってselect文の結果セットの中身は確認しましたか?
・文字列をそのまま配列に入れて登録しているのでしょうか?
・checkboxリストアップのためのループで、繰り返す回数は正しいですか?
※たぶんcount()の値を繰り返し回数にしているとは思いますが念のため…
この回答への補足
var_dump()で中身は確認しています。フォームで送った言葉はちゃんと入っています。
フォームで送った文字列は、複数ある場合は、implodeで「/」を間に入れて、一つの文字列として登録しています。
checkboxのリストアップは、count()でループ回数を出してます。
すみません、この欄にソースを貼り付けさせていただきます。
----------------------------------
if (isset($_POST["new"])) {
$link = mysql_connect($server, $usr, $pass);
$db = mysql_select_db($mydb, $link);
$id = $_POST["id"];
$id = quotemeta($id);
if($_POST["kotoba"]<>''){$kotoba = implode("/",$_POST["kotoba"]);}
$kotoba = quotemeta($kotoba);
$result = mysql_query("INSERT INTO $table VALUES(NULL, '$kotoba')");
}
$link = mysql_connect($server, $usr, $pass);
$db = mysql_select_db($mydb, $link);
$items = mysql_query("SELECT DISTINCT kotoba FROM $table");
print("<form action='test.php' method='post'>\n");
while($row = mysql_fetch_assoc($items)){
$kotoba = preg_split('/\//',$row["kotoba"],-1,PREG_SPLIT_NO_EMPTY);
$i = 0;
while($i < count($kotoba)){
$ar_kotoba[] = $kotoba[$i];
$i++;
}
}
$results = array_unique($ar_kotoba);
$i = 0;
while($i < count($results)){
print("<input type='checkbox' name='kotoba[]' value='$results[$i]'>$results[$i]\n");
$i++;
}
print("<br>新規<input type='text' name='kotoba[]' size='10'>\n");
print("<input type='submit' name='new' value='追加'>\n");
print("</form>\n");
mysql_close($link);
----------------------------------
どうぞよろしくお願いします。
No.2
- 回答日時:
>データベースに記録されていながら、取り出せない
登録と参照の順番が逆にになっているとか?
参照してから登録すれば当然新規登録したものは1回目は
参照されません。
また、なんらかの理由でフラグ管理をしていて、通常登録では
表示フラグがfalseになっている・・・なんてことはないですか?
私がシステムを組むなら必ず表示フラグをつけますので
(別名削除フラグ)
この回答への補足
登録と参照が逆ですと、登録前と同じリストの内容になるはずですよね?
でも、登録後は、言葉なしのチェックボックスだけになってしまうのです。
フラグについては、よくわかりません...
いま、余計な部分を削除したソースを作っていますので、後ほど掲載させていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAについて
-
phpでmysqlを使ってデータベー...
-
チェックボックスによる複数の...
-
チェックボックスから検索、PHP...
-
DBで検索結果に該当するデータ...
-
PHP、SQLite3のデーターでログ...
-
checkboxクリック時、SQLを実行...
-
PHPで[]の使い方について
-
WHILEで取り出しループ中にさら...
-
MySQLでデータベースにデータin...
-
<VB.NET>INSERT文でDBにデータ...
-
テキストボックスに入れた内容...
-
in 'where clause'のエラーの理由
-
エラー3011
-
VBAをつかってクエリの情報を抽...
-
実行時エラー3131 FROM 句の構...
-
検索表示について
-
phpのエラーについてです
-
ADOを使いDBへ読み書きしたい
-
PDO_MYSQLを利用したDB接続がで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
dbに登録したデータをphpのプル...
-
DBで検索結果に該当するデータ...
-
アラートでyes noを作りたいです。
-
PHPの画像表示関連(?)プログラ...
-
データの取得方法
-
配列で指定した値のみをMySQLか...
-
警告を出さないコードの書き方
-
PHPで[]の使い方について
-
ループ文で呼び出したデータの...
-
DBからSelectしたレコードのデ...
-
mySQLで結果が無いときの処理
-
データベースのページング出力...
-
PHP セレクトメニューの呼び出...
-
PHP 10件表示 "前へ" "次へ"
-
mySQLからデータを取り出す
-
データベースサーバーにあるデ...
-
PHPのプルダウンメニューにDBの...
-
mysql>PHPにデータ表示、10件ご...
-
テーブル<TR></TR>の処理について
-
php テーブルが作成できない
おすすめ情報