PHPについて質問です。

自分でサンプルを見ながら作成したphpファイルを実行したところ

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/●●/public_html/●●/●●/members4.php on line 15

というエラー文がでました。そこで「members4.php on line 15」を見たところ

$users = mysql_fetch_array( $result );

と書いてありました。
MySQLもつかっています。

これは「members4.php on line 15」に問題があるのではなくデータベースに登録が出来ていないから出るエラーなのでしょうか?

前後の文も添付します。

$sql = "select mail1_us from users where mail1_us = '" . mysql_real_escape_string( $_GET['mail1_us'] ) . "'";
$result = mysql_query( $sql );
$users = mysql_fetch_array( $result );

if ( md5( $magic_code . $users['mail1_us'] ) == $_GET['md5'] ) {
$sql = "update users set state = '0' where mail1_us = '" . mysql_real_escape_string( $_GET['mail1_us'] ) . "'";

以上原因がわかる方、思い当たる方は教えて下さい。
宜しくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/11/11 12:02:50
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント26pt

mail1_us自体が空っぽだった場合(すべてのデータを吐き出す事になります)や、

検索した結果該当なしの場合などを考慮して、

下記のような具合に事前チェックを入れるようにすると良いでしょう。

// パラメータのチェック
if (!isset($_GET['mail1_us']) {
    echo "パラメータが渡されてません。";
    exit;
} elseif ($_GET['mail1_us'] == '') {
    echo "パラメータが空っぽです。";
    exit;
}

// SQL発行と確認
$result = mysql_query($sql)
if (!$result) {
    echo "該当ありません。";
    exit;
}

// データ取得
$users = mysql_fetch_array( $result );

上記は非常に簡素な例です。

変なパラメータが渡ってきていないかや、よそのサイトなどからの侵入でないかなどの、

セキュリティ関連に関しては別の話となりますので、割愛してます。

id:kasai-de_eb

今度は「if (!isset($_GET['mail1_us']) {」の部分にエラーがでました。

2009/11/07 21:12:48

その他の回答4件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301ここでベストアンサー

ポイント26pt

mail1_us自体が空っぽだった場合(すべてのデータを吐き出す事になります)や、

検索した結果該当なしの場合などを考慮して、

下記のような具合に事前チェックを入れるようにすると良いでしょう。

// パラメータのチェック
if (!isset($_GET['mail1_us']) {
    echo "パラメータが渡されてません。";
    exit;
} elseif ($_GET['mail1_us'] == '') {
    echo "パラメータが空っぽです。";
    exit;
}

// SQL発行と確認
$result = mysql_query($sql)
if (!$result) {
    echo "該当ありません。";
    exit;
}

// データ取得
$users = mysql_fetch_array( $result );

上記は非常に簡素な例です。

変なパラメータが渡ってきていないかや、よそのサイトなどからの侵入でないかなどの、

セキュリティ関連に関しては別の話となりますので、割愛してます。

id:kasai-de_eb

今度は「if (!isset($_GET['mail1_us']) {」の部分にエラーがでました。

2009/11/07 21:12:48
id:moco03 No.2

回答回数10ベストアンサー獲得回数1

ポイント26pt

$result = mysql_query( $sql );

echo "

";

print_r($result);

echo "

";

でうまく$resultが表示されていれば、データはうまく取り出せれていると思います。

データが取り出せてない場合、

$sql = mysql_real_escape_string( $_GET["mail1_us"] );

$sql = "select mail1_us from users where mail1_us = '$sql'";

$result = mysql_query("$sql");

echo "

";

print_r($result);

echo "

";

とやってみてもいいかも。

MySQLの文字コードとPHPの文字コードがうまく合ってないと接続できない場合が

僕は結構あるので試してみては。

UTF-8ならUTF-8Nにするとか。

id:kasai-de_eb

参考にさせていただきます。

有難うございます。

2009/11/09 13:16:23
id:horonict No.3

回答回数257ベストアンサー獲得回数51

ポイント16pt

スクリプトの全体がないので分かりませんが、

mysql_connect→mysql_select_db→mysql_queryの順に実行していますか?

id:kasai-de_eb

はい。

// db connect

$link = mysql_connect( $db_host, $db_user, $db_password );

mysql_select_db( $db_name );

$result = mysql_query( 'set character set utf8' );

参考書に書いてある通りに作りました。

2009/11/09 13:17:45
id:canaid No.4

回答回数1ベストアンサー獲得回数0

ポイント16pt

$result が false になっていませんか?

ともかく、mysql_fetch_array() に渡された引数 $result が、正しい文じゃないという警告ですから、警告が出たときの $result を見てみるのが一番ですよ。

id:horonict No.5

回答回数257ベストアンサー獲得回数51

ポイント16pt

> $link = mysql_connect( $db_host, $db_user, $db_password );


  1. $dbhostの内容は'localhost'になっていますか?
  2. MySQLの設定として、$db_user, $db_passwordで示されるID、パスワードは登録されていますか?
  • id:kn1967
    >(すべてのデータを吐き出す事になります)
    (かっこ)内は無視してください。

    >$result = mysql_query($sql)
    セミコロン抜けてます。

    もう、ないかしら・・・。

  • id:kn1967
    )が一個抜けてました・・・。

    if (!isset($_GET['mail1_us'])) {
  • id:horosco75
    > 上記は非常に簡素な例です。
    > 変なパラメータが渡ってきていないかや、よそのサイトなどからの侵入でないかなどの、
    > セキュリティ関連に関しては別の話となりますので、割愛してます。

    そんな「簡素な例」なのにバグだらけとは、いやはや。
    質問者を混乱させているだけのような気がしますね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません