PDA

Դիտել ողջ տարբերակը : Որն է տարբերությունը



david
04.05.2007, 09:22
Բարև ձեզ: Այսպիսի մի անհասկանալի պրոբլեմի առաջ եմ կանգնել: Ներկայացնում եմ 2 կոդ:

<?php
session_start();
@$login = $_POST['login'];
@$pass = $_POST['pass'];
$user_reg = $login;
session_register("user_reg");
$lifetime = time()+60;
setcookie("user_cook", $login, $lifetime);
echo "<a href = 'link_page.php'>LINK</a>";
?>

և

<?php
@session_start();
@$login = $_POST['login'];
@$password = $_POST['password'];
if (!$login || !$password)
{
include 'error_allowd.php';
exit;
}
$login = addslashes($login);
$password = addslashes($password);
$db = mysql_pconnect("localhost", "root", "", "mysql");
mysql_select_db("mysql");
$host = $_SERVER['REMOTE_ADDR'];
$login = $login."@".$host;
$query = "select * from user where user = '$login' and password = password('$password')";
$result = mysql_query($query);
$kol_zap = mysql_num_rows($result);
if ($kol_zap != 1)
{
include 'error_allowd.php';
exit;
}
$user_reg = $login;
session_register("user_reg");
$lifetime = time()+60;
setcookie("user_cook", $login, $lifetime);
?>

Բանը նրանումն է, որ կարճ կոդը աշխատում է , իսկ երկարը ոչ. ԻՆՉՈՒ՞
գալիս է հետևյալ հաղորդագրությունը՝
Warning: Cannot modify header information - headers already sent by (output started at z:\home\Page\www\start.php:5) in z:\home\Page\www\start.php on line 51
51 - րդ տողը. setcookie("user_cook", $login, $lifetime);

կարճ կոդի հետ ոչ մի խնդիրներ չի առաջանում, չգիտեմ ինչ անեմ:

Ուզում եմ հասկանալ ՝ որն է տարբերությունը:
Նախապես շնորհակալ եմ:

Root
04.05.2007, 09:36
Բարև ձեզ: Այսպիսի մի անհասկանալի պրոբլեմի առաջ եմ կանգնել: Ներկայացնում եմ 2 կոդ:

<?php
session_start();
@$login = $_POST['login'];
@$pass = $_POST['pass'];
$user_reg = $login;
session_register("user_reg");
$lifetime = time()+60;
setcookie("user_cook", $login, $lifetime);
echo "<a href = 'link_page.php'>LINK</a>";
?>

և

<?php
@session_start();
@$login = $_POST['login'];
@$password = $_POST['password'];
if (!$login || !$password)
{
include 'error_allowd.php';
exit;
}
$login = addslashes($login);
$password = addslashes($password);
$db = mysql_pconnect("localhost", "root", "", "mysql");
mysql_select_db("mysql");
$host = $_SERVER['REMOTE_ADDR'];
$login = $login."@".$host;
$query = "select * from user where user = '$login' and password = password('$password')";
$result = mysql_query($query);
$kol_zap = mysql_num_rows($result);
if ($kol_zap != 1)
{
include 'error_allowd.php';
exit;
}
$user_reg = $login;
session_register("user_reg");
$lifetime = time()+60;
setcookie("user_cook", $login, $lifetime);
?>

Բանը նրանումն է, որ կարճ կոդը աշխատում է , իսկ երկարը ոչ. ԻՆՉՈՒ՞
գալիս է հետևյալ հաղորդագրությունը՝
Warning: Cannot modify header information - headers already sent by (output started at z:\home\Page\www\start.php:5) in z:\home\Page\www\start.php on line 51
51 - րդ տողը. setcookie("user_cook", $login, $lifetime);

կարճ կոդի հետ ոչ մի խնդիրներ չի առաջանում, չգիտեմ ինչ անեմ:

Ուզում եմ հասկանալ ՝ որն է տարբերությունը:
Նախապես շնորհակալ եմ:


Header-ը երկու անգամ է ուղարկում , իրար խանգարում են:

