الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استفسار عن كيفية تحديد الدخول لصفحات محدد حسب نوع المستخدم

مغلق
بدأه أصيل في 14 يونيو 2006 · 13 رد · 1,132 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوة الكرام :

لدي مشكلة في تحديد صفحات خاصة يدخلها المستخدم حسب نوعه حيث لدي جدول user به الحقول id ,username ,passwprd ,status

حيث status اما a او b او c

a=مستخدم عادي . b= فني . c= مسؤول

ولقد اشنات صفحة login وصفحة check واستخدمت فكرت الجلسات sission اتلمشكلة لدي بعد صفحة check المطلوب ادخل مستخدم من نوع a يتجه لصفحة user.php و b يتجه الى fani.php و c الى admin.php

ولقد استخدمت الفكرة التالية في صفحة check ولم تنجح . لذا آمل المساعدة .

<?
session_start();
if(!session_is_registered(usernm))
{
header("location:main_login.php");
}elseif($_SESSION[status] ='a')
 {

header("Location:user.php");

  }
  elseif($_SESSION[status] ='b') {

header("Location:fani.htm");

}
elseif($_SESSION[status] ='c') {

header("Location:admin.php");
?>

<html>
<body>
Login Successful
<p><a href="Logout.php">ÊÓÌíá ÎÑæÌ</a></p>
<p> </p>
<p align="center"><span lang="ar-sa">ÇÖÇÝÉ ãæÖæÚ ÌÏíÏ</span></p>

</body>
</html>
#2

هذه الفكرة خطا ومن الافضل ان تستعمل الداتابيس.

الخطا بالكود هو ان تستعمل:

session_is_registered

لسببين:

الاول: انه جلوبل (عام)

والثاني انه غير مستعمل كثير

<?php

session_start();

if(!isset($_SESSION['usernm']))
	header("Location: http://www.site.com/main_login.php");
}

if($_SESSION['status'] == 'a'){
	header("Location: http://www.site.com/user.php");
	exit();
}
if($_SESSION['status'] == 'b'){
	header("Location: http://www.site.com/fani.php");
	exit();
}
if($_SESSION['status'] == 'c'){
	header("Location: http://www.site.com/admin.php");
	exit();
}
?>

<html>
<body>
Login Successful
<p><a href="Logout.php">تسجيل الخروج</a></p>
<p> </p>
<p align="center"><span lang="ar-sa">ÇÖÇÝÉ ãæÖæÚ ÌÏíÏ</span></p>

</body>
</html>

مع السلامة

#3

شكرا لك اخي الفاضل على تفضلك بالرد ساجرب واوافيك بالنتيجة

#4

اخ الفاضل السطر الثالث ناقصه }

جربت الكود بعد تعديله لكن المشكلة انه عندما ادخل اي مستخدم يتجه الى الشرط الاول فقط بمعنى صفحة user.php

حتى لو ادخلت مستخدم status له b او c

مع العلم اني تأكدت من الاعدادات ومرفق لك صفحة main_login.php ربما تكون المشكلة بها .

<?php
$host="localhost"; // Host name
$username="ali"; // Mysql username
$password="123"; // Mysql password
$db_name="ctec"; // Database name
$tbl_name="users"; // Table name
$usernm=$_POST['usernm'];
$pass=$_POST['pass'];

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name WHERE usernm='$usernm' and pass='$pass'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $usernm and $pass, table row must be 1 row

if($count==1){
// Register $usernm and redirect to file "login_success.php"
session_register("usernm");
header("location:login_successful.php");
}
else {
echo "Wrong Username or Password";

}

?>
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form name="form1" method="post" >
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Member Login </strong></td>
</tr>
<tr>
<td width="78">Username</td>
<td width="6">:</td>
<td width="294"><input name="usernm" type="text" id="usernm"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="pass" type="text" id="pass"></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</form>
</tr>
 </table>
<?
#5

