スレッド表示 | フラット表示〕 全トピック 920 件中 81 番目 次≫ ≪前

mb_convert_encordingについて

created: 2007-10-22 17:16 | modified: 2007-11-06 06:28 | reply: 17

[3930] mb_convert_encordingについて

user: TAKAHIRO | created: 2007-10-22 17:16
if(isset($_POST["words"])){
$word =mb_convert_encording($_POST["words"],"UTF-8","SJIS"); //HTMLの文字コード(SJIS)→DB(UTF8)に変換

の$word =mb_convert_encording($_POST["words"],"UTF-8","SJIS");
でエラーが発生してしまいます。
エラーメッセージは
Fatal error: Call to undefined function mb_convert_encording()
です。
この構文がおかしいのでしょうか。教えていただきたいです。
reply: 3931 3935 返信 編集 削除

[3931] Call to undefined function

user: ゆうじ | created: 2007-10-22 18:05
こんばんわ。

> Fatal error: Call to undefined function mb_convert_encording()

「未定義の関数が呼ばれました。」という
エラーメッセージですね。

単なるつづりの間違いか、
PHPにマルチバイト関数が組み込まれてないかの
どちらかだと思います。

正確 ⇒ mb_convert_encoding

もし、マルチバイト関数が組み込まれてない場合は、
環境によって触るところが違いますので
OS、ウェブサーバ、PHPのバージョンをお知らせ下さい。
Parent: 3930  reply: 3932 返信 編集 削除

[3932] ありがとうございます。

user: TAKAHIRO | created: 2007-10-22 18:31
ここのエラーは解決しました!ありがとうございます!
エラーはでないのですが・・検索フォームで入力したものがDBに登録→表示ができません。
何の原因があるか・・わかりません。
何か原因の分かる方・・お願いします。
Parent: 3931  reply: 3933 返信 編集 削除

[3933] DBの情報を表示したいのですが。。

user: TAKAHIRO | created: 2007-10-23 05:53
・・・
<body>
<TABLE border="3">
<TR>
  <TH> id </TH>
<TH> キーワード </TH>
<TH> 検索数 </TH>
</TR>
<?=$body?>
</TABLE>

</body>
</html>

<?php
if (! $con =mysql_connect("localhost", "root", "")) { //MySQLに接続
exit("MySQLに接続できませんでした!");
}
mysql_select_db("database");
mysql_query("set names sjis");
$sql = "SELECT * FROM PHP";
$rst = mysql_query($sql);
while ($col = mysql_fetch_array($rst)) { //結果セットからデータをループで読み込み
$body .= "<TR>";
$body .= "<TD align ='center'>" . $col[id] . "</TD>";
$body .= "<TD>" . $col[message] . "</TD>";
$body .= "<TD align ='right'>" . $col[detail] . "</TD>";
$body .= "</TR>";
}
mysql_free_result($rst);
mysql_close();
?>

今PHPテーブルの中の情報を全て取り出し表示させたいのですが、このプログラムだとHTML文のid、キーワード、検索数しか画面に表示されていません。
DBにはINSERT文でデータは入れましたが表示されないのはどういうことなのか教えていただきたいです。
Parent: 3932  reply: 3934 返信 編集 削除

[3934] 上の件の追加です。

user: TAKAHIRO | created: 2007-10-23 17:19
$rst = mysql_query($sql);
while ($col = mysql_fetch_array($rst))

mysql_free_result($rst);
でエラーが出てきてしまいます。
原因がわかるかた教えてください。お願いします。
Parent: 3933  返信 編集 削除

[3935] 文字化け!!

user: TAKAHIRO | created: 2007-10-23 22:40
上の件については解決しました。
ありがとうございます。

そこで文字化けが新たに発生しました。
検索フォームから文字を入力する際に、

①,データベースへ登録したら文字化けされている。
②,画面表示の際にも文字化けされている。

<meta http-equiv="Content=type"・・・chatset=utf8">

$word =mb_convert_encording($_POST["words"],"UTF-8","SJIS");

mysql,phpともutf8に統一しています。
何が原因か教えてください。お願いします。
Parent: 3930  reply: 3939 返信 編集 削除

[3939] > 文字化け!!

user: ゆうじ | created: 2007-10-26 01:53
前の2件、解決して何よりです。
ただ、(1)何が原因で、(2)どう対処し、解決したのかまとめて
報告いただけると、後から読んだ方の役に立ちますし、
お応えした甲斐があったと納得できます。
うちのようなフォーラムを上手く使っていくコツが
以下のサイトに載ってますので一度ご覧下さい。
http://www.hyuki.com/writing/techask.html


さて、文字化けの件ですけど、
フォーム側のchatsetが utf8(utf-8の間違いかな)で
変換元が "SJIS"、それを "UTF-8" に直すのは、
意図してのことでしょうか。

というのは、フォームのchatsetが何であったとしても、
フォームから得た文字が、chatsetで設定した通りの
文字コードで得られるとは限りません。
なので、エンコード変換の前に、
文字エンコードの判定が必要だと思いますが行われてますか。


また、Mysql が 4.1以上だと、
Mysqlサーバーは文字コードの自動変換をしてますので
意図しない変換がおきてる可能性があります。

環境やマルチバイト周りの設定値がわかれば
もっと具体的に原因が見えてくるかもしれません。
Parent: 3935  reply: 3943 返信 編集 削除

[3943] 文字化けなおりました!

user: TAKAHIRO | created: 2007-10-26 17:03
またわからないことがあったら投稿させて頂きます。
よろしくお願いします!
Parent: 3939  reply: 3948 返信 編集 削除

[3948] SELECT * FROM database WHERE MATCH(keyword) AGAINST('+ '".$keyword."' ' IN BOOLEAN MODE)";

user: TAKAHIRO | created: 2007-10-28 15:21
$keywordはフォーム入力されたものです。

フルテキストを使って処理をしたいと思っています。

********************************************************
$sql0 = "SELECT Count(*) AS reccnt FROM database WHERE MATCH(keyword) AGAINST(' + '".$keyword."' ' in boolean mode)";
$rst1 = mysql_query($sql0);
$col1 = mysql_fetch_array($rst1); //データ読み出し・・・①

********************************************************
$sql = SELECT * FROM database WHERE MATCH(keyword) AGAINST('+ '".$keyword."' ' IN BOOLEAN MODE)";
$res = mysql_query($sql);
$row = mysql_fetch_array($res); //データ読み出し・・・②

①、②で同じエラーがでてきてしまいます。なぜなのかわかりません。
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

教えてください。お願いします!!
Parent: 3943  reply: 3954 返信 編集 削除

[3954] mysql_error

user: ゆうじ | created: 2007-10-29 21:25
mysql_fetch_array でエラーが出てますが、
実際は、mysql_queryの方に原因があるのではないでしょうか。
mysql_query の実行直後、mysql_error() で
MySQLが出すエラーを確認すれば、何かわかるかも。
http://jp.php.net/manual/ja/function.mysql-error.php
Parent: 3948  reply: 3957 返信 編集 削除

[3957] まだエラーがでてきてしまいます。SELECT文の文法あっていますでしょうか

user: TAKAHIRO | created: 2007-10-30 05:10
お返事ありがとうございます。
ですがいまだに解決していません・・。

ちょっとソースを変えてみました。

$sql1 = reset($array);//配列の1番目を取り出す。
//*******************************************************************************
//まずDBに語が1レコード以上登録されているか検索
for($i = 1; $i < $datacount ;$i ++){
    $keyword = next($array);
    $sql1 = $sql1 + "+" + $keyword ;
}
$sql = "SELECT Count(*) AS reccnt FROM log WHERE MATCH(words) AGAINST(' +" + $sql1;
$sql = $sql + "' IN BOOLEAN MODE)";
$rst1 = mysql_query($sql);
$col1 = mysql_fetch_array($rst1);
echo mysql_errno($col1) . ": " .mysql_error($col1) . "\n";
    $reccnt = $col1[reccnt]; //キーワード件数

としてちょっとソースを変えてみました。
このSELECT文の書き方文法的にあっていますでしょうか?
mysql_fetch_arrayでエラーがでてきてしまっている状態です。
ということは値が取れていない=SELECT文が間違っているのでしょうか?
そのあとの
echo mysql_errno($col1) . ": " .mysql_error($col1) . "\n";
もエラーがでてきてしまいました。

このSELECT文のどこが間違っているのかわからないので教えていただきたいです。
Parent: 3954  reply: 3959 返信 編集 削除

[3959] mysql_error

user: ゆうじ | created: 2007-10-30 11:20
mysql_errno が返してくるのはエラー番号だけ、
エラーメッセージを得るには mysql_errorを使います。
どちらも直前の処理についてエラーの情報を返しますので、
内容を確かめたい処理の直後に使用する必要があります。
http://jp.php.net/manual/ja/function.mysql-error.php


$col1 = mysql_fetch_array($rst1);

ここはエラーであることが明らかなので、
原因はこれ以前だと推測できます。
あやしい、mysql_query($sql); の直後にmysql_errorです。

$rst1 = mysql_query($sql);
echo mysql_error();
$col1 = mysql_fetch_array($rst1);

> エラーがでてきてしまいました。
だけでは、何もわからないので、
出たメッセージをそのまま載せましょう。
Parent: 3957  reply: 3960 返信 編集 削除

[3960] エラーメッセージ

user: TAKAHIRO | created: 2007-10-30 13:07
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 '0' at line 1

とエラーメッセージがでてきてしまいました。
SQL文が違うということになるのでしょうか。

あのSELECT文が間違っているということになるのですか。
でもどこが間違っているのかわかりません・・。
教えていただきたいです。お願いします。
Parent: 3959  reply: 3962 返信 編集 削除

[3962] SQL文法エラー

user: ゆうじ | created: 2007-10-30 22:01
その通り、SQL文が間違ってるようです。

どこが間違ってるか以前に、
どんなSQL文なのか私にはわかりません。

想定した通りのSQLになっていますか。
mysql_query($sql)の実行前に、$sql を
表示させて確かめてみましょう。
Parent: 3960  reply: 3979 返信 編集 削除

[3979] 上の件解決したのですが・・・

user: TAKAHIRO | created: 2007-11-05 18:25
上の件解決しました。ありがとうございます。

新たにまた問題がでてきました!
数字の多い順、上位5位まで表示させたいのですが・・・

もし上位5位のフィールド数と6位のフィールド数が同じだった場合両方表示させたいのです。
そこでどうすればいいのか悩んでいます。
考え方として、上位5位のcounts数を取り出して、

①その数と同じレコードがあった場合
そのcounts数を取り出して、5+○(その数)位までを表示

②なかった場合
5位までを表示
という形にしたいのですが・・・

$sqlcounts = "SELECT counts FROM database ORDER BY counts DESC = 5";・・・・・・まずこの書き方は大丈夫でしょうか?上位5位のcountsフィールドの数を取り出す。

$rescounts = mysql_query($sqlcounts)
$colcounts = mysql_fetch_array($rescounts);
$keywordcounts = $colcounts[counts]; //キーワード件数
$sqlcounts1 = "SELECT Count(*) AS reccntcounts FROM kensaku WHERE counts = '".$keywordcounts."'"; //仮テーブル・・同じ数があるかどうか確かめる。

///////////////もし同じ数字(counts数)があったら///////////////
if($rstcounts1 = mysql_query($sqlcounts1)){
$colcounts1 = mysql_fetch_array($rstcounts1);
$reccntcounts = $colcounts1[reccntcounts]; //キーワード件数(何個のレコードがあるか)
$countsset = $reccntcounts + 5;//上位5+同じcounts数のレコード分を足して表示させる
$sqlkensaku = "SELECT words,counts FROM database ORDER BY counts DESC LIMIT '".$countsset."'";

}
else{

//******************************************************************************************
//countsフィールド多い順トップ5を表示

$sqlkensaku = "SELECT words,counts FROM database ORDER BY counts DESC LIMIT 5";
}


どのように処理してよいのかわかりません。
わかる方教えてください!お願いします!
Parent: 3962  reply: 3980 3982 返信 編集 削除

[3980] 上の件の追加です!

user: TAKAHIRO | created: 2007-11-05 21:12
また、結果を表示させた際に、mixiのランキングのような語をクリックするとページが飛ぶようにしたいのですが、どのようにすればよいのですが?

今はHTML文で
<font size ="4"><BR>検索ランキング トップ10<BR><BR></font>
<TABLE border="1">
<TR>
<TH> キーワード </TH>
<TH> 検索数 </TH>
</TR>
<?=$body?>
</TABLE>

PHPの中では、
while ($col = mysql_fetch_array($rstkensaku)) { //結果セットからデータをループで読み込み
$body .= "<TR>";
$body .= "<TD>" . $col[words] . "</TD>";
$body .= "<TD>" . $col[counts] . "</TD>";
}

として表示させています。
Parent: 3979  reply: 3981 返信 編集 削除

[3981] またまた質問追加すいません!

user: TAKAHIRO | created: 2007-11-06 02:54
<a href ="kensakuword.php.words="". $col[words] .">.$col[words].</a>"(" . $col[counts] . "ポイント)<BR></div>";

・・・配列の$col[words]文字が押されたらkensakuword.phpというページに飛ばし、カウント数も表示させたいのですが、
URLの書き方など文法がわかりません!

教えてください!お願いします!
Parent: 3980  返信 編集 削除

[3982] ハンドブックを買っては?

user: ach | created: 2007-11-06 06:28
SQLのポケットリファレンスが結構便利です

>$sqlcounts = "SELECT counts FROM database ORDER BY counts DESC = 5";・・・・・・まずこの書き方は大丈夫でしょうか?上位5位のcountsフィールドの数を取り出す。

大丈夫じゃありません.
"...ORDER BY count DESC LIMIT 5"
です.打ち間違いだと思いますが.


ただ,その方法はSQLへのアクセスが一回分無駄のように見えます.
SELECT * FROM database ORDER BY counts DESC LIMIT 5

で5つめまで取得し,すべての結果を配列に落としておきます.
次にその配列の5番目のデータからcountを取得
SELECT * FROM database ORDER BY counts DESC  where count = {$count5}

で5番目と同じcount数のものを取得.これも同じ配列に入れて,array_uniqueで重複したものを削除する.
もしもid等のprimary keyを定義しているならこれを利用し,もう少し負荷を減らして検索できます.

ただ,この方法はLIMIT句のサイズによってはメモリーを食います.
逐次処理したい場合には複雑化しないようオブジェクトに包んでアクセスタイミングを隠したほうがいいかもしれません.
Parent: 3979  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 81 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