IEでimplodeがBad argumentsになる問題の解決方法

このQ&Aのポイント
  • 配列で次のページにPOSTで渡し、implodeでセレクト文に入れようとすると、IEでは正しく動作しない現象が発生します。
  • 環境はCENTOS 5、Mysql 5.0.45でUTF-8 Unicode(utf8)の文字セットを使用しており、PHP 5.0でHTMLとPHPをUTF-8で書いています。
  • IEでの問題を解決する方法または別の方法があれば教えていただきたいです。
回答を見る
  • ベストアンサー

IEで、implodeが Bad arguments になります。

配列で次のページに[POST]で渡して[implode] でセレクト文に入れようとしていますが IEではキチンと入ってくれません。*fireFox safari では、何も問題はありません。 IEはどのバージョンも同じです。 環境です CENTOS 5 Mysql 5.0.45 MySQL の文字セット: UTF-8 Unicode (utf8) PHP 5.0 HTML,PHPは UTF-8 で書いています。 クエリの前に print_r($mailID); とすると 1,2,3,4,5,6,7,8 と表示しますが print $sql; で調べると  SELECT * FROM customer WHERE customerID IN (); 同じ事をfireFox safari ですると SELECT * FROM customer WHERE customerID IN (1,2,3,4,5,6,7,8); クエリは下記の用に書いています。 $sql = "SELECT * FROM customer WHERE customerID IN (".implode(",",$mailid).");"; 何が問題なのでしょうか? この現象を改善する(IEでも表示する)、若しくは別の方法は無いでしょうか。。 分かる方、教えて頂けませんか? 宜しくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • cobe
  • ベストアンサー率23% (54/227)
回答No.1

フォームから配列で値をPOSTしようとしているのですね。そこが問題なのであれば、データベースと接続するのではなく、問題の切り分けができるシンプルなソースで試した方がいいでしょう。 ちなみに次のようなシンプルなソースで試したところ、FirefoxでもIE7でも配列として値はもらえることを確認しました。 ―――― <html> <body> <? var_dump($_POST); ?> <hr> <form method="POST" action="<?=$_SERVER["PHP_SELF"]?>"> <input type="text" name="a[]"><br> <input type="text" name="a[]"><br> <input type="submit" name="sub"><br> </body> </html> ――――

kiyomidesuyo
質問者

お礼

お礼が遅くなりました。 アドバイス通り、問題を切り分けて・・ 試していたのですが、どうしても配列が渡せませんでした。 POST自体が配列と言うことが分かったのですが、 何か根本的な勘違いをしているみたいです。 今回は時間切れで、代替の方法で乗り切る予定です。 配列を送る側では IDを送ります。 <? select ****** while($col = mysql_fetch_array($rst)) { $id =$col["id"] $id[] =$id } $mailid = implode(",",$id); ?> <input type="hidden" name="mailid" value="<?=$mailid?>" /> これでPOSTで送ります。 何かへんなことをしているという自覚は有るのですが、 どうしても出来ませんでしたので。 このような方法を取りました。 ありがとうございました。

kiyomidesuyo
質問者

補足

早速、アドバイスありがとうございます。 配列の事、あまり良く分かっていないのですが 最近少し理解してきた感じです。 投稿してからも色々やってみるのですが、 そうですよね、問題の切り分けですね。 *基本を忘れていました。ちょっとパニックを起こしていました。。 教えていただいた方法は試していませんでしたが、 根本的におかしいのかもとも思います。 FireFox に print_r($配列の関数); と入れると、 Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 6 [5] => 11 [6] => 12 [7] => 13 [8] => 14 ) このように表示するのに、IEでは 1,2,4,5,6,11,12,13,14,15 数字だけしか表示していません。 配列が渡せてないのでしょうか? ちょっと私には難しくて、配列が渡せない事が分かりません。 問題の切り分けが難しいのですが、頑張ってみます。 追加でアドバイス宜しくお願いいたしますm(__)m

