3

彼らのIPがデータベースにある場合、彼らが電子メールを送信できないようにしようとしています。php54_errorsファイルには

[30-Dec-2012 18:25:26 Europe/Dublin] PHP Warning:  mysql_num_rows() expects parameter 1 to be resource, string given in C:\inetpub\wwwroot\Submit.php on line 6
[30-Dec-2012 18:25:26 Europe/Dublin] PHP Warning:  mysql_num_rows() expects parameter 1 to be resource, null given in C:\inetpub\wwwroot\Submit.php on line 7

私のPHPコードはこれです

<?php
include("connect.php");
mysql_select_db("ip", $con);
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$query = "SELECT * FROM ip WHERE ip='$ip'";
$result = mysql_num_rows($query);
if (mysql_num_rows($result) > 0) {
    echo "You have already registered!";
}
else { 
    echo"Your request has been sent!";
    $to = "admin@prisoneternity.org.uk";
    $subject = "Guard Application";
    $from = "guardapplication@prisoneternity.org.uk";
    $headers = "From:" . $from;
    $message = "IGN = " . $_POST["Username"] . "</br>\n\nage = " . $_POST["age"] . "</br>\n\nreason = " . $_POST["reason"] . "</br>\n\nHow many times have they been guard = " . $_POST["guard"] . "</br>\n\nOther Details = " . $_POST["text"];
    mail($to,$subject,$message,$headers);
    header ("Location: index.php?email=yes");
    session_start();
    mysql_query("INSERT INTO ip (IP) VALUES ('$ip')");
}
?>
4

2 に答える 2

2
$result = mysql_num_rows($query);
if (mysql_num_rows($result) > 0) {

する必要があります:

$result = mysql_query($query);
if (mysql_num_rows($result) > 0) {

を実行していませんでした。代わりに2回mysql_query()呼び出しました。単純な事故=o)ところで、 PDOまたはMySQLimysql_num_rows()を使用する必要があります。

また:

echo"Your request has been sent!";
$to = "admin@prisoneternity.org.uk";
$subject = "Guard Application";
$from = "guardapplication@prisoneternity.org.uk";
$headers = "From:" . $from;
$message = "IGN = " . $_POST["Username"] . "</br>\n\nage = " . $_POST["age"] . "</br>\n\nreason = " . $_POST["reason"] . "</br>\n\nHow many times have they been guard = " . $_POST["guard"] . "</br>\n\nOther Details = " . $_POST["text"];
mail($to,$subject,$message,$headers);
header ("Location: index.php?email=yes");
session_start();
mysql_query("INSERT INTO ip (IP) VALUES ('$ip')");

する必要があります:

$to = "admin@prisoneternity.org.uk";
$subject = "Guard Application";
$from = "guardapplication@prisoneternity.org.uk";
$headers = "From:" . $from;
$message = "IGN = " . $_POST["Username"] . "</br>\n\nage = " . $_POST["age"] . "</br>\n\nreason = " . $_POST["reason"] . "</br>\n\nHow many times have they been guard = " . $_POST["guard"] . "</br>\n\nOther Details = " . $_POST["text"];
mail($to,$subject,$message,$headers);
//header ("Location: index.php?email=yes");
session_start();
echo"Your request has been sent!";
mysql_query("INSERT INTO ip (IP) VALUES ('$ip')");

header()またはの前にコンテンツをエコーすることはできませんsession_start()。また、リダイレクトを実行しているため、エコーされたテキストは表示されません。あなたはあなたがしたいものを選ぶ必要があります。上記をコメントアウトしましたheader()が、反対のこともできます。また、メールヘッダーインジェクション攻撃を防ぐために、と文字のすべて$_POSTの値をサニタイズするようにしてください。\r\n

于 2012-12-30T18:37:37.747 に答える
1

2行目では、変数がすでに関数を呼び出しているため、整数mysql_num_rowsを返しています(それが理にかなっている場合)。これに変更します:$result

$result = mysql_num_rows($query);
if ($result > 0) {

また、クエリを実行していません。

$query = "SELECT * FROM ip WHERE ip='$ip'";

上記の行を次のように変更します。

$query = mysql_query("SELECT * FROM ip WHERE ip='$ip'");


ちなみに、mysql_*関数は非推奨です。PDOまたはに切り替えMySQLiます—例はPHPマニュアルにあります。

于 2012-12-30T18:35:49.293 に答える