رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تشخیص کابر قبلا ثبت نام کرده ...
#1
سلام، بنده می خوام در هنگام ثبت نام، اگر کابری با چنین نام کابری و ایمیلی وجود داشت، ارور بده ، این کوئری 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
پاسخ
تشکر شده توسط:
#2
باید مرحله به مرحله دیباگ کنید. مثلاً کوئری که اجرا میشه echo کنید. بعد توی phpMyAdmin دستی اجراش کنید ببینید چیزی پیدا میکنه؟ اگه پیدا نشد، ببینید خروجی checkUser چیه؟
پاسخ
تشکر شده توسط:
#3
ممنون استاد، بنده در 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 هست ...
پاسخ
تشکر شده توسط:
#4
استاد، ببخشید، الان من این رو اینطوری نوشتم :
    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 !";
            }
الان بعد از اینکه فیلد های تکراری وارد بشن، اون ها رو پیدا می کنه و همشون رو نمایش می دهف پس تا اینجا مشکلی نیست ...
اما با اینکه تکراری ها رو پیدا می کنه ولی همه رو ثبت می کنه اعم از تکراری یا غیر تکراری ...
پاسخ
تشکر شده توسط:
#5
خوب این که خروجی 1 هست یعنی اینکه کاربر پیدا شده. شما باید پشت شرطتون یه ! بگذارین یعنی اگه پیدا نشد، درج کنه.
پاسخ
تشکر شده توسط:
#6
(19-04-1394، 04:05 ب.ظ)ADMIN نوشته: خوب این که خروجی 1 هست یعنی اینکه کاربر پیدا شده. شما باید پشت شرطتون یه ! بگذارین یعنی اگه پیدا نشد، درج کنه.

جالبه که باز هم ثبت می کنه ...
پاسخ
تشکر شده توسط:
#7
استاد، توی همون کد وقتی ! رو بر می دارم، درست می شه و پیغام رو هم می ده و ثبت هم نمی کنه، ولی به نظر شما این مشکلی نداره ؟ نکنه باگ PHP پیدا کردم ؟؟؟[عکس: yextralaugh.png]
پاسخ
تشکر شده توسط:
#8
نه باگ پیدا کردن به این راحتیا نیست. باید کدتون رو اصلاح کنید:
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'])) {
پاسخ
تشکر شده توسط:
#9
ممنون استاد، اما چرا اون کد کار نمی کنه ولی این اره؟ از نظر منطق که باید کد بنده هم کار می کرد ... درسته ؟
تشکر
پاسخ
تشکر شده توسط:
#10
شما خروجی رو print_r میکردین که خروجی تولیدشده، یه String بوده که خالی هم نبوده. درنتیجه معادل true تفسیر میشد.
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان