Стъпка по стъпка?

nom3r1

Registered
Направило ми е впечатление , че при някой регистрации има: Стъпка 1.. Стъпка 2.. Стъпка 3

На какъв принцип работят тези страници? Предполагам информацията се записва в бисквитки/сесии, за да не загубят и накрая да има възможност за редактиране?

Също така, ако не си попълнил първата страница, да не можеш да продължиш.

Аз се сещам за този вариант, които ми се вижда неправилен..

PHP:
<?php
if(isSet($_GET['stage'])) {
	$stage = (int)$_GET['stage'];
} else {
	$stage = 1;
}
if(isSet($_POST['name'], $_POST['surname'], $_POST['name2'], $_POST['surname2'])) {
	$name     = $_POST['name'];
	$surname  = $_POST['surname'];
	$name2    = $_POST['name2'];
	$surname2 = $_POST['surname2'];
} else {
	$name     = "";
	$surname  = "";
	$name2    = "";
	$surname2 = "";
}
if (isSet($_POST['submitStage1']) && $stage == '1') {
	$stage = 2;
	echo "проверка на стъпка 1, прехвърляне към стъпка 2";
}
if (isSet($_POST['submitStage2']) && $stage == '2') {
	$stage = 3;
	echo "проверка на стъпка 2, прехвърляне към стъпка 3";
}
if($stage == 1) {
echo "
<form method=\"post\" action=\"register.php?stage=2\">
Име: <input name=\"name\" type=\"text\" />
Фамилно име: <input name=\"surname\" type=\"text\" />
<input name=\"submitStage1\" type=\"submit\" />
</form>";
} else if ($stage == 2) {
echo "
<form method=\"post\" action=\"register.php?stage=3\">
Име2: <input name=\"name2\" type=\"text\" />
Фамилно име2: <input name=\"surname2\" type=\"text\" />
<input name=\"submitStage2\" type=\"submit\" />
</form>";
} else if ($stage == 3) {
	echo "
	<h1>Първа стъпка</h1>
	Име: {$name}<br />
	Фамилно име: {$surname}<br />
	<h1>Втора стъпка</h1>
	Име: {$name2}<br />
	Фамилно име: {$surname2}<br />";
}
?>
 

vardana

Registered
Ами не направо си се записват в базата данни и после при прегледа ако иска да промени нещо се прави с UPDATE
 

index

Super Moderator
vardana каза:
Ами не направо си се записват в базата данни и после при прегледа ако иска да промени нещо се прави с UPDATE
+
можеш винаги да запишеш в бисквитка нещата.
И една препоръка :
Имаш прекалено if-else.
http://php.net/manual/en/control-structures.switch.php

$is_admin = ($user['permissions'] == 'admin' ? true : false);
:) Ще ти съкрати кода на половина.
Също така switch-case- можеш да го използваш за стъпките.И всяка стъпка да ти е даден метод.

Примерно :
PHP:
switch ($_GET['step']) {
    case 1:
        stepOne();
        break;
    case 2:
        stopTwo();
        break;
}

function stepOne(){
 echo "molq popylnete slednite poleta ";
}
function stepTwo()
{
$postData = $_POST['username....'];
$............ = $_POST['...........'];

}





P.S. ": http://web-tourist.net/login/login/view.php?st=1196 погледни това :)
 

SveXteZ

Registered
А колко информация може да се запази в едно cookie и в една сесия ?
Варианта с ДБ не е лош, но ще има много "изоставени" регистрации и трябва някакъв крон да ги обикаля, а кукито се държи да компютъра, който прави регистрация и няма да е проблем, ако не я завърши ...
Това последното е в случай, че няма кой знае колко инфо в кукито ...
 

nom3r1

Registered
@index , това със swith е вариант като ще вкарам преди него "разрешените" стъпки - 1,2,3 в един масив, за да е по-сигурно. Мислех го, като вариант.

Относно Инсталатор за PHP системата ви. /урока/ не схванах за какво ми е? Какво общо има със стъпките? :)

@SveXteZ, нямам идея колко точно е максимума на символите при бисквитките/сесиите, но мисля че няма да е проблем да се създадат няколко бисквитки вместо една, от която да извличам всичко като масив, след като последната стъпка е завършена ще бъдат унищожени.

Интересно, ще го мисля утре на "трезва" глава както се вика.

П.П. Това със базата данни нещо, не ми харесва. Трябва да пускам cronjob по-точно да го настроя, за да "преглежда" и да изтрива дадена таблица, която ще я ползвам един вид като "КОШЧЕ" за ненужна информация.. Не, не ми харесва. По-добре да го измисл(я)им с бисквитки.
 

nom3r1

Registered
Скалъпих това:

PHP:
<?php
error_reporting(E_ALL);
ini_set("display_errors", true);
if(isSet($_GET['stage'])) { $stage = (int)$_GET['stage']; } else { $stage = 1; }
if(in_array($stage, array('1','2'))) { $stage = $stage; } else { $stage = 1; }
switch($stage){
	case '1';
		if(isSet($_POST['submit'])) {
			if(isSet($_POST['name'], $_POST['title'])) {
				$name = $_POST['name'];
				$title = $_POST['title'];
			} else {
				$name = "";
				$title = "";
			}
			if(!$name || !$title) {
				echo "Попълни полетата";
			} else {
				setcookie('step_session[name]', $name, time()+7200, '/', '.site.com', false, true);
				setcookie('step_session[title]', $title, time()+7200, '/', '.site.com', false, true);
				header("Location: file.php?stage=2");
			}
		} else {
		echo "
		<form method=\"POST\" autocomplete=\"off\">
			Име: <input type=\"text\" name=\"name\" value=\"\" />
			Заглавие: <input type=\"text\" name=\"title\" value=\"\" />
			<input type=\"submit\" name=\"submit\" value=\"Давай!\" />
		</form>";
		}
	break;
	case 2:
		if (isset($_COOKIE['step_session'])) {
			foreach ($_COOKIE['step_session'] AS $name => $value) {
				echo "{$name} : {$value} <br />\n";
			}
		} else {
			header("Location: file.php?stage=1");
		}
	break;
	default:
		header("Location: file.php?stage=1");
	break;
}
?>

В момента, ако си добавиш сам бисквитката проверката, дали първата стъпка е попълнена напълно се обезсмисля. Какъв ще е най-добрия вариант за добавяне на информацията?

Може би да се създаде един вид криптиране/декриптиране на информацията?
 

nom3r1

Registered
Обмислях и подобен вариант.

Прикачвам един архив с пример /от нета го свалих даден е пример с регистрационна система/.

свали

Но все си мисля, че по-сигурния вариант е с PHP.
 

Горе