Դաս 87.2 – PHP: Survey code

0

process.php էջ

Process էջը կիրառվում է հարցման մեջ օգտատիրոջ կողմից  կատարված ընտրության մշակման համար: Այդ ընտրությունն ավելանում է հարցման դատաբազայի աղյուսակի մեջ և հենց որ ընտրությունը կատարվում է արտացոլվում է համապատասխան հաղորդագրություն: Այդ ամենը անելու համար անհրաժեշտ է երկու բան survey.php էջից՝ կատարված ընտրությունը:

row ID-ն պարունակվում է հարցման էջի $qID  փոփոխականի մեջ: Մենք տեղադրել ենք այն HIDDEN HTML tag-ում՝

<INPUT TYPE = “Hidden” Name = “h1” VALUE = <?PHP print $qID; ?>>

process էջում մենք կարող ենք օգտագործել GET  ID-ն ստանալու համար միայն NAME արժեքի օգնությամբ, որը  h1 է: Երբ RADIO button-ը սեղմված է Դուք կարող եք ստանալ նաև NAME value-ն: Յուրաքանչյուր RADIO button ունի  ‘q’ անվանումը՝

<INPUT TYPE = ‘Radio’ Name =’q’ value= ‘A’ <?PHP print $answerA; ?>><?PHP print $A; ?>
<INPUT TYPE = ‘Radio’ Name =’q’ value= ‘B’ <?PHP print $answerB; ?>><?PHP print $B; ?>
<INPUT TYPE = ‘Radio’ Name =’q’ value= ‘C’ <?PHP print $answerC; ?>><?PHP print $C; ?>

Եթե կիրառում եք  $_GET[‘q’], ապա կարող եք ստանալ VALUE, որոնք մենք ունենք որպես A, B կամ C վերոնշյալ կոդում: Ահա  in the code above. Ահա process.php էջի ամբողջական կոդը՝

<?PHP
require '../../configure.php';

$voteMessage = "";
session_start();
if ((isset($_SESSION['hasVoted']))) {
	if ($_SESSION['hasVoted'] = '1') {
		$voteMessage = "You've already voted";
	}
}
else {
	if (isset($_GET['Submit1']) && isset($_GET['q'])) {
		$selected_radio = $_GET['q'];
		$idNumber = $_GET['h1'];

		$database = "survey";
		$db_found = new mysqli(DB_SERVER, DB_USER, DB_PASS, $database );
		if ($db_found) {
			if($selected_radio == "A") {
				$votedSQL = "UPDATE tblsurvey SET VotedA = VotedA + 1 WHERE ID = ?";
				$voteMessage = insert_vote($db_found, $votedSQL, $idNumber);
			}
			else if($selected_radio == "B"){
				$votedSQL = "UPDATE tblsurvey SET VotedB = VotedB + 1 WHERE ID = ?";
				$voteMessage = insert_vote($db_found, $votedSQL, $idNumber);
			}
			else if($selected_radio == "C"){
				$votedSQL = "UPDATE tblsurvey SET VotedC = VotedC + 1 WHERE ID = ?";
				$voteMessage = insert_vote($db_found, $votedSQL, $idNumber);
			}
			else {
				print "Error - could not record vote";
			}	
		}
	}
	else {
		print "You didn't select a voting option!";
	}
}

function insert_vote($db, $sql, $id) {

	$stmt = $db->prepare($sql);
	$stmt->bind_param('i', $id);
	$stmt->execute();

	//$_SESSION['hasVoted'] = '1';
	return "Thanks for voting!";
}
?>

<html>
<head>
<title>Process Survey</title>
</head>
<body>
<?PHP print $voteMessage . "<BR>"; ?>
</body>
</html>

 Այս կոդը փորձարկելիս տեղադրեք հետևյալ տողը՝

$_SESSION[‘hasVoted’] = ‘1’;

Սարքենք մեկնաբանույթուն այս տողը, հակառակ դեպքում կստանաք “You’ve already voted” (Դուք արդեն քվեարկել եք) հաղորդագրություն, երբ փորձեք դատաբազայում նոր քվե ավելացնել: Ձեզ անգամ պետք կլինի փակել-բացել browser-ը կախված Ձեր cookie-ներից: Չմոռանա՛ք մեկնաբանությունից անել տողը, եթե այն գնալու է Ձեր  կայք: Սակայն դա այդտեղ է որպեսզի սահմանի session փոփոխական  hasVoted անվանումով: Մենք կարող ենք ստուգել դա կոդի վերևի մասում՝

session_start();

if ((isset($_SESSION[‘hasVoted’]))) {

if ($_SESSION[‘hasVoted’] = ‘1’) {

$voteMessage = “You’ve already voted”;

}

}

Սա ստուգում է արդյոք hasVoted անվանումով session-ը սահմանվե՞լ է: Այնուհետև մենք ստուգում ենք արդյոք hasVoted session-ը հաստատված է 1 արժեքով: Եթե երկու պայմաններն էլ բավարարված են, նշանակում է, որ օգտատերը քվեարկել է:

Իսկ եթե չի քվեարկել, ապա հայտարարության else մասնիկը իրականացվում է: Սկզբում կոդի այս մասնիկն է՝

if (isset($_GET[‘Submit1’]) && isset($_GET[‘q’])) {

$selected_radio = $_GET[‘q’];
$idNumber = $_GET[‘h1’];

Սա ստուգում է արդյոք նախորդ էջում Submit կոճակը սեղմվա՞ծ է: Նաև ստուգում է արդյոք սահմանվա՞ծ է q  փոփոխականը: Այն կրում է RADIO button-ների արժեքը: Այսինքն, կլինի A, B, կամ C կախված կատարված ընտրությունից:

Եթե երկու պայմաններն էլ ճիշտ են, մենք կարող ենք առաջ գնալ և տեղադրել արժեքները փոփոխականների մեջ՝

$selected_radio = $_GET[‘q’];
$idNumber = $_GET[‘h1’];

$selected_radio փոփոխականը կկրի A, B կամ C տարբերակները: $idNumber փոփոխականը կկրի   դատաբազայի աղյուսակի row ID –ն:

Կոդի հաջորդ մասը կապում է սերվերն ու դատաբազան, որտեղ մենք ստեղծում ենք նոր mysqli օբյեկտ  (Դուք արդեն հանդիպել եք այսպիսի կոդի):

$db_found = new mysqli(DB_SERVER, DB_USER, DB_PASS, $database );

Այնուհետև մենք ունենք if statement, որը ստուգում է արդյոք դատաբազայի օբյեկտը վավերական է, թե ոչ:

if ($db_found) {

}

Եթե դատաբազան և սերվերը գտնված են, մենք պետք է ստուգենք նշված RADIO button-ը, որը կրում է A, B կամ C արժեքը՝

if($selected_radio == “A”) {
}
else if($selected_radio == “B”) {
}
else if($selected_radio == “C”) {
}
else {

print “Error – could not record vote”;

}

եթե $selected_radio  A-ն B-ն կամ C-ն չէ, ապա մենք արտատպում ենք հայտարարություն՝ Error – չենք կարող գրանցել քվեն:

if … elseif … statement-ների կոդը սկզվում կառուցում է prepared statement՝

$votedSQL = “UPDATE tblsurvey SET VotedA = VotedA + 1 WHERE ID = ?”;

Մենք ցանկանում ենք աղյուսակը  UPDATE անել և սահմանել նոր արժեք: Տեսե՛ք այս մասը՝

VotedA = VotedA + 1

Աղյուսակի votedA տողը կլինի 1 այս կոդով: with this code. Վերջում գտնվող WHERE մասը աղյուսակի ճիշտ շարքը ID արժեքի հետ համապատասխանեցնելու համար է:

 SQL-ը պատրաստելու, bind անելու և իրականացնելու համար մենք ունենք այս տողը՝

$voteMessage = insert_vote($db_found, $votedSQL, $idNumber);

Սա կանչում է ստորև ներկայացված ֆունկցիան ՝

function insert_vote($db, $sql, $id) {

$stmt = $db->prepare($sql);
$stmt->bind_param(‘i’, $id);
$stmt->execute();

//$_SESSION[‘hasVoted’] = ‘1’;

return “Thanks for voting!”;

}

Մենք փոխանցում ենք ֆունկցիային երեք  բան՝ դատաբազայի օբյեկտը ($db) և SQL-ը, որը ցանկանում ենք կիրառել ու ID համարը: Սրանք օգտագործվում են առաջին երկու տողերում՝

$stmt = $db->prepare($sql);
$stmt->bind_param(‘i’, $id);

Bind-ի պարամետրերն են i և $id:  i-ը integer-ի համար է և  $id փոփոխականը կրում surveytable-ի row ID-ն:

prepared statement-ը իրականցնելուց հետո մենք սահմանում ենք session՝

$_SESSION[‘hasVoted’] = ‘1’;

Սա տեղադրում է արժեք 1 hasVoted կոչվող session-ում: Երբ մենք որևէ բան ենք տեղադրում session փոփոխականի մեջ, դա նշանակում է, որ օգտատերը չի կարող կրկին քվեարկել, քանի որ նա կստանա հաղորդագրություն՝ “Already voted” (արդեն քվեարկել եք)

Վերջին բանը, որ անում ենք ֆունկցիայ հետ հաղորդագրության վերադարձն է՝

return “Thanks for voting!”;

Այսքանը process.php էջի մասին: Կոդի ամբողջ իմաստը դատաբազայում քվեն գրանցելն է և օգտատերերին կրկնակի քվեարկելուց զերծ պահելը:

Հաջորդ դասին մենք կանդրադառնանք viewResults.php կոդին:

Հարգելի ընթերցող, խնդրում ենք չմոռանալ like տալ մեր ֆեյսբուքյան էջին, քանի որ նորությունների մեծ մասը առաջինը տեղադրվում է հենց այնտեղ։ Ինչպես նաև հետևեք մեզ այլ սոցիալական ցանցերում և, իհարկե, գրանցվեք մեր բլոգում։

Share.