Egern.net
04.05.2007, 12:27
Դավիդ ջան, որ ասում է output started at z:\home\Page\www\start.php:5, դա նշանակում է, որ 5-րդ տողի կոդով արդեն ինչ-որ սիմվոլներ գնացել են (գրվել են), իսկ եթե ինչ-որ սիմվոլներ գնացել են, ուրեմն header-ները արդեն ուղարկվել են (http պրոտոկոլով ինֆորմացիա տեղափոխելուց առաջ ուղարկվում են http header-ները): Միայն թե չեմ հասկանում, թե տվյալ դեպքում 5-րդ տողը որն է...

david
04.05.2007, 12:38
Այո Root ջան հասկանում եմ, բայց հարցը նրանումն է, որ ինչու՞ կարճ կոդի ժամանակ դա տեղի չի ունենում: Այս երկու կոդերը գրեթե չեն տարբերվում, անգամ փոփոխականների անուներն են համընկնում: Միակ տարբերությունը. երկար կոդում ընդամենը ստուգվում է բազայում գրանցված է տվյալ օգտագործողը, թե ոչ:
Root կխնդրեի իմանալ քո կարծիքը. ինչ լուծում կտայիր խնդրիր: Ողջ բարդությունը կայանում է նրանում, որ կայքի կառուցվածքային սկզբունքը(մեթոդը) չի կարելի փոփոխել:

Root
04.05.2007, 13:17
Այո Root ջան հասկանում եմ, բայց հարցը նրանումն է, որ ինչու՞ կարճ կոդի ժամանակ դա տեղի չի ունենում: Այս երկու կոդերը գրեթե չեն տարբերվում, անգամ փոփոխականների անուներն են համընկնում: Միակ տարբերությունը. երկար կոդում ընդամենը ստուգվում է բազայում գրանցված է տվյալ օգտագործողը, թե ոչ:
Root կխնդրեի իմանալ քո կարծիքը. ինչ լուծում կտայիր խնդրիր: Ողջ բարդությունը կայանում է նրանում, որ կայքի կառուցվածքային սկզբունքը(մեթոդը) չի կարելի փոփոխել:

Եթե դժվար չէ մի հատ start.php ցույց տուր:

david
04.05.2007, 15:28
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=x-user-defined' />
<title>START</title>
<style>
body {
margin:0px 0px 0px 0px;
padding:0px 0px 0px 0px;
}
a {
text-decoration:none;
color:#FFFFFF;
}
</style>
</head>
<body>

<?php
session_start(); //open session

@$login = $_POST['login'];
@$password = $_POST['password'];

if (!$login || !$password)
{
include 'error_allowd.php';
exit;
}

$login = addslashes($login);
$password = addslashes($password);
$db = mysql_pconnect("localhost", "root", "", "mysql"); // connect to mysql db
mysql_select_db("mysql");

$host = $_SERVER['REMOTE_ADDR']; //select remote host
$login = $login."@".$host;
// check user for exist
$query = "select * from user where user = '$login' and password = password('$password')";
$result = mysql_query($query);
$kol_zap = mysql_num_rows($result);
if ($kol_zap != 1)
{
include 'error_allowd.php';
exit;
}

$user_reg = $login;
session_register("user_reg");

$lifetime = time()+60;
setcookie("user_cook", $login, $lifetime);

?>

<table border = '0px' cellspacing = '0px' cellpadding = '0px' width = '100%' height = '100%'>
<tr>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '533px' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
</tr>
<tr>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '533px' height = '*' bgcolor = '#F6AB5A' valign = 'middle' align = 'center'>BARER</td>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
</tr>
<tr>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '533px' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
</tr>
<tr>
<td width = '*' height = '87px' bgcolor = '#F6AB5A'>&nbsp;</td>
<?php echo"<td width = '533px' height = '87px' bgcolor = '#F6AB5A'><a href = '/folder/page.php'><img src = '/image_start/pict.gif' border = '0px'></a></td>"; ?>
<td width = '*' height = '87px' bgcolor = '#F6AB5A'>&nbsp;</td>
</tr>
<tr>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '533px' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
</tr>
<tr>
<td width = '*' height = '87px' bgcolor = '#F6AB5A'>&nbsp;</td>
<?php echo"<td width = '533px' height = '87px' bgcolor = '#F6AB5A'><a href = '/folder1/index.php?login=$login&password=$password'><img src = '/image_start/pict1.gif' border = '0px' border = '0px'></a></td>"; ?>
<td width = '*' height = '87px' bgcolor = '#F6AB5A'>&nbsp;</td>
</tr>
<tr>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '533px' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
</tr>
<tr>
<td width = '*' height = '87px' bgcolor = '#F6AB5A'>&nbsp;</td>
<?php echo"<td width = '533px' height = '87px' bgcolor = '#F6AB5A'><a href = '/total_search/index.php?login=$login&password=$password'><img src = '/image_start/search.gif' border = '0px'></a></td>"; ?>
<td width = '*' height = '87px' bgcolor = '#F6AB5A'>&nbsp;</td>
</tr>
<tr>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '533px' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '*' height = '*' bgcolor = '#F6AB5A'>&nbsp;</td>
</tr>
<tr>
<td width = '*' height = '31px' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '533px' height = '31px' bgcolor = '#F6AB5A'>&nbsp;</td>
<td width = '*' height = '31px' bgcolor = '#F6AB5A'>&nbsp;</td>
</tr>