بدل

if($count==1){
// Register $usernm and redirect to file "login_success.php"
session_register("usernm");
header("location:login_successful.php");
}
else {
echo "Wrong Username or Password";

}

استعمل

if($count==1){
// Register $usernm and redirect to file "login_success.php"
session_start();
$user_info = @mysql_fetch_array($result);
$_SESSION['usernm'] = $user_info['status'];
header("Location: login_successful.php");
eixt();
}
else {
echo "Wrong Username or Password";

}

مع السلامة

#6

أخي الكريم حاولت ولم ينقلني ايضا هل يمكن مساعدتي بارفاق ملف بعد التجربة من قبلك وعذرا اذ اخذت جزء من وقتك

مجرد قاعدة بها جدول اسماء به 4 حقول id ,usernm ,password , status

status إما a or b or c

و3 صفحات عادية p1 , p2 ,p3

بحيث اذا كانت status للمستخدم يتجه الى صفحة p1 وهكذا .

#7

تم

Student.zip

#8

اخي SoProgramer شكرا لك

جربت الملف لكن ظهر خطأ

Warning: Supplied argument is not a valid MySQL result resource in c:\apache\htdocs\student\log.php on line 19

والمشكلة اني محتاج استخدام الجلسات session للمحافظة على المتغيرات سواء حالة المستخدم او اسم المستخدم .

انا حاولت لكن المشكلة تظهر عندما استخدم التالي :

if ($row->status == 'c'){
	header("location:test1.php");

حيث يظهر خطأ بعد الدخول بمستخدم من نوع c

Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\slog11\done.php:23) in c:\apache\htdocs\slog11\admin_page.php on line 37

اما اذ عدلت الكود ليصبح :

if ($row->status == 'c'){
  require ('test1.php');

فانه يعمل بشكل طبيعي ويظهر الصفحة ويحافظ على المتغيرات المطلوبة في الجلسة وهي اسم المستخدم والحالة

لكن طبعا مشكلة require تبقى على الصفحة الاساسية موجودة

ومرفق لكم كلم ماقمت به وآمل مساعدتي عاجلا . حيث القاعدة اسمها login والجدول members به 4 حقول id , user , pass , status

و status اما a او b او c والكود يعمل على a , c حاليا

slog11.zip

#9

يا أخي جربت الكود وما فيش أي مشكلة

أما مشكلة الheader هل يوجد مساحات فارغة

= The "headers already sent" error is usually caused by having white space before or after the opening and closing PHP tags (<?php . . . ?>).

#10

عفوا لم افهم هل جربت الكود الذي انشأته انا

وماذا يعني

أما مشكلة الheader هل يوجد مساحات فارغة

= The "headers already sent" error is usually caused by having white space before or after the opening and closing PHP tags (<?php . . . ?>).

اين تكون المسافات الفارغة

آمل التعديل على الملف الذي ارفقته اكون لك شاكرا

#11

نعم جربت الكود الذي انشأته أنت ولا يوجد أي مشكلة

ممكن بالضبط تقول لي أي سطر تطلع معك المشكلة

#12

اخي الكريم SoProgramer

أعانك الله علي فوالله حتى في النوم وانا افكر في حل هذه المشكلة لانها جزء من مشروع افكر في تطبيقه في العمل فاعذرني اذا كثرت اسئلتي فأنا مبتدئ وتعرف المبتدئ يبدأ بكتابة أكواد بطريقة بدائية جداً .

اولا : القاعدة اسمها login بها جدول memebers به 4 حقول id , user , pass , status

status له 3 حالات a or b or c

انا ادخلت القيم التالية للمستخدم الاول بحيث : 123: user: wes1 , pass

ststus له a

و ادخلت القيم التالية للمستخد الثاني بحيث : 4123: user: ali , pass

ststus له c

وانشأت صفحة login لتسجيل الدخول

<?
ECHO " <form method='post' action='done.php'>
User Name : <input type='text' name='usernm'> <br>
User Pass : <input type='password' name='pass'><br>
<input type='submit' value='login'></form>";
?>

ثم اشأت صفحة للتأكد من البيانات صحيحة done.php بحيث اذا كانت البيانات صحيحة يحول الى صفحة admin_page.php والا تظهر رسالة اسم المستخدم اوكلمة المرور خطأ

وهذا كود صفحة done.php

<?
session_start();
$host="localhost";
$username="ali";
$password="123";
$db_name="login";

$user = $_POST['usernm'];
$pass = $_POST['pass'];
if($usernm=="" or $pass=="")
{
	echo "enter user or password";
} else {

mysql_connect("$host", "$username", "$password")or die("cannot connect server ");
mysql_select_db("$db_name")or die("cannot select DB");
$results = mysql_query("SELECT * FROM  members where user='$user' and pass='$pass'");
while($row = mysql_fetch_object($results))
{
$_SESSION['usernm'] = $row->user;
//$_SESSION['status'] = $row->status;

ECHO " WELCOME ";
echo "<br>";
echo "$row->user  Your name is ";
//header("Location: http://localhost/slog11/admin_page.php");
require ('admin_page.php');
echo "<br>";
}
}
?>

وطبعا تلاحظ استخدمت require لان header يعطني رسالة خطأ :

Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\slog11\done.php:23) in c:\apache\htdocs\slog11\done.php on line 26

