Обработка с POST форма
14 отговора
319 прегледа
Обработка с POST форма
Ако това е формата:
[CODE]<form action="$PHPSELF" method="post">
<input name="uname">
<input type="password" name="pass">
<input type="submit" name="send" value="check it!">
</form>[/CODE]
А това е обработакат на данните:
[CODE]if (isset($_POST['uname'])&&isset($_POST['pass'])) {
$newpass=stripslashes($_POST['pass']);
$newpass=md5($newpass);
setcookie("locksmith_user", $_POST['uname'], time()+31536000, "/", ".нещо.си", 0);
setcookie("locksmith_pass", $newpass, time()+31536000, "/", ".нещо.си", 0);
}
if ($logged_in=="1") {
die('Вече си влязъл като, '.$_SESSION['user'].'. Съобщение на login_f');
}
if (isset($_COOKIE['locksmith_user'])&&isset($_COOKIE['locksmith_pass'])) {
session_start();
$check=mysql_query ("
SELECT * FROM `user_reginfo` WHERE `uname` LIKE '".$_COOKIE['locksmith_user']."'
");
$rowp_check=mysql_fetch_array($check);
if($_COOKIE['locksmith_pass']!=$rowp_check['pass']) {
die('Невалидна парола. Моля, влез отново.');
}
$_SESSION['uname']=$_COOKIE['locksmith_user'];
$_SESSION['pass']=$_COOKIE['locksmith_pass'];
mysql_close($check);
die('Здравей отново. Съобщение на login_f');
}
if (isset($_POST['send'])) {
if (!get_magic_quotes_gpc()) {
$_POST['uname']=addslashes($_POST['uname']);
}
$check=mysql_query ("
SELECT * FROM `user_reginfo` WHERE `uname` LIKE '"._POST['uname']."'
");
$rowp_check=mysql_fetch_array($check);
if (mysql_num_rows($check)=="1") {
$_POST['pass']=stripslashes(md5($_POST['pass']));
$rowp_check['pass']=stripslashes($rowp_check['pass']);
if ($_POST['pass']!=$rowp_check['pass']) {
die('Грешна парола!')
} elseif ($_POST['pass']==$rowp_check['pass']) {
$_POST['uname']=stripslashes($_POST['uname']);
$_SESSION['uname']=$_POST['uname'];
$_SESSION['pass']=$_POST['pass'];
}
}
mysql_close($check);
}
[/CODE]
С кое не съм работил както трябва, за да не работят нещата...
[CODE]<form action="$PHPSELF" method="post">
<input name="uname">
<input type="password" name="pass">
<input type="submit" name="send" value="check it!">
</form>[/CODE]
А това е обработакат на данните:
[CODE]if (isset($_POST['uname'])&&isset($_POST['pass'])) {
$newpass=stripslashes($_POST['pass']);
$newpass=md5($newpass);
setcookie("locksmith_user", $_POST['uname'], time()+31536000, "/", ".нещо.си", 0);
setcookie("locksmith_pass", $newpass, time()+31536000, "/", ".нещо.си", 0);
}
if ($logged_in=="1") {
die('Вече си влязъл като, '.$_SESSION['user'].'. Съобщение на login_f');
}
if (isset($_COOKIE['locksmith_user'])&&isset($_COOKIE['locksmith_pass'])) {
session_start();
$check=mysql_query ("
SELECT * FROM `user_reginfo` WHERE `uname` LIKE '".$_COOKIE['locksmith_user']."'
");
$rowp_check=mysql_fetch_array($check);
if($_COOKIE['locksmith_pass']!=$rowp_check['pass']) {
die('Невалидна парола. Моля, влез отново.');
}
$_SESSION['uname']=$_COOKIE['locksmith_user'];
$_SESSION['pass']=$_COOKIE['locksmith_pass'];
mysql_close($check);
die('Здравей отново. Съобщение на login_f');
}
if (isset($_POST['send'])) {
if (!get_magic_quotes_gpc()) {
$_POST['uname']=addslashes($_POST['uname']);
}
$check=mysql_query ("
SELECT * FROM `user_reginfo` WHERE `uname` LIKE '"._POST['uname']."'
");
$rowp_check=mysql_fetch_array($check);
if (mysql_num_rows($check)=="1") {
$_POST['pass']=stripslashes(md5($_POST['pass']));
$rowp_check['pass']=stripslashes($rowp_check['pass']);
if ($_POST['pass']!=$rowp_check['pass']) {
die('Грешна парола!')
} elseif ($_POST['pass']==$rowp_check['pass']) {
$_POST['uname']=stripslashes($_POST['uname']);
$_SESSION['uname']=$_POST['uname'];
$_SESSION['pass']=$_POST['pass'];
}
}
mysql_close($check);
}
[/CODE]
С кое не съм работил както трябва, за да не работят нещата...
Re: Обработка с POST форма
Проблема е в кукито.
Once the cookies have been set, they can be accessed on the next page load with the $_COOKIE
В този скрипт ти сетваш кутито и искаш веднага да го използваш. Няма да стане така. В логин скрипта трябва да работиш само с данните от $_POST масива. Друг е въпроса, че не виждам смисъл още преди да си проверил данните в базата, да сетваш кукита. Пък ти използваш и сесии и кукита.
[линк]
Once the cookies have been set, they can be accessed on the next page load with the $_COOKIE
В този скрипт ти сетваш кутито и искаш веднага да го използваш. Няма да стане така. В логин скрипта трябва да работиш само с данните от $_POST масива. Друг е въпроса, че не виждам смисъл още преди да си проверил данните в базата, да сетваш кукита. Пък ти използваш и сесии и кукита.
[линк]
Re: Обработка с POST форма
Добре, но тогава какво решение предлагаш? Не съм сигурен че те разбрах напълно - мжеш ли да ми дадеш пример как да им разменя местата?
Re: Обработка с POST форма
Като за начало използвай или сесии или кукита САМО.
Имай предвид, че ако ще използваш кукита, трябва да се релоадне страничката.
Другото, което не ми хареса е :
1. if ($logged_in=="1") - от къде иде $logged_in ?
2. ползваш $_SESSION['uname'] и $_SESSION['user'], като поне едно от двете е празно - $_SESSION['user'] не видях да го пълниш никъде
3. SELECT * FROM `user_reginfo` WHERE `uname` LIKE '".$_COOKIE['locksmith_user'] - защо лайк ? Помисли и за SQL Injection
4. Пускаш кукита и стартираш сесията на различни места в скрипта - и двете изискват да няма никакъв аутпут към браузера ... за това много внимателно с това.
5. $check=mysql_query (....) и mysql_close($check) - някакаси е несъвместимо.
може би mysql_free_result или mysql_connect, ако ме разбираш
6. if (!get_magic_quotes_gpc()) {
$_POST['uname']=addslashes($_POST['uname']);
} - Ако условието върне true ? Пак за SQL Injection
7. $_POST['pass']=stripslashes(md5($_POST['pass'])) - тоя stripslashes е излишен - md5 НИКОГА не може да ти върне \ в резултата
За сега толкова на пръв поглед
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Имай предвид, че ако ще използваш кукита, трябва да се релоадне страничката.
Другото, което не ми хареса е :
1. if ($logged_in=="1") - от къде иде $logged_in ?
2. ползваш $_SESSION['uname'] и $_SESSION['user'], като поне едно от двете е празно - $_SESSION['user'] не видях да го пълниш никъде
3. SELECT * FROM `user_reginfo` WHERE `uname` LIKE '".$_COOKIE['locksmith_user'] - защо лайк ? Помисли и за SQL Injection
4. Пускаш кукита и стартираш сесията на различни места в скрипта - и двете изискват да няма никакъв аутпут към браузера ... за това много внимателно с това.
5. $check=mysql_query (....) и mysql_close($check) - някакаси е несъвместимо.
може би mysql_free_result или mysql_connect, ако ме разбираш
6. if (!get_magic_quotes_gpc()) {
$_POST['uname']=addslashes($_POST['uname']);
} - Ако условието върне true ? Пак за SQL Injection
7. $_POST['pass']=stripslashes(md5($_POST['pass'])) - тоя stripslashes е излишен - md5 НИКОГА не може да ти върне \ в резултата
За сега толкова на пръв поглед
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: setcookie
ам, има ли проблем тогава с сетването на бискивтките. т.к. използвам резултата от sql заявка, и останалата част се изпълнява, може ли да е от ['']и как да го избегна (освен да го присвоявам като стойност на друга променлива).
setcookie("id", $rowp_check['id'], time()+60*60*24, "/", "domain.com");
setcookie("uname", $rowp_check['uname'], time()+60*60*24, "/", "domain.com");
setcookie("pass", $rowp_check['pass'], time()+60*60*24, "/", "domain.com");
setcookie("level", $rowp_check['level'], time()+60*60*24, "/", "domain.com");
setcookie("lang", $rowp_check['lang'], time()+60*60*24, "/", "domain.com");
ro6avia
мерси, точно в това празно ЮЗЪР бе порбелма, незнам защо съм го написал така... но защо да не е удобно използавенто на сесии и бисквитки едновременно- не е ли по-сигурно? /съжарявам ако бъркам, в общи линии сега тепърва навлизам по-стабилно в РНР и имам някои странни може би за другите виждания кое как да работи :)/
setcookie("id", $rowp_check['id'], time()+60*60*24, "/", "domain.com");
setcookie("uname", $rowp_check['uname'], time()+60*60*24, "/", "domain.com");
setcookie("pass", $rowp_check['pass'], time()+60*60*24, "/", "domain.com");
setcookie("level", $rowp_check['level'], time()+60*60*24, "/", "domain.com");
setcookie("lang", $rowp_check['lang'], time()+60*60*24, "/", "domain.com");
ro6avia
мерси, точно в това празно ЮЗЪР бе порбелма, незнам защо съм го написал така... но защо да не е удобно използавенто на сесии и бисквитки едновременно- не е ли по-сигурно? /съжарявам ако бъркам, в общи линии сега тепърва навлизам по-стабилно в РНР и имам някои странни може би за другите виждания кое как да работи :)/
Re: setcookie
трябва да тримнеш, после да регекспеш и чак слетова да се обърнеш към ДБ.
в куки запаметявай нещо различно от това като усернейма и паса, например те да са обърнати + разменени с места + комбинирани на по части и след това няколко пъти хешнати и мд5-нати с добавка низа от определени символи от резултата, същия алгоритъм да приложиш и върху селекта от ДБ.
-
The night rolls on like slow moving train,
and soul cries out for a handful of rain.
в куки запаметявай нещо различно от това като усернейма и паса, например те да са обърнати + разменени с места + комбинирани на по части и след това няколко пъти хешнати и мд5-нати с добавка низа от определени символи от резултата, същия алгоритъм да приложиш и върху селекта от ДБ.
-
The night rolls on like slow moving train,
and soul cries out for a handful of rain.
Re: setcookie
Вълк
това го направих вече :)... то си е наред, но каква е ползата, когато поради някаква причина не се записва в кукито...?. ако успея да го запиша, после кодирането му не е проблем
това го направих вече :)... то си е наред, но каква е ползата, когато поради някаква причина не се записва в кукито...?. ако успея да го запиша, после кодирането му не е проблем
Re: setcookie
а ти къде се опитваш да го проверяваш?
-
The night rolls on like slow moving train,
and soul cries out for a handful of rain.
-
The night rolls on like slow moving train,
and soul cries out for a handful of rain.
Re: setcookie
няма значение къде е, т.к сега го пробвах и с предваритлено задани стойности.
просто не се сетва и това е. не откривам проблема обаче - пуснах и го през ЗЕНД студиото и през РНРЕД-а - и за двата всичко си е нормално, а и на мен така ми изглежда... само дето оставам без бисквитка. как да я сетна най-накрая?
setcookie('id', $rowp_check['id'], 60*60*24, '/', '.m-b0x.com', 0);
setcookie('uname', $rowp_check['uname'], 60*60*24, '/', '.m-b0x.com', 0);
setcookie('pass', $rowp_check['pass'], 60*60*24, '/', '.m-b0x.com', 0);
setcookie('level', $rowp_check['level'], 60*60*24, '/', '.m-b0x.com', 0);
setcookie('lang', $rowp_check['lang'], 60*60*24, '/', '.m-b0x.com', 0);
просто не се сетва и това е. не откривам проблема обаче - пуснах и го през ЗЕНД студиото и през РНРЕД-а - и за двата всичко си е нормално, а и на мен така ми изглежда... само дето оставам без бисквитка. как да я сетна най-накрая?
Re: setcookie
След тия сеткуки-та направи
HEADER("Location: ".$_SERVER['PHP_SELF']);
и ще си ги имаш всички
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
HEADER("Location: ".$_SERVER['PHP_SELF']);
и ще си ги имаш всички
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: setcookie
по твоя перпоръка го направих така:
резлутата е че все още няма куки :/. останалата част на elseif-a се изпълнява, самото куки обаче не. имаш ли идея какви ситуации биха могли да спрат сетването му? (файла е include в друг който обхваща хедъра и футъра на страницата, това би ли било проблем?)
if ($_POST['pass']!=$rowp_check['pass']) {
$analyse=$html_my_title1_f1;
$status=$html_my_title1_f4;
$description=$html_my_title1_f5;
include "$phppath/include/mcontent_analyse.php";
include "$phppath/include/rtable_global.php";
include "$phppath/include/footer_global.php";
exit;
} elseif ($_POST['pass']==$rowp_check['pass']) {
setcookie('id', $rowp_check['id'], 60*60*24, '/', '.m-b0x.com', 0);
setcookie('uname', $rowp_check['uname'], 60*60*24, '/', '.m-b0x.com', 0);
setcookie('pass', $rowp_check['pass'], 60*60*24, '/', '.m-b0x.com', 0);
setcookie('level', $rowp_check['level'], 60*60*24, '/', '.m-b0x.com', 0);
setcookie('lang', $rowp_check['lang'], 60*60*24, '/', '.m-b0x.com', 0);
HEADER("Location: ".$_SERVER['PHP_SELF']);
$progress="1";
$analyse=$html_my_title1_f1;
$status=$html_my_title1_f2;
$description=$html_my_title1_f3;
include "$phppath/include/mcontent_analyse.php";
include "$phppath/include/rtable_global.php";
include "$phppath/include/footer_global.php";
exit;
}
резлутата е че все още няма куки :/. останалата част на elseif-a се изпълнява, самото куки обаче не. имаш ли идея какви ситуации биха могли да спрат сетването му? (файла е include в друг който обхваща хедъра и футъра на страницата, това би ли било проблем?)
Re: Обработка с POST форма
men vuobshte cialata gimnastika ne mi haresva i shte vi kaza zashto ,
dokato ne izleze edinno pokolenie browseri deto da se durzat normalno i po ednakuv nachin sus vsichki cookieta az lichno gledam da ne gi polzvam .
zashtoto druze prosot niamash na ideia che tova ako sraboti s IE5 primerno niama da raboti s ns4.7 ili s firefox ili obratnoto i si suzdaavash zverski glavobolia ,
taka i taka imash sessions i db , shto da ne si pravish sichko s tiah ?
dostatuchno metodi ima i za logvane i za securevane i za checkvane na koi koga i kolko puti e vlizal samo s tezi dva instrumenta
dokato ne izleze edinno pokolenie browseri deto da se durzat normalno i po ednakuv nachin sus vsichki cookieta az lichno gledam da ne gi polzvam .
zashtoto druze prosot niamash na ideia che tova ako sraboti s IE5 primerno niama da raboti s ns4.7 ili s firefox ili obratnoto i si suzdaavash zverski glavobolia ,
taka i taka imash sessions i db , shto da ne si pravish sichko s tiah ?
dostatuchno metodi ima i za logvane i za securevane i za checkvane na koi koga i kolko puti e vlizal samo s tezi dva instrumenta
Re: Обработка с POST форма
Аз съм на същото мнение. Кукитата и сесийте са като велосипеда и автомобила - вършат една и съща работа, но пък да ги използваш едновременно...
Re: setcookie
Логично ....
след като си подал хедър за какво са другите инклуди ????
хедъра ще накара браузера да отвори друга страница (или същата)
Дай го :
if (!isset($_COOKIES['uname'])){
// tuka tvoia kod za proverka i setvane kato sled HEADER("Location :") vednaga die();
}else{
progress="1";
$analyse=$html_my_title1_f1;
....
include "$phppath/include/footer_global.php";
exit;
}
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
след като си подал хедър за какво са другите инклуди ????
хедъра ще накара браузера да отвори друга страница (или същата)
Дай го :
if (!isset($_COOKIES['uname'])){
// tuka tvoia kod za proverka i setvane kato sled HEADER("Location :") vednaga die();
}else{
progress="1";
$analyse=$html_my_title1_f1;
....
include "$phppath/include/footer_global.php";
exit;
}
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: setcookie
целта е просот да има някакви кукита... такива няма! няма никав файда от хедъраи другите инклудита когато изобщо не се сетва куки. а защо немога да ти каж, т.к. никъде не откривам грешка