تالار گفتمان مانشت
کمک اورژانسی : راهنمایی در مورد login شدن - نسخه‌ی قابل چاپ

کمک اورژانسی : راهنمایی در مورد login شدن - liliana - 01 شهریور ۱۳۹۳ ۰۴:۳۴ ق.ظ

موضوع اینکه من یک سایت با زبان php طراحی کردم و مشکلی که داره اینکه اگه تعداد کاربران بیشتر از یک نفر باشه رو شناسایی نمیکنه و فقط اولین نفری که وارد میشه رو شناسای میکنه . نمیدونم مشکل از session هاست یا کد ها مشکل دارن.
برای مثال اگه دو تا مدیر سایت تعریف کنم فقط قادر به شناختن یکی از اون هاست و جالب تر اینکه دستور header location رو خطا میگیره یا اینکه شناسایی میکنه اما با اطلاعات مدیر قبلی وارد سایت میشه .

کد php:
<?php
    session_start
();
    
$noe=$_POST['noe'];
    
$username=$_POST['username'];
    
$password=$_POST['password'];
    if(
$username=="" || $password=="")
    {
        
$msg="لطفا نام کاربری و کلمه عبور را وارد کنید";
    }
    else
    {
        if(
$noe=="manage")
        {
            
mysql_connect("localhost","root","");
            
mysql_select_db("medical");
            
$query="SELECT * FROM manager";
            
$result=mysql_query($query);
            
$num=mysql_num_rows($result);
            for(
$i=0;$i<$num;$i++)
            {
                
$row=mysql_fetch_row($result);
                if(
$username!=$row[1] && $password!=$row[2])
                {
                    echo 
"نام کاربری و یا کلمه عبور صحیح نیست...........";
                }
                else
                {
                    
$_SESSION['fullname']=$row[1];
                    
$_SESSION['pass']=$row[2];
                    
header("location:admin/index.php");
                }
            }
        }
            if(
$noe=="doctor")
            {
            
mysql_connect("localhost","root","");
            
mysql_select_db("medical");
            
$query="SELECT * FROM doctor";
            
$result=mysql_query($query);
            
$num=mysql_num_rows($result);
            for(
$i=0;$i<$num;$i++)
            {
                
$row=mysql_fetch_row($result);
                if(
$username!=$row[1] && $password!=$row[2])
                {
                    echo 
"نام کاربری و یا کلمه عبور صحیح نیست";
                }
                else
                {
                    
$_SESSION['fullname']=$row[1];
                    
$_SESSION['takhasos']=$row[4];
                    
$_SESSION['pass']=$row[2];
                    
header("location:doctor/index.php");
                }
            }
            }
            if(
$noe=="sick")
            {
            
mysql_connect("localhost","root","");
            
mysql_select_db("medical");
            
$query="SELECT * FROM sick";
            
$result=mysql_query($query);
            
$num=mysql_num_rows($result);
            for(
$i=0;$i<$num;$i++)
            {
                
$row=mysql_fetch_row($result);
                if(
$username!=$row[1] || $password!=$row[2])
                {
                    echo 
"نام کاربری و یا کلمه عبور صحیح نیست";
                }
                else
                {
                    
$_SESSION['sickid']=$row[0];
                    
header("location:user/index.php");
                }
            }
            }
    
    }
?>


کمک اورژانسی : راهنمایی در مورد login شدن - reza19 - 01 شهریور ۱۳۹۳ ۱۲:۴۷ ب.ظ

این کد مشکلات زیادی داره، بهتره برای اینکه در PHP بهتر پیشرفت کنید و کد با کیفیت تری داشته باشید حتما از فریم ورک ها استفاده کنید، در مورد مشکلی که دارید من دقیق منظورتون رو متوجه نشدم ولی وقتی شما SESSION رو مقدار دهی میکنید یک کوکی ساخته میشه که برای صفحه مرورگر فعلی کاربر معتبره و فقط یک کاربر میتونه وارد بشه و تنها با خروج یکی دیگری میتونه وارد بشه.
در مورد SQL هم بهتره با قرار دادن WHERE نتایج رو در کوئری محدود کنید و همه سطرها رو نخونید.
در مورد خطا هم ممکنه چون تو صفحه فارسی نوشتید و از UTF-8 استفاده میکنید در ابتدای فایل کاراکتر BOM باشه که دیده نمیشه، فایل رو در Notepad++ باز کنید و از منوی Encoding گزینه UTF-8 without BOM رو انتخاب کنید و فایل رو سیو کنید.
موفق باشید.

RE: کمک اورژانسی : راهنمایی در مورد login شدن - liliana - 01 شهریور ۱۳۹۳ ۰۷:۱۶ ب.ظ

