PDA

View Full Version : سوال: مشکل در مورد login



soroush.r70
پنج شنبه 20 بهمن 1390, 13:11 عصر
من یه کد لاگین دارم که اگه اطلاعات درست بود می ره به صفحه دیگه کدشم به شکل زیر است ولی خطا می ده

ticket.php

<?php
$username = $_POST['username'];
$pass = $_POST['pass'];
$pass = md5($pass);
$sql = "SELECT `pass`
FROM `c_teckerg`
WHERE `username` = '$username'";
$res = mysql_query($sql);
if(mysql_num_rows($res) == 1 && mysql_result($res, 0) == $pass)
{
$_SESSION['username'] = $username;

$ClientString = $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR'];
$_SESSION['ClientStr'] = md5($ClientString);

header("Location: sendticket.php");
}
else
{
header("Location:ticket.php");
}
?>



خطا :


Warning: Cannot modify header information - headers already sent in F:\xampp\htdocs\60\ticket.php on line 208

yones_safari
پنج شنبه 20 بهمن 1390, 13:49 عصر
وقتی از header استفاده میکنی قبل از آن نباید هیچ خروجی html داشته باشی.تو سطر 208 خروجی html داری.یا حذفش کن یا بافر کن و بعد از header بفرستش به خروجی.

object68
پنج شنبه 20 بهمن 1390, 13:58 عصر
وقتی یه در خواست از طریق php ارسال می شه همراه باهاش یه سری اطلاعات هم فرستاده می شه که اصطلاحا بهش می گن header information. اطلاعاتی که توی header قرار می گیره بر می گرده به اینکه مثلا چه نوع درخواستی فرستاده شده ( post یا get ) یا اینکه اصلا درخواست با موفقیت انجام شده یا نه. خلاصه اینکه وقتی یه صفحه ی جدید توی php باز می کنین در اصل دارین یه درخواست جدید می فرستین و اولین اتفاقی که می افته اینه که یه سری اطلاعات رو از طریق header ارسال می کنین. بنابراین header ارسال شده و دیگه نمی تونین اطلاعات فرستاده شده رو تغییر بدین. برای همین این پیغام خطا رخ می ده.

حالا برای اینکه حلش کنین چند تا راه هست. اولیش که ساده هم هست براتون می ذارم اما می تونین با search کردن بقیه اش رو هم پیدا کنین.
شما بیا بالای صفحه ای که مورد نظرتون هست این خط کد رو بذارین

<? ob_start(); ?>

و پایین صفحه هم اینو قرار بدین.

<? ob_flush(); ?>

MMSHFE
پنج شنبه 20 بهمن 1390, 14:03 عصر
یک نکته دیگه: فایلتون رو با کدگذاری UTF-8 without BOM ذخیره کنید. راستی، تابع session_start رو کجا فراخوانی کردین؟ ندیدمش! دقت کنید که توی هر اسکریپتی که با سشن سروکار داره باید ابتدا این تابع رو صدا بزنید تا امکان کار با سشن رو در اختیارتون بگذاره. تابع مذکور به دو روش کار میکنه:
1- اگه هنوز برای کاربر سشن ایجاد نشده باشه، یک Session ID بهش اختصاص میده و براش فایل سشن رو میسازه.
2- اگه کاربر سشن داشته باشه، متغیرهای سشن رو از فایل سشن خونده و توی حافظه بارگذاری میکنه و در اختیار صفحه میگذاره.
موفق باشید.

soroush.r70
پنج شنبه 20 بهمن 1390, 14:51 عصر
در واقع خط 208 من همون خط

header("Location:ticket.php");

هستش اون صفحه هم ضمیمه می کنم یه نگاهی بهش بندازین ممنونم

mtchabok
جمعه 21 بهمن 1390, 11:35 صبح
عزیزم تابع header رو چرا در وسط کدهای html فراخوانی کردین ؟
همونطوریکه دوستان گفتن تابع هدر مقداری رو به هدر پاسخ اضافه میکنه و چون این تابع بعد از خروجی بدنه فراخوانی شده ، خطا داده .
شما باید شرط رو قبل از هر خروجی انجام بدین .