ايران ويج

نسخه‌ی کامل: تولید خطا پس از header
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
باسلام
تو پروژه (تمرینی) من قسمتی هست برای وارد کردن یه سری اطلاعات اولیه به دیتابیس و از صفحه ای دیگه بصورت لیستی میتونم اطلاعات درج شده تو دیتابیس رو مدیریتشون کنم که تو عکس صفحه مدیریت لیست ها مشخص هست و در ادامه توضیحات شرح دادم که بعد از اضاف کردن قابلیت هدر به گزینه delete به خطایی برخوردم ...


کد php:
<?php
    $id
=$_GET['id'];
 
   DeleteMenu($id);
 
   header("location:dashbord.php?m=menu&p=list");
 
?>

کد php:
function DeleteMenu($id){
 
   $connection config();
 
   $sql "DELETE FROM menu_tbl WHERE id='$id'";
 
   $row mysqli_query($connection$sql);
 
 


----------------------------------------------------------------
و تو خطایی که نمایش میده به این خط کد داره اشاره میکنه که همه چیز درست کار میکنه و احتمالا ایراد کار باید از جای دیگه ای باشه


- پروژه ای که دارم بصورت آزمایشی و تمرینی روش کار میکنم ( کلا بر اساس function ) و با include کردن صفحات هست، و این مشکلی که الان به وجود اومده پروژه تا قبل از ایجاد header کلا درست کار میکنه یعنی تو صفحه لیست گزینه هایی که تولید کردم و گزینه حذف رو میزنم به درستی عمل میکنه و با یه back زدن به صفحه قبل آیتم مورد نظر به درستی پاک میشه ولی برای تکمیل این بخش لازمه که header ایجاد بشه و بدون رفرش رو همون صفحه باقی بمونه که متاسفانه بعداز ایجاد قابلیت header به این مشکل برخوردم و با ظاهر شدن خطا پروسه delete انجام میشه ولی هدر با این خطا مواجه میشه !

(دوستان محترم اگر توضیحات و عکس ها کفایت نکرد فایل کامل پروژه هم میتونم آپلود کنم)
سلام طبق گفته ی استاد babyy

نقل قول: اگر میخوایی با header توی php اینکارو کنی باید اول فایل ، قبل اینکه چیزی چاپ کنی ، ازش استفاده کنی ...
موفق باشید خنده بلد − بهینه شده برای ورژن جدید
متاسفانه منظورتون رو متوجه نشدم، بنده چون تازه کار هستم نیاز به راهنمایی بیشتری دارم تا بتونم مشکل رو حل کنم.
میگن که قبل از اینکه مقداری از سیشن چاپ کنی استارتش کن.


کد:
session_start();
دوستان عزیز
من Session_start رو تو خط کدی که ازش ایراد میگرفت، اضاف کردم و تغییری حاصل نشد. بالای صفحه هم session_start آوردم و چون صفحه بهش include_once شده بود و تو یه صفحه دیگه از session استفاده کرده بودم ، خطا گرفت (که قبلا اومده و دوبار نمیتونه باشه) !
و از یوتیوب کمک گرفتم و تو ویدئو از تابع ob_start استفاده کرد که من از این تابع تو اول صفحه ام استفاده کردم و حتی از end هم لازم نشد استفاده کنم فقط ob_start استفاده کردم. و دقیقا هم نمیدونم این تابع چه کاری رو انجام میده و ایراد کار هم از session هم نبوده !
به هر حال مشکل حل شد و دقیقا هم نفهمیدم مشکل از کجا بود.

ببخشید دیر پاسخ میدم

----

در http چیزی داریم بنام هدر (header) که یک سری اطلاعات رو به مرورگر میده و مرورگر هم اگر لازم دونست اونا رو اجرا میکنه و . . .

این اطلاعات یا هدر ؛ در حالت عادی و توی مرورگرا ها قابل مشاهده نیست؛ چون کاربر اصلا احتیاجی به دیدن اونا نداره؛ 

روش کار به این صورته که شما فایر فاکس رو باز میکنید و درخواست میکنید از سایت iranled.com دیدن کنید؛‌ مرورگر یه درخواست به iranled.com میفرسته و میگه چه محتویاتی داری و برای من بفرست ؛

و در حواب ؛ سرور iranled,com ؛ در ابتدا یه هدر میفرسته ؛ و بعدش html و ....

برای مثال:

کد php:
HTTP/1.1 200 OK
Date
Sun30 Dec 2018 21:48:34 GMT
Server
Apache
Expires
Sat1 Jan 2000 01:00:00 GMT
Cache
-Controlno-cachemust-revalidate
Pragma
no-cache
Set
-Cookiemybb[lastvisit]=1546206515expires=Mon30-Dec-2019 21:48:35 GMTpath=/
Set-Cookiemybb[lastactive]=1546206515expires=Mon30-Dec-2019 21:48:35 GMTpath=/
Set-Cookiesid=8b627affed98608ccf0d7eda12783ab5path=/; HttpOnly
Last
-ModifiedSun30 Dec 2018 21:48:35 GMT
Vary
User-Agent
Content
-Typetext/htmlcharset=UTF-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><!-- startportal -->
<
html xml:lang="persian" lang="persian" dir="rtl" xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
title>ايران ويج</title>
<!-- 
startheaderinclude -->
<
link rel="alternate" type="application/rss+xml" title="آخرین موضوع‌ها (RSS 2.0)" href="https://www.iranled.com/forum/syndication.php" />
<
link rel="alternate" type="application/atom+xml" title="آخرین موضوع‌ها (Atom 1.0)" href="https://www.iranled.com/forum/syndication.php?type=atom1.0" />
<
meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<
meta http-equiv="Content-Script-Type" content="text/javascirpt" />
<
script type="text/javascirpt" src="https://www.iranled.com/forum/jscripts/jquery.js?ver=1804"></script>

....

...
...
...
... 



همونطور که میبینید اولش (یعنی چند خط ابتدایی) هدر هست و بعدش محتویات صفحه درخواستی میاد و ... و ما همیشه در مرورگر میتونیم محتویات رو ببینیم ...



-------------


با این پیش زمینه بریم سراغ مشکل شما ؛

در php شما هم میتونید در هدر چیزی بنویسید و هم به شکل معمولی محتویات رو ایجاد کنید

یعنی وقتی که شما مینویسید :

کد php:
<html>
<?
php  echo "salam" ?>
</html> 

در واقع دارید محتوای صفحه رو تولید میکنید.


-----


اما اگر بخوایید چیزی در هدر استفاده کنید باید چکار کنید؟
جوابش استفاده از تابع header هست


برای مثال:
کد php:
<?php 
header
('web_dev: hello!');
echo 
"babyy";
?>
وقتی شما کد بالا رو اجرا کنید؛ در مرورگر فقط میبینید babyy ؛

اما اگر با نرم افزاریی که میتنند هدر رو نمایان کنند؛ نگاه کنید بهشون این رو میبینید:

کد php:
HTTP/1.1 200 OK
Date
Sun30 Dec 2018 21:59:09 GMT
Server
Apache/2.4.25 (Debian)
web_devhello!
Content-Typetext/htmlcharset=UTF-8


babyy 
همونطور که میبینید ما با دستور header تونستیم به هدر چیزی اضافه کنیم!
-----------------------
در php یه مشکل رایجی وجود داشت و اونم این هست که شما حق ندارید قبل از اینکه از تابع header استفاده کنید؛ چیزی در صفحه اصلی چاپ کنید!
(فکر میکنم این مشکل در php5 بود و الان برطرف شده ؛ مطمن نیستم!)
برای مثال :

کد php:
<?php 
echo "babyy";
header('web_dev: hello!');
?>

ابن کد باعث میشه که اون خطایی که شما بهش برخورده بودید ایجاد بشه! چرا؟
چون همونطور که گفتم همیشه اول هدر باید بیاد و بعد محتویات صفحه!
و شما با این کد کاری کردید که اول محتویات بیاد و بعد خواستید چیزی به هدراضافه کنید!
به همین علت بهتون خطا میده
چاره چیه: 
۱ - چک کنید که هیچ چیزی قبل از استفاده header چاپ نشه ؛ یعنی header قبل تز از هر چیزی که چیزی چاپ میکنه اجرا بشه..
۲ نوشتن کد هاتون بین توابع زیر ..
کد php:
ob_start( );
....
ob_end_flush(); 

این تابع باعث میشه که بافر فعال بشه و دیگه شما میتونی شماره ۱ رو رعایت نکنید ! مثلا میتونید اول چیزی echo کنید و بعدش header استفاده کنی ...

اطلاعات بیشنر:
https://stackoverflow.com/questions/4401...art-in-php

و

http://php.net/manual/en/function.ob-start.php

۳ - (اینو مطمن نیستم) استفاده از php های ورژن جدیدتر مثل ۷ ... (چون الان من دارم تست میکنم و این مشل برام پیش نمیاد..)




سوالی داشتید در خدمتم قلب
(۰۷-دى-۱۳۹۷, ۲۲:۳۹:۴۷)nImaarek نوشته است: [ -> ]میگن که قبل از اینکه مقداری از سیشن چاپ کنی استارتش کن.


کد:
session_start();

دلیل اینکار هم اینه که این تابع هم با هدر کار میکنه


یعنی کوکی و سیشن در php  چیزی نیست جز اینکه در هدر چیزی اضافه میکنه و میفر سته به مرورگر ...
و مرگر اون مقدار رو از هدر میخونه و ذخیره میکنه و ....