</table>

</body>
</html>

5 - րդ տողը ընդամենը style տէգա, եթե դա նկատի ունի:

Root
04.05.2007, 15:38
Փորցիր մի հատ setcookie("user_cook", $login, $lifetime); հանել ...

Egern.net
04.05.2007, 20:25
Դավիդ ջան, հենց այդ style-ը հերիք է, որ header-ները ուղարկի :)

Եթե ունես Ֆայրֆոքս, կարող ես փորձել. քաշիր LiveHTTPHeaders plugin-ը ու հետևիր. սթայլ տեգից հետո անմիջապես պետք է հետևի text/css Content-Type-ով ինֆորմացիա: Դա արդեն նշանակում է, որ պետք է ուղարկվեն Header-ները:

Ընդհանրապես header-ի սահմանումները պետք է տրվեն մինչև սիմվոլային դատայի ուղարկումը: Եթե նույնիսկ այդ սթայլերը չլինեին, արդեն body-ի "կարդացվելուց" հետո header-ների հետ խնդիրներ կլինեն :)

Հետաքրքիր կլինի, եթե դնես երկրորդ (կարճ) տարբերակի ամբողջական տեսքը, եթե իհարկե գաղտնիք չի...

david
07.05.2007, 08:38
Egern.net ջան կարճ կոդը պարզապես փորձնական կոդ է: Սկզբից իրականացնում եմ փորձնական էջերի վրա հետո արդեն աշխատող էջի վրա:
Egern.net, լավ ինչպես կարելի է իրականացնել այդ կուկիների ջնջելը, ընդ որում ավտոմզտ կերպով: Ես կարող եմ դնել որևէ հղում կամ կոճակ և ձևակերպել այդ ջնջումը, բայց կներես գրեմ ռուսերեն
программу необходимо писать на дурака
այսինքն այն աստիճանի, որ օգտագործողը չի սեղմի այդ կոճակը, պարզապես կմոռանա, որ անհրաժեշտ է սեղմաել այն: Էնպես որ …
Մտածում էի, որ JavaScript - ով զգամ բրոուզերի փակվելը և ջնջեմ: Բայց այդպիսի խնդրի հանդիպել եմ ու դեռ լուծումը չեմ գտել: Բանը նրանումն է, որ այն օգտագործողը(համակարգիչը), որի վրա Windows XP + SP1 - է, այն աշխատում է, իսկ որի վրա SP2 - է բրոուզերի փակվելը չի զգում:

david
07.05.2007, 09:52
Բոլորից շատ ՇՆՈՐՀԱԿԱԼ եմ: Ամեն ինչ լավ է ստացվեց:
session_start(); //open session սեսսիան բացեցի <html> տեգից առաջ, ամենա սկզբւմ:
:hands :hands :hands :hands

Egern.net
07.05.2007, 14:02
Destroying a Session
If you wish to delete some session data, you can use the unset() or the session_destroy() function.

The unset() function is used to free the specified session variable:

<?php
unset($_SESSION['views']);
?>
You can also completely destroy the session by calling the session_destroy() function:

<?php
session_destroy();
?>
Note: session_destroy() will reset your session and you will lose all your stored session data.
http://w3schools.com/php/php_sessions.asp