• ベストアンサー

英語圏で外注したソースが同じ動きをしません

環境:php5,MySQL5,XP インドで外注したソースが、同じ動きをしません。 1.DB接続は、pear::dbで mysql_connect('localhost', 'root', '*****') の後に、 mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis"); を追加し、文字化けも起こらず、漢字で表示されます。 2.以下で、$mark を追うと、英語だけのデータだとうまく動きます。 (GLOBALS["mark"]が増えて行きます) 日本語を混ぜると 下記$markと$GLOBALS["mark"] が、すべて'0'になってしまいます。 $mark = 0; --処理 $result='O'; $GLOBALS["ans"]=$GLOBALS["ans"]+1; $GLOBALS["get"]=$GLOBALS["get"]+$qqqa['mark'];} --処理 $GLOBALS["mark"]=$GLOBALS["mark"]+$qqqa['mark']; --処理 $GLOBALS["mark"]=$GLOBALS["mark"]+$qqqa['mark']; *これを$qqqa['mark']から$qqqe['mark']まで、5回足しています。 文字コードさえ出来れば、そのまま動くだろう、位に考えていて、PHPほとんど勉強しておらずすいません。何かヒントだけでもいただけると助かります。

  • idek
  • お礼率47% (170/361)
  • PHP
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

$qqqa['mark']から$qqqe['mark']がすべて0ということですよね $qqqa['mark']を取得している部分がわからないので回答できません データベースから取得しているのでしょうか

idek
質問者

お礼

>データベースから取得しているのでしょうか 単純なミスでした。 データベースから取得していて、すべて0になっていました。 *英語のデータベースと日本語のデータベースを作成し、英語の方はすべて1以上の数字でした。 安易なミスに答えていただきありがとうございました。 でも私にとっては、偉大なヒントでした。 厚く御礼申し上げます。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>日本語を混ぜると 下記$markと$GLOBALS["mark"] が、すべて'0'になってしまいます。 例示されたソースには「日本語」が混ざっている部分がありません(このままのソースだと問題なく動作します)。どう混ざっているのでしょうか?可能であれば「再現可能なミニマムソース」を例示してください。

idek
質問者

補足

