PDA

View Full Version : مشکل با synax یک خط کد در یک پروژه نمونه



erfan_3d
چهارشنبه 20 فروردین 1393, 18:05 عصر
در نمونه کد زیر یک مشکل دارم . ممنون می شم راهنمایی بفرمایید
این چند خط کد مربوط به صفحه لاگین هست
در صفحه لاگین ما یه level داریم یه یوزر یه پسورد (مثلا در اینجا اگر level =1 باشد یعنی من ادمین هستم که دارم وارد میشم . اگر 2 باشد کاربر عادری و ...)


if($row['LEVEL']==1){ session_start();$_SESSION['user_id']=$row['user_id']; <p align="center">Login Successful</p> .........<p align="center"> <meta content="2;home.php?action=home" http-equiv="refresh" /></p> }





مشکل من با تگ Meta است . در این تگ اگر همه موارد بالا درست باشد ما forward می شویم به home.php?action=home
سوال من اینه که عدد 2 در قسمت content چیه هست؟
و این ایا راه بهتری واسه فوروارد شدن به صفحه مورد نیست ؟
ممنون می شم اگر پاسخ سوال من رو بفرمایید
با تشکر

cpuram
چهارشنبه 20 فروردین 1393, 19:52 عصر
سلام اولا
session_start(); همیشه اولین کدی هست که در صفحه قرار میگیره یعنی لاین 1. و امیخوایید اونجا باشه باید یه @ پشتش بزارید.
دوما من هیچ جا ندیدم از متاها داخل تگ p استفاده کنن متاها باید داخل head باشد

***BiDaK***
چهارشنبه 20 فروردین 1393, 21:52 عصر
شما بعد از ست کردن سشن عمل ریدایرکت رو میخواید انجام بدید که باید این تگ meta رو echo کنید.
تگ های دیگتونم چون داخل تگ php هست باید اکو کنید.
جمله ی Login Successful نمایش داده میشه و بعد از 2 ثانیه (که در متا مشخص کردید - content="2;home.php?action=home) ریدایرکت میشه.

erfan_3d
چهارشنبه 20 فروردین 1393, 23:39 عصر
شما بعد از ست کردن سشن عمل ریدایرکت رو میخواید انجام بدید که باید این تگ meta رو echo کنید.
تگ های دیگتونم چون داخل تگ php هست باید اکو کنید.
جمله ی Login Successful نمایش داده میشه و بعد از 2 ثانیه (که در متا مشخص کردید - content="2;home.php?action=home) ریدایرکت میشه.
ممنون از پاسختون
پاسختون دقیقا درست بود و عدد 2 تایمر ریدارکت شدن بود
اما نکته ای که شما فرمودید وجود نداره
یعنی تگ مmeta داخل echo نیست و لی همه چی داره درست کار می کنه . چرا ؟
سوال دومم این که آیا روش بهتری واسه ریدایرکت کردن نیست ؟
این هم عین کد مورد سوال :



<?php
if (isset($_POST['lamasab'])){

include_once("connection.php");
$username=$_POST['username'];
$level=$_POST['who'];
$password=$_POST['password'];
$pass=md5($password);
$sql = "SELECT * FROM users WHERE username='$username' AND password='$pass' AND LEVEL='$level'";
$result = mysql_query($sql);

?>
<?php
$rowCheck = mysql_num_rows($result);
$row=mysql_fetch_array($result);


if($row['LEVEL']==1){

session_start();
$_SESSION['user_id']=$row['user_id'];

?>
<p align="center">Login Successful</p>
<br />
<br />
.........
<p align="center">
<meta content="10;home.php?action=home" http-equiv="refresh" />
</p>

}

***BiDaK***
پنج شنبه 21 فروردین 1393, 00:10 صبح
آها.بله شما تگ php رو بستید.بالا کدتون در یک خط بود من متوجه نشدم.
واسه ریدایرکت دو راهه دیگه هست:
1. تابع header در php که باید حواستون باشه مثل session_start قبل از این تابع در خروجی چیزی چاپ نکنید. مثل html و ...

header('location: index.php');
واسه اینکه بعد از 2 ثانیه هدر انجام بشه باید ازین کد استفاده کنی:

header('refresh:2;url=index.php');
راه دیگه میتونی از جاوا اسکریپت استفاده کنی که البته باید بدونی که اگر جاوااسکریپت در مرورگر کاربر غیر فعال باشه این کد کار نمیکنه:
echo '<script type="text/javascript">window.location = "index.php";</script>';
پرانتز آخر رو هم در بین تگ php بذارید.

erfan_3d
پنج شنبه 21 فروردین 1393, 01:59 صبح
خیلی متشکر از پاسختون
کدام یک از این سه روش که فرمودید امن تر و بهتره؟
و اینکه اگر بخواهیم قبل از ریدایرکت شدن مثلا یه پیغام چاپ کنیم که : سیستم در حال بارگذاری ... ، از روش تابع header نمی توان استفاده کرد؟درسته؟چه کار باس کردبرای استفاده از تابع header؟
ممنون

***BiDaK***
پنج شنبه 21 فروردین 1393, 02:09 صبح
تگ متا راه خوبیه.در جاهایی که مکث ندارید مقدار رو صفر بذارید.
واسه نمایش متن و ایجاد مکث هم گفتم از شکل دوم header میتونی استفاده کنی:

header('refresh:2;url=index.php');