PHP-файл возвращает правильное эхо, но записывает неверную строку в базу данных - PullRequest
1 голос
/ 27 февраля 2012

У меня сейчас самая странная проблема.Чтобы увидеть, есть ли контакт в базе данных, я проверяю его.Для меня, чтобы увидеть, я повторяю: «В базе данных» или «не в базе данных».Чтобы пользователь увидел, я возвращаю ему строку с тем же массажем.Странно то, что эхо всегда верно, но строка всегда одна и та же «Нет в базе данных», даже если контакт находится в базе данных.Например: я добавляю свою маму.Моя мама находится в базе данных, поэтому эхо правильно и говорит: «В базе данных».Но возвращаемая строка всегда говорит: «Нет в базе данных».

Полный код

<?php
    $DB_HostName = "localhost";
    $DB_Name = "db";
    $DB_User = "user";
    $DB_Pass = "pw";
    $DB_Table = "contacts";

    $con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die (mysql_error()); 
    mysql_select_db($DB_Name,$con) or die(mysql_error()); 

    $fnumber = mysql_real_escape_string($_GET["fnumber"]);

    $result = mysql_query("SELECT * FROM $DB_Table WHERE User = '$fnumber'", $con);

    if ($result) {

        if (mysql_num_rows($result) > 0) {

            echo "This user is already in database";

            $number = mysql_real_escape_string($_GET["number"]);

            mysql_query("DELETE FROM Echo WHERE Number=('$number')");

            mysql_query("INSERT INTO Echo (Number,Answer)
            VALUES ('$number','This user is already in database.')");
        }

        else echo 
            "This user isn't in the database";

        $number = mysql_real_escape_string($_GET["number"]);

        mysql_query("DELETE FROM Echo WHERE Number=('$number')");

        mysql_query("INSERT INTO Echo (Number,Answer)
        VALUES ('$number','this user isn't in the database.')");
    }

    mysql_close($con);
?>

И прежде чем вы спросите: Чтобы не переполнять мою базу данных, я всегда удаляю номер и затем пишу запись.

Ответы [ 4 ]

2 голосов
/ 27 февраля 2012

Я думаю, это правильный код:

if ($result) {

    if (mysql_num_rows($result) > 0) {

        echo "This user is already in database";

        $number = mysql_real_escape_string($_GET["number"]);

        mysql_query("DELETE FROM Echo WHERE Number=('$number')");

        mysql_query("INSERT INTO Echo (Number,Answer)
        VALUES ('$number','This user is already in database.')");

    } else {

            echo "This user isn't in the database";

        $number = mysql_real_escape_string($_GET["number"]);

        mysql_query("DELETE FROM Echo WHERE Number=('$number')");

        mysql_query("INSERT INTO Echo (Number,Answer)
        VALUES ('$number','this user isn't in the database.')");
    }
}
1 голос
/ 27 февраля 2012

Вы не заключаете в скобки всю ветку else. Таким образом, все после `else echo" Этого пользователя нет в базе данных "; ' выполняется, что перезаписывает ваши данные выше.

Ветвь else должна выглядеть следующим образом:

    else
    {  // <-- NEW
        echo "This user isn't in the database";

        $number = mysql_real_escape_string($_GET["number"]);

        mysql_query("DELETE FROM Echo WHERE Number=('$number')");

        mysql_query("INSERT INTO Echo (Number,Answer)
        VALUES ('$number','this user isn't in the database.')");
    }  // <-- NEW
}
1 голос
/ 27 февраля 2012
else echo 
"This user isn't in the database";

$number = mysql_real_escape_string($_GET["number"]);

mysql_query("DELETE FROM Echo WHERE Number=('$number')");

mysql_query("INSERT INTO Echo (Number,Answer)
VALUES ('$number','this user isn't in the database.')");

Три нижние строки всегда будут выполняться, поскольку после else нет скобок. Второй mysql_query всегда будет неудачным, потому что 'не сбежал.

1 голос
/ 27 февраля 2012

Вам нужно второе закрытие} перед

else echo "This user isn't in the database";
...