早速お答えいただきありがとうございます。 何か設定なのでしょうか。 --「例示されたソースには「日本語」が混ざっている部分がありません」 *下記ソースも「日本語」が混ざっている部分がないのでは? <? session_start(); include_once('connection.php'); $email=$_SESSION['name']; $query = mysql_query("select * from m_student where `stuid`='$email'"); $row=mysql_fetch_assoc($query); if(($row['stpass']=='') || ($row['stpass']!=$_SESSION['pass'])){ ?> の後に ---ここから下 $ans =0; $mark = 0; $get= 0; $qa="select * from examin where `id`='$_POST[id1]'"; $qqa=mysql_query($qa); $qqqa=mysql_fetch_array($qqa); $answer=$_POST['q1']; $correct = $qqqa['answer']; if($qqqa['answer']==$answer){ $result='O'; $GLOBALS["ans"]=$GLOBALS["ans"]+1; $GLOBALS["get"]=$GLOBALS["get"]+$qqqa['mark'];} else{ $result='X';} $GLOBALS["mark"]=$GLOBALS["mark"]+$qqqa['mark']; ----ここから上 で、これを $qa="select * from examin where `id`='$_POST[id1]'"; 以降 qaをqeまで5回繰り返します。

関連するQ&A

  • 再度文字コードについて

    前回文字化けについて質問させていただいたのですが、うまく解決しなかったためまた質問させていただきます。 まず、テーブルの文字セットはシフトJISに無事変更することができました。しかしやはりset names sjisをおこなうとうまくいきません。それをおこなわない場合は文字化けせずにうまくいきます。 MySQLのデフォルト文字セットはlatin1になっているのですが、この場合 クライアントからSQLへsjis→latin1→sjisのような変換がおこなわれているのでしょうか?set names sjisはクライアントがsjisであるということをMySQL側に明示しているだけなんですよね? PHPの文字セットがシフトjisなのにset names sjisでうまくいかずset names latin1でうまくいくのがどうもよくわからないのですが…… 度々すいませんが、わかるかたお願いします。

  • mysql_query文字コード変換について教えてください。

    PHP+MySQLで開発を行っておりますが、次の問題でつまずいて 先に進めず困っております。 お助け下さい 環境 Server : Windows2003Server PHP : 4.4.1 MySql : 4.0 <<<<< PHPソース >>>>>>>>>>>>>>> // MySQLに接続 if (!($cn = mysql_connect("localhost","userXXX","PassXXX"))) { die('接続できませんでした: ' . mysql_error()); } // MySQLのクライアントの文字コードをsjisに設定 mysql_query("SET NAMES 'sjis'") or die("can not SET NAMES sjis"); // MySQL DB 選択 if (!(mysql_select_db("dbXXX"))) { die('データベースが見つかりません.'); } // MySQL 問い合わせ $sql = "SELECT * FROM test"; if (!($rs = mysql_query($sql))) { die('セレクトに失敗しました.');       ・       ・       ・ <<<<< PHPソース >>>>>>>>>>>>>>> 上記の環境でソースを実行すると、「can not SET NAMES sjis」の メッセージでエラーとなります。 この関数をとると処理は最後まで正常終了するのですが、 表示される漢字は、文字化けしています。 ちなみにMySQLの5.0環境で実行すると問題なく変換されて正しく 表示されます。 MySQLの4.0環境では mysql_query("SET NAMES 'sjis'") の 関数は使えないのでしょうか? もし使えないとするならば、何か変わりの方法があると良いのですが 表示する時に項目ごとに変換する mb_convert_encoding を 使う方法はあると思うのですが、出来たら手間をかけたくないのと MySQLの4.0環境とMySQLの5.0環境両方でなるべく変更を少なく 実行したいと思っております。 どなたか、お分かりの方がおられましたら是非ご教授下さい。 

    • ベストアンサー
    • PHP
  • 更新時の文字化けに関して

    初歩的な質問で申し訳ありませんが、教えて下さい。 以下のようにSQL文を作成し、更新処理をしようとしたところ、 どうも文字化けして更新できませんでした。 そもそもの文字設定の基本を把握できていないのが問題ですが、、、 どこの何を設定すれば良いでしょうか? よろしくお願いします。 《DB内容 (MySQL)》 項目 name varchar(50) 照合順序 sjis_japanese_ci 《プログラム内容(phpで記述)》 //データベース接続 $con = mysql_connect("localhost", "root", "999999"); // php_dbデータベースへ接続する if (!$con) { die('接続できませんでした: ' . mysql_error()); } $str = 'あいうえお'; $sql = "UPDATE tbl_ABC set name = '$str'"; if (!mysql_select_db('db_abc', $con)) { echo 'Could not select database'; exit; } $result = mysql_query($sql,$con); mysql_query("set names sjis"); if (!$result) { echo "DB Error, could not query the database\n"; echo 'MySQL Error: ' . mysql_error(); exit; } mysql_close($con) ;

    • ベストアンサー
    • PHP
  • MySQL 文字化けについて(PHP)

    いつもお世話になっております。 PHPを使用してMySQLからデータを出し入れする際に文字化けが発生し原因がわからず、大変困っております。 MySQL 4.1.18(クライアント 4.1.21) MySQL文字セット UTF-8 Unicode (utf8) 様々なHPを検索して、下記のような一文を入れれば大丈夫と思ったのですが、それでも文字化けは改善されませんでした。 mysql_query("SET NAMES ujis"); 上記文はmysql_connectの直後に記述しております。 INSERT文、SELECT文どちらに不備があるのかわかりません。 ご教授お願い致します。 記述プログラム:(INSERT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "insert into T_YOYAKU values ('1','A','1','あいうえお')"; mysql_query($sql) 省略・・・ 記述プログラム:(SELECT文) /********************************* * MySQL接続 ********************************/ // DB Connect $db = db_connect(); // DB Select select_db($db); // Set Names mysql_query("SET NAMES ujis"); /********************************* * INSERT文 ********************************/ $sql = "select * from T_YOYAKU"; if ( $rs = mysql_query($sql) ) {

    • ベストアンサー
    • MySQL
  • PHPからMySQLのバージョンを取得する方法を教えて!Goo

    こんにちわ。 PHPからMySQLのバージョンを取得する方法を教えていただけ無いでしょうか。 検索してもうまく見つけられませんでした。。 また、経緯ですが、 Ver4.0で動いていたシステムが4.1以降で文字化けするようになったので、 色々調べて、4.1以降の場合にはDB接続後に " SET NAMES 'ujis'; "を実行すれば良いとわかったのですが、 その命令はVer4.0以前ではエラーになってしまうため、 MySQLのバージョンを取得して、処理を振り分けたいと考えています。 それでは、よろしくおねがいいたします。

    • ベストアンサー
    • PHP
  • DB接続関連の処理をまとめたい

    DB接続処理関連の処理をまとめたいと考えています。 PHP4 + Mysql 4 Pear DBを使用中 おそらく、common.phpとかに connectDB()などと書くものだと思うのですが 詳細がわかりません。 なにか参考になるようなものはありませんか? とりあえず、1つのphpからDBに接続して 値を表示するところまではできました。

  • my.iniとSET NAMES

    my.iniとSET NAMES SJIS  について教えていただきたいことがあります。 my.iniに以下設定を追加で行いました。  [mysqld]  character-set-server=utf8  [mysqldump]  default-character-set = utf8  [mysql]  default-character-set = utf8 データベースのAテーブルには、 No  商品    価格 1   冷蔵庫  1000 2   エアコン  800 というレコードが入っております。 コマンドプロンプトより、 1. cd C:\xampp\mysql\bin 2. mysql -u root -pnazonazo の二つのコマンドを実行後、 mysql> Select * from A; を実行したところ、日本語の商品列が文字化けしました。  No  商品    価格  1   文字化け 1000  2   文字化け  800 そこで、色々調べて 1. mysql> SET NAMES SJIS; 2. mysql> Select * from A; を実行したところ商品名の文字化けが直って表示されました。  No  商品    価格  1   冷蔵庫  1000  2   エアコン  800 質問1:SET NAMES SJIS;により、コマンドプロンプトでの文字化け原因が 解消されたと思うのですが、なぜだか理由が分からないのです。 「my.ini」とどのような関係があるのでしょうか。 情報を見つけたページでは、おまじないということで書かれていたのですが 解決された理由を知りたいのです。 質問2:PHPでも、SET NAMES SJIS; を使用するときがあるみたいなのですが 同じ効果があるのでしょうか。 どなたかお分かりのかたがいらっしゃいましたら ご教授お願いします。

    • ベストアンサー
    • MySQL
  • ODBC接続で全角文字が文字化け

    MySQL⇒MS-ACCESSのODBC接続で文字化けが発生してます。 ■MySQL 5.0.27 ■MyODBC 3.51.19 ■MS-ACCESS 2000 (Windows2000) ○my.cnfの設定 [mysqld] skip-character-set-client-handshake [mysqld_safe] skip-character-set-client-handshake [ODBC] default-character-set=sjis [client] default-character-set=sjis ○status Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 ▽試したこと ・Initial Statement に set names 'sjis' を設定 ・Character Set sjis、ujis、latin1 それぞれを指定 半角文字は大丈夫ですが、全角文字になると「??????????」と表示されています。 MySQL+PHPでは問題なく使えます。 解決方法分かる方アドバイスお願い致します。

    • ベストアンサー
    • MySQL
  • SJIS→UTF-8変換後の文字化けについて

    EXCELで作ったテキストデータ(SJIS)をPHPで読み込んでUTF-8でDBへ書き込むという処理をしたいのですが、一部どうしても文字化けしてしまう文字("l(リットル)"と"II")があり困っています。 具体的には、data.dat(SJIS)を、 hoge.php(UTF-8)で、 $data = mb_convert_encoding(file_get_contents("data.dat"),"UTF-8","auto"); というようにしています。 テキストデータはSJIS、DBへはUTF-8というのは変えられません。 なにかよい方法はないでしょうか?

    • ベストアンサー
    • PHP
  • Mysql UPDATE出来ません

    PHP+MySQLでホームページ開発中ですが、MySQLで特定idのフィールドの更新処理(UPDATE)が出来ません。初心者です宜しくお願いします。 【Mysqlで確認した点】 (1)XAMPP・MyAdminからは以下のSQL文で問題なく更新できる。 "UPDATE upload_list SET rem='ABCDEF' WHERE id=15;" 【問題は?】 以下のphpからは更新できません。 【phpで確認した点は?】 (1)DBへ正常に接続してる。 (2)文字コードも正常にSETしてる。 (3)UPDATE実行後の$RESULT(返り値)がない。 (4)PHPを実行後、MyAdminでDBを確認しても更新されていない。 【phpコード】 <?php //データベースパラメータ定義 $DBSERVER="localhost"; $DBUSER="root"; $DBPASSWORD=""; $DBNAME="up_load"; $DATANAME="upload_list"; //Mysqlに接続 if(mysql_connect($DBSERVER,$DBUSER,$DBPASSWORD)) {echo "DB接続済/";} else {echo "<h2>データベースに接続できません</h2>";die();} //Mysql停止 //データベースを選定 mysql_select_db($DBNAME); //Mysqlの文字セットを定義 $sql = "SET NAMES ujis;"; $result = mysql_query($sql); if ($result==true){echo "文字コードSET済/";} //更新id、rem(更新記事)をSET $id=15; $new_rem="ABCDEF"; echo $DATANAME."/".$id."/".$new_rem."/"; //Mysql更新処理 $result=mysql_query('UPDATE $DATANAME SET rem=$new_rem WHERE id=$id;'); if ($result==true){echo "更新!";} else {echo "更新出来ず";} //XAMMP phpMyAdminからは以下のSQL文で更新できた。 //UPDATE upload_list SET rem='ABCDEF' WHERE id=15; ?> 【実行後のブラウザ表示】 DB接続済/文字コードSET済/upload_list/15/ABCDEF/更新出来ず

    • ベストアンサー
    • MySQL