(۰۱ شهریور ۱۳۹۳ ۱۲:۴۷ ب.ظ)reza19 نوشته شده توسط:  این کد مشکلات زیادی داره، بهتره برای اینکه در PHP بهتر پیشرفت کنید و کد با کیفیت تری داشته باشید حتما از فریم ورک ها استفاده کنید، در مورد مشکلی که دارید من دقیق منظورتون رو متوجه نشدم ولی وقتی شما SESSION رو مقدار دهی میکنید یک کوکی ساخته میشه که برای صفحه مرورگر فعلی کاربر معتبره و فقط یک کاربر میتونه وارد بشه و تنها با خروج یکی دیگری میتونه وارد بشه.
در مورد SQL هم بهتره با قرار دادن WHERE نتایج رو در کوئری محدود کنید و همه سطرها رو نخونید.
در مورد خطا هم ممکنه چون تو صفحه فارسی نوشتید و از UTF-8 استفاده میکنید در ابتدای فایل کاراکتر BOM باشه که دیده نمیشه، فایل رو در Notepad++ باز کنید و از منوی Encoding گزینه UTF-8 without BOM رو انتخاب کنید و فایل رو سیو کنید.
موفق باشید.
من در حدودا چند ماه هست که با این زبان برنامه نویسی آشناشدم و اظلاعات دقیقی در این مورد ندارم . اگه مقدور هست بیشتر راهنمایی کنید در مورد فریم ورک ها که دقیقا باید کدوم قسمت ها رو تغییر بدم.
من در مورد خروج کاربران تعریف کردم که session خالی بشه اما همون مشکل وجود داره.

RE: کمک اورژانسی : راهنمایی در مورد login شدن - reza19 - 01 شهریور ۱۳۹۳ ۰۹:۳۹ ب.ظ

فریم ورک ها در واقع کتابخونه ای از کلاس ها و کامپوننت ها و روش های طراحی هستند که کار شما رو راحت میکنند و کیفیت کار رو بالا میبرند مثلا Symfony یا CakePHP یا ZEND ، در گوگل سرچ کنید.
کد شما مشکل داره و کلا باید شکل دیگه ای نوشته بشه، اگر خیلی فورس ماژوره فعلا حلقه ها رو حذف کنید و کوئری رو به صورت زیر بنویسید:
SELECT * FROM manager WHERE username='$username' and password='$password'
بعد چک کنید که آیا سطری برگشته یا نه.اگه آره SESSION رو مقدار دهی کنید و در غیر اینصورت SESSION رو ریست کنید، بهتره پسورد رو در SESSION ذخیره نکنید.
این کد رو تست کنید .username_column و password_column رو با نام ستون پسورد و یوزرنیم در دیتابیس عوض کنید.
کد php:
<?php
    session_start
();
    
$noe=$_POST['noe'];
    
$username=$_POST['username'];
    
$password=$_POST['password'];
    if(
$username=="" || $password=="")
    {
        echo 
"لطفا نام کاربری و کلمه عبور را وارد کنید";
        die();
    }
    
mysql_connect("localhost","root","");
    
mysql_select_db("medical");
    if(
$noe=="manager")
    {
        
$query="SELECT * FROM manager WHERE username_colum='$username' and password_column='$password'";
        
$result=mysql_query($query);
        
$num=mysql_num_rows($result);
        if(
$num!=1)
        {
            echo 
"نام کاربری و یا کلمه عبور صحیح نیست...........";
        }
        else
        {
            
$row=mysql_fetch_row($result);
            
$_SESSION['fullname']=$row[1];
            
$_SESSION['pass']=$row[2];
            
header("location:admin/index.php");
        }
    }
    
    if(
$noe=="doctor")
    {
        
$query="SELECT * FROM doctor WHERE username_colum='$username' and password_column='$password'";
        
$result=mysql_query($query);
        
$num=mysql_num_rows($result);
        if(
$num!=1)
        {
            echo 
"نام کاربری و یا کلمه عبور صحیح نیست...........";
        }
        else
        {
            
$row=mysql_fetch_row($result);
            
$_SESSION['fullname']=$row[1];
            
$_SESSION['takhasos']=$row[4];
            
$_SESSION['pass']=$row[2];
            
header("location:doctor/index.php");
        }
    }
    
    if(
$noe=="sick")
    {
        
$query="SELECT * FROM sick WHERE username_colum='$username' and password_column='$password'";
        
$result=mysql_query($query);
        
$num=mysql_num_rows($result);
        if(
$num!=1)
        {
            echo 
"نام کاربری و یا کلمه عبور صحیح نیست...........";
        }
        else
        {
            
$row=mysql_fetch_row($result);
            
$_SESSION['sickid']=$row[0];
            
header("location:user/index.php");
        }
    }
?>