-
Notifications
You must be signed in to change notification settings - Fork 34
/
04-validace-inputy.php
117 lines (108 loc) · 4.55 KB
/
04-validace-inputy.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
$chyby=[];//pracovní proměnná, do které budeme shromažďovat info o chybách
if (!empty($_POST) && (@$_POST['akce']=='odeslano')){
//byl odeslán formulář, provedeme jeho kontrolu
$_POST['jmeno']=trim(@$_POST['jmeno']);
if (!preg_match("/^[a-zA-Z -.]{2,}$/",$_POST['jmeno'])){//preg_match kontroluje pomocí regulárního výrazu
$chyby['jmeno']='Je nutné zadat jméno! Jméno může obsahovat jen písmena, mezeru a pomlčku a mít délku min. 2 znaky.';
}
$_POST['prijmeni']=trim(@$_POST['prijmeni']);
if (!preg_match("/^[a-zA-Z -.]{2,}$/",$_POST['prijmeni'])){
$chyby['prijmeni']='Je nutné zadat příjmení! Jméno může obsahovat jen písmena, mezeru a pomlčku a mít délku min. 2 znaky.';
}
$_POST['email']=trim(@$_POST['email']);
$_POST['phone']=str_replace([' ','-','/'],'',trim($_POST['phone']));
if ($_POST['email']!='' && !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)){//filter_var umožňuje jednoduchou kontrolu základních typů dat (čísla, mail, url atp.)
$chyby['email']='Zadaný e-mail není platný!';
}elseif ($_POST['phone']!='' && !preg_match("/^\+420[0-9]{9}$/",$_POST['phone'])){
$chyby['phone']='Zadaný telefon není platný!';
}elseif($_POST['email']=='' && $_POST['phone']==''){
$chyby['email']='Je nutné zadat telefon či e-mail!';
}
if (!in_array($_POST['phone-os'],['android','ios','windows'])){
//u výběrů je vhodné kontrolovat nejen prázdnost, ale to, zda je hodnota opravdu z cílové množiny
$chyby['phone-os']='Je nutné vybrat operační systém telefonu!';
}
if (empty($chyby)){
//pokud nebyly nalezeny chyby, tak uložíme získaná data a provedeme redirect
file_put_contents('data.txt', $_POST['jmeno'].';'.$_POST['prijmeni'].';'.$_POST['email'].';'.$_POST['email'].';'.$_POST['phone-os']."\n",FILE_APPEND);
header('Location: 04-validace-inputy.php?saved=ok');
exit();
}
}
/**
* Funkce pro jednoduché vypsání chyby
* @param array $chyby
* @param string $id
*/
function vypisChyby(array $chyby, $id){
if (!empty($chyby[$id])){
echo '<div style="color:red;">'.$chyby[$id].'</div>';
}
}
?><!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/html">
<head>
<title>Ukázka HTML validace</title>
<meta charset="UTF-8"/>
<meta http-equiv=X-UA-Compatible content="IE=edge" />
</head>
<body>
<h1>Ukázka formuláře s validací 2</h1>
<?php
if (!empty($_GET['saved']) && ($_GET['saved']=='ok')){
echo '<p><em>Data byla uložena.</em></p>';
}
?>
<form method="post" action="04-validace-inputy.php">
<input type="hidden" name="akce" value="odeslano"/>
<table>
<tr>
<td><label for="jmeno">Jméno</label></td>
<td>
<input type="text" name="jmeno" id="jmeno" value="<?php echo htmlspecialchars(@$_POST['prijmeni']);?>" required />
<?php vypisChyby($chyby,'jmeno');?>
</td>
</tr>
<tr>
<td><label for="prijmeni">Příjmení</label></td>
<td>
<input type="text" name="prijmeni" id="prijmeni" value="<?php echo htmlspecialchars(@$_POST['prijmeni']);?>" required />
<?php vypisChyby($chyby,'prijmeni');?>
</td>
</tr>
<tr>
<td><label for="email">E-mail</label></td>
<td>
<input type="email" name="email" id="email" value="<?php echo htmlspecialchars(@$_POST['email']);?>" />
<?php vypisChyby($chyby,'email');?>
</td>
</tr>
<tr>
<td><label for="phone">Telefon</label></td>
<td>
<input type="tel" name="phone" id="phone" value="<?php echo htmlspecialchars(@$_POST['phone']);?>" />
<?php vypisChyby($chyby,'phone');?>
</td>
</tr>
<tr>
<td><label for="phone-os">Telefon - OS</label></td>
<td>
<select name="phone-os" id="phone-os">
<option value="">--vyberte</option>
<option value="android" <?php echo(@$_POST['phone-os']=='android'?'selected="selected"':'');?>>android</option>
<option value="ios" <?php echo(@$_POST['phone-os']=='ios'?'selected="selected"':'');?>>ios</option>
<option value="windows" <?php echo(@$_POST['phone-os']=='windows'?'selected="selected"':'');?>>windows</option>
</select>
<?php vypisChyby($chyby,'phone-os');?>
</td>
</tr>
<tr>
<td>
<input type="submit" value="odeslat..." />
</td>
</tr>
</table>
</form>
</body>
</html>