関連するQ&A

  • WHERE文の中で、MYSQLにINSERTが出来ない。

    メールを指定した時間に送信しようとしています。 手順はMYSQLに送信したい時間とメールの色々を入れて、 CRONで現在時間を調べて、合致したものを送信する。 このような手順で実現しようとしていますが、 最初でつまずいています。 送信先メールアドレスを while で抽出しながら MYSQLへインサートするつもりですが 一度しかインサートしてくれません。 インサートのsqlを[print $sql;]で、表示したものをphpMyAdminで SQL を実行すると キチンと挿入できます。 **3回分まとめてSQL を実行してもうまく挿入できます。 前のページから送ったものは全て[print] で、思い通りの結果が表示します。 どなたか、ご教授お願いいたします。 $sql = "select count(*) as cnt from customer WHERE customerID IN (1,2,3,5,8)"; $rst = mysql_query($sql, $con); $col = mysql_fetch_array($rst); $tcnt = $col["cnt"]; mysql_free_result($rst); print $tcnt."通送信<br />"; $subject ="これはPOSTで送りました"; $honbun ="これはPOSTで送りました"; $from = '送信元メールアドレス'; $jikan = "これはPOSTで送りました"; $sql ="select * from customer WHERE customerID IN (1,2,3,5,8)"; $rst = mysql_query($sql, $con); while($col = mysql_fetch_array($rst)) { $customerID= $col['customerID']; $name = $col['name']; $mail = $col['mail']; i++ $sql = "INSERT INTO mail_queue_timer (timermailID,customerID, jikan ,sender , recipient ,headers, body ) VALUES ($timermailID, $customerID,$jikan , \"$from\" , \"$mail\" ,\"$subject\" , \"$honbun\" ) "; $rst = mysql_query($sql, $con); }

    • ベストアンサー
    • PHP
  • MySQLのサブクエリーでエラーがでます

    現在MySQLを使って開発をしています。 SQLもMySQLもまだあまり使ったことがないのでなにか大きな勘違いをしている かもしれませんが、自分で作ったデータベースにMysqlコマンドでアクセスし、 以下のようにselectを行うとsyntaxエラーが発生します。 mysql> select CREATE_DATE from user where cust_id = (select cust_id from customer where memo = 'memo'); ERROR 1064: You have an error in your SQL syntax near 'select cust_id from customer where memo = 'memo')' at line 1 しかしサブクエリーの内容も、その前のselectもそれぞれ下記のように単体で実行すると正常に動作するので、文法的には間違っていないと思います。 ERROR 1064のsyntaxエラーは何を指しているのでしょうか? ぜひご教示ください。 mysql> select cust_id from customer where memo = 'memo'; +---------+ | cust_id | +---------+ | 1 | +---------+ 1 row in set (0.00 sec) mysql> select CREATE_DATE from user where cust_id = '1'; +-------------+ | CREATE_DATE | +-------------+ | 2001-07-23 | +-------------+ 1 row in set (0.00 sec)

  • SQLエラー

    検索システムの検索結果の分割をしようとしています。 しかしどうしてもSQL文にエラーがでてしまいます。 SELECT * FROM shops where (area='◯◯◯') ORDER BY id DESC limit0, 10 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limit0, 10' at line 1 該当するSQL文は以下になります。 $query = "SELECT * FROM shops"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC '; }   $query .= "limit" . $page_num*10 . ", 10" ; limit句の使い方等間違いはないのかなと思うのですが、いかがでしょうか? アドバイスご教示いただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 期待した値がMySQLから返ってこない

    SELECT 会員名 FROM 会員TBL WHERE 会員番号 IN (1,2,3,5) というSQLをプロンプトから投げると正しい結果が返ってくるのですが、同じSQLをPHPから投げると、プロンプトとは異なった結果が返ってきます。 プロンプトから投げた場合、会員番号が 1,2,3,5 の会員名が返ってきます。ですが、PHPから以下のように投げた場合、会員番号が 1 の会員名しか戻ってきません: $SQL = "SELECT 会員名 FROM 会員TBL WHERE 会員番号 IN (1,2,3,5)"; $result = mysql_query($q, $this->connection); $dbarr = mysql_fetch_array($result); print_r($dbarr); //表示:Array ( [0] => 一番目の会員 ) どこかが間違っているのでしょうか?お分かりになればお教え下さい。よろしくお願いします。 (環境: OS:WinXP Pro php:4.3.7, mysql:4.0.20a)

    • ベストアンサー
    • PHP
  • MySQLのサブクエリ

    おせわになっております。 MySQLを愛用していますが、気になる疑問にぶつかりましたので、質問させてください。 ★MySQLの4.1系のサブクエリは、性能が悪いのですか? たとえば select * from t1 where key in ( select key from t2 where key2 in ( select key2 from t3 where col = 1)) のようなことをしようとしたとき、ものすごく遅いことがあります。 あきらめて、クエリを分けて、小分けに実行すれば、速いです。 サブクエリなどを高速に実行させる方法などありますでしょうか?MySQL5では違うものなのでしょうか? よろしくお願いします

  • SQLの結果が返ってこない

    PHP+mysqlで以下のようなSQL文で処理を行ったのですがデータが返ってきません。 $sql = 'SELECT * FROM books WHERE id=3'; $recordSet = mysql_query($sql); if(mysql_fetch_assoc($recordSet)){ while ($table = mysql_fetch_assoc($recordSet)) {        処理     } } mysqlの画面で SELECT * FROM books WHERE id=3 を入力してみるとしっかりと結果が返ってきます。 ちなみに1行目を、違うテーブルの $sql = 'SELECT * FROM podcast WHERE code=3 ORDER BY dcdate DESC LIMIT 0,3'; にしてみると、データが表示されます。 2日間かけてずっと試行錯誤してみたのですが、完全に行き詰ってしまったので、何か考えられる原因はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • Not Exists の絞込みについて

    SQLServer2005 Express にて次のようなSQLをVB.NET2005で発行しようとしたらうまくいきません SELECT CustomerID,CustomerName FROM T_Customer WHERE Kana LIKE N'カ%' OR Kana LIKE N'キ%' OR Kana LIKE N'ク%' OR Kana LIKE N'ケ%' OR Kana LIKE N'コ%' AND not exists(select 1 from T_ABC where T_Customer.CustomerID=T_ABC.CustomerID 目的はT_ABCテーブルにあるデータ以外のデータの中からカ行のKana読みの データのみを抽出するものです SQL初学者でお恥ずかしい限りですがよろしくご教授ください

  • 一部データを除外するSQL

    SQL(MySQL)についての質問です。 顧客データの中からある月の誕生日のデータを抽出しようと考えています。 6月生まれだったら、 SELECT * FROM customer WHERE DATE_FORMAT(birthday, '%m')= 6; 12月生まれだったら SELECT * FROM customer WHERE DATE_FORMAT(birthday, '%m')= 12; でできるんですが、実は顧客データの中には誕生日がわからない人がいて、 その場合「1900-01-01」をセットしています。 ですので、1月生まれを指定する SELECT * FROM customer WHERE DATE_FORMAT(birthday, '%m')= 1; とすると誕生日が「1900-01-01」の人も含まれてしまいます。 誕生日「1900-01-01」のデータを排除するSQLがわからなくて困っています。 NOT IN とか EXCEPT とか使ってみたんですがうまくいきませんでした。 どなたか教えて頂けると大変うれしいです。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHP+MySQL

    PHP4で、MySQLに接続しています。 $connには、接続IDが格納されています。 以下のスクリプトで、「エラー」が出てしまうのですが、何故でしょうか? $sql = "SELECT (User_num, User_name, User_pass) FROM User WHERE User_name='$login_name'"; if (!$result= mysql_query($sql, $conn)){ die (print ("エラー")); } SQL文を、 SELECT (User_num) FROM User WHERE User_name='$login_name' と書き換えるとうまくいきます。複数にするとエラーというのはどうしてでしょう

    • ベストアンサー
    • MySQL
  • PHPでMySQLのデータを検索したい

    お世話になります。 PHPでMySQLのデータを検索したいと思い、 以下のようにしてみたのですがうまく表示されません。 -- $name = $_POST["name"]; $link = mysql_connect('localhost', '', ''); $db_selected = mysql_select_db('', $link); mysql_set_charset('utf8'); $sql = "SELECT * FROM search WHERE". $name; $result = mysql_query($sql); while($row = mysql_fetch_array($name)) { print $row['name']; } $close_flag = mysql_close($link); -- どう改善すればいいのでしょうか? 初心者の為、少々お見苦しい点があるかと思いますが どうぞよろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう