2012-02-21 10 views
0

正常な応答が正しく表示され、アイテムがデータベースに追加されたにもかかわらず、フォームが完了したときにこのエラーが発生します。このエラーの解決方法を特定するのに苦労します

ここでエラー

警告だ:mysql_free_result():指定された引数は、ライン18

に/home/site4/public_html/lab/mailinglist/mailing_list_external.phpに有効なMySQLの結果リソースではありませんが、

ライン18は

mysql_free_result($check_res); 

で、全体のPHPファイルが

ですあなたはmysqliの私を使用している場合
<?php 
include("mailing_list_include.php"); 
// determine if they need to see the form or not 

if ($_POST["email"] == "") { 
    header("Location: mailing_list_external.php"); 
    exit; 
} else { 
    // connect to database 
    doDB(); 

    // check that the email is in list 
    emailChecker($_POST["email"]); 

    // get number of results and do action 
    if (mysqli_num_rows($check_res) < 1) { 
     // free result 
     mysql_free_result($check_res); 

     // add record 
     $add_sql = "INSERT INTO subscribers (email) 
        VALUES('".$_POST["email"]."')"; 
     $add_res = mysqli_query($mysqli, $add_sql) 
        or die(mysqli_error($mysqli)); 
     $display_block = "<p>Thanks for signing up!</p>"; 

     // close connection to mysql 
     mysqli_close($mysqli); 
    } else { 
     // print failure message 
     $display_block = "<p>You're already subscribed!</p>"; 

    } 
} 
?> 
<html> 
<body> 
<?php echo "$display_block"; ?> 
</body> 
</html> 

私が言ったように、それが正常に動作しますが、私はまだ、このエラーが出る...。ここ

が含まれているファイルのコード(mailing_list_include.php)

<?php 

function doDB() { 
global $mysqli; 

// connect to server and select database; you may need it 
$mysqli = mysqli_connect("localhost", "XXX", 
    "XXX", "XXX"); 

    // if connection fails, stop script execution 
    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
} 
} 

function emailChecker($email) { 
global $mysqli, $check_res; 

//check that email is not already in list 
$check_sql = "SELECT id FROM subscribers 
    WHERE email = '".$email."'"; 
$check_res = mysqli_query($mysqli, $check_sql) 
    or die(mysqli_error($mysqli)); 
} 
?> 
+1

*完全な*ソースコードを投稿してください。 '$ check_res'はどこから来たのですか? – Borealid

+0

今、インクルードコードを追加してくれてありがたいです。 – Andy

+1

他のものはすべてmysqli_接頭辞付き関数を使用していますが、なぜこの場合はmysql_を使用していますか? – bumperbox

答えて

1

使用mysqli_free_result - 私はあなたがmysql_free_resultを使用しているからだと疑われる、別のライブラリである

+0

私は同じことだと思いますが、mysqli_free_resultは存在しません –

+0

http://php.net/manual/en/mysqli-result.free.php –

+0

私はサイト内でそれを探していて、私はそれを見つけませんでした。ごめんなさい! –

1

ですあなたが別のライブラリからの関数を使用している、ここでの接続やmysqli_free_result()

mysqli_free_result($check_res); 

を閉じるためにmysqli_close()を使うべきだと思い

0

これは、ユーザーが登録して、あなたは排除することによって、あなたの問題を解決することができ、電子メールを送信し、ちょうどあなたの基本的なスクリプトであると仮定すると、 _free_resultと_closeが完全に呼び出されます。 1つのリクエストで何千ものレコードを処理していない限り、実際には役に立ちません。

PHPでは、スクリプトが終了すると、すべてのリソースが自動的に解放されます。

関連する問題