تالار گفتمان nCIS.ir

نسخه‌ی کامل: تشخیص کابر قبلا ثبت نام کرده ...
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.

ABZiko

سلام، بنده می خوام در هنگام ثبت نام، اگر کابری با چنین نام کابری و ایمیلی وجود داشت، ارور بده ، این کوئری SQL :
"SELECT * FROM user WHERE userName='$userName' OR mail='$mail'"
و این هم کد عضویت کاربر :
            $checkUser=new User();
            $checked=$checkUser->checkUser($_POST['userName'],$_POST['mail']);
            if($checked) {
                $objUser = new User();
                $result = $objUser->addUser($_POST['firstName'], $_POST['lastName'], $_POST['userName'], $_POST['passWord'], $_POST['mail'], $newName . '.' . $mime[$type], $IC);
                if ($result) {
                    if (!empty($_SERVER['HTTP_REFERER'])) {
                        header("Refresh:5;Location: {$_SERVER['HTTP_REFERER']}");
                    } else {
                        echo "No Referrer !";
                    }
                } else {
                    echo "<div style='font-family:Segoe UI'>A Problem !</div>";
                }
            }
            else{
                echo "There is a User with these Options !";
            }

اما همیشه، یا اینکه اطلاعات کابر یکسان نباشند، ارور می ده و می گه چنین کاربری با چنین مشخصاتی وجود داره، حالا مشکل چیه ؟
ممنون Angry Dodgy
باید مرحله به مرحله دیباگ کنید. مثلاً کوئری که اجرا میشه echo کنید. بعد توی phpMyAdmin دستی اجراش کنید ببینید چیزی پیدا میکنه؟ اگه پیدا نشد، ببینید خروجی checkUser چیه؟

ABZiko

ممنون استاد، بنده در phpMyAdmin چک کردم و موارد رو نشون داد، خروجی checkedUser هم برابر عدد 1 هست و وقتی از کل کوئری رو print_r می کنم ، می نویسه :
Array (
    [0] => Array (
        [id] => 44
        [firstName] => Aarash
        [lastName] => Bahaari
        [userName] => AaBa
        [passWord] => 2020
        [mail] => AaBa
        [file] => Person (3).png
        [IC] => 702514648
        [biography] => 
    )
)
در صورتی که یک سطر دیگه هم دارم که mail اش برابر AaBa هست ...

ABZiko

استاد، ببخشید، الان من این رو اینطوری نوشتم :
    public function checkUser($userName, $mail)
    {
        $sql = "SELECT * FROM user WHERE userName='$userName' OR mail='$mail'";
        print_r(Database::FetchAll($sql));
    }
و این هم کد چک کردن :
            $checkUser=new User();
            $checked=$checkUser->checkUser($_POST['userName'],$_POST['mail']);
            print_r($checked);

            if(!$checked) {
                $objUser = new User();
                $result = $objUser->addUser($_POST['firstName'], $_POST['lastName'], $_POST['userName'], $_POST['passWord'], $_POST['mail'], $newName . '.' . $mime[$type], $IC);
            }
            else{
                echo "There is a User with these Options !";
            }
الان بعد از اینکه فیلد های تکراری وارد بشن، اون ها رو پیدا می کنه و همشون رو نمایش می دهف پس تا اینجا مشکلی نیست ...
اما با اینکه تکراری ها رو پیدا می کنه ولی همه رو ثبت می کنه اعم از تکراری یا غیر تکراری ...
خوب این که خروجی 1 هست یعنی اینکه کاربر پیدا شده. شما باید پشت شرطتون یه ! بگذارین یعنی اگه پیدا نشد، درج کنه.

ABZiko

(19-04-1394، 04:05 ب.ظ)ADMIN نوشته: [ -> ]خوب این که خروجی 1 هست یعنی اینکه کاربر پیدا شده. شما باید پشت شرطتون یه ! بگذارین یعنی اگه پیدا نشد، درج کنه.

جالبه که باز هم ثبت می کنه ...

ABZiko

استاد، توی همون کد وقتی ! رو بر می دارم، درست می شه و پیغام رو هم می ده و ثبت هم نمی کنه، ولی به نظر شما این مشکلی نداره ؟ نکنه باگ PHP پیدا کردم ؟؟؟[عکس: yextralaugh.png]
نه باگ پیدا کردن به این راحتیا نیست. باید کدتون رو اصلاح کنید:
public function exists($userName, $mail)
{
    $sql = "SELECT * FROM `user` WHERE (`userName`='{$userName}' OR `mail`='{$mail}') LIMIT 1";
    return (count(Database::FetchAll($sql)) > 0);
}

حالا از این متد بجای checkUser استفاده کنید و یه ! پشتش بگذارین:
$user = new User();
if(!$user->exists($_POST['username'], $_POST['email'])) {

ABZiko

ممنون استاد، اما چرا اون کد کار نمی کنه ولی این اره؟ از نظر منطق که باید کد بنده هم کار می کرد ... درسته ؟
تشکر
شما خروجی رو print_r میکردین که خروجی تولیدشده، یه String بوده که خالی هم نبوده. درنتیجه معادل true تفسیر میشد.