ولاينقلني اللى admin_page

صفحة admin_page حيث كان امستخدم من نوع a يتجه الى صفحة test11.php واما اذا كان من نوع c يتجه الى test1.php

وهذا كود admin_page.php

<?
session_start();
if( isset($_SESSION['usernm']) ){
$host="localhost"; // Host name
$username="ali"; // Mysql username
$password="123"; // Mysql password
$db_name="login"; // Database name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
echo "<br>";
echo "///////////////////////////////////////////////////////////";
echo "<br>";
$user = $_SESSION['usernm'];
ECHO " ( you are in admin page)".$_SESSION['usernm']." Thanks ";
ECHO " <br> ";
$results = mysql_query("SELECT * FROM  members where user='$user'");

while($row = mysql_fetch_object($results))
{
$_SESSION['status'] = $row->status;

echo " $row->status  is Yor status  ";
echo "<br>";
ECHO " ".$_SESSION['usernm']." Thanks   ";
echo "<br>";
echo "  test1.php if your status is c ";
echo "<br>";
echo "  test11.php if your status is a ";
echo "<br>";
if ($row->status == 'c'){
  require ('test1.php');

}elseif ($row->status == 'a' ){

header("location:test11.php");
//require ('test11.php');

}
echo "<br>";
}

echo "<br>";

echo " logout <a href='logout.php'>  </a> ";

} else {

//

ECHO " you must register to this page! ";

// or
include("login.php");

}
?>

والملاحظة هي عند ادخال مستخدم من نوع a حيث استخدمت header

elseif ($row->status == 'a' ){

header("location:test11.php");

//require ('test11.php');

يعطي رسالة خطأ

Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\slog11\done.php:23) in c:\apache\htdocs\slog11\admin_page.php on line 37

اما المستخدم c استخدمت له

if ($row->status == 'c'){

require ('test1.php');

فعمل الكود ونقلني الى صفحة test1.php

لكن انا لا اريد طريقة require بل اريد header

لقد ارفقت لكم الكود مرة اخرى وصورة للخطا الناتج

pic.zip

slog11.zip

#13

أرفقت الملفات ومافي أي مشكلة

بدل الheader لتضمين الصفحات إستخدمت include

ولو في أي مشكلة خبرني

test.zip

#14

اخي الفاضل عذرا على ازعاجك واخذ وقتك لقد وصلت للحل وهو انه لاتعمل header اذا كان يسبقها echo

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…