Diskuze: Samovolné odesílání formuláře
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
taky bych rád, aby stránka zůstala načtená. Po kliknutí se zobrazí prázdná webová stránka...
1. Formular je mozne zachytit na stagu form pomoci js pomoci udalosti onsubmit.
<form onsubmit="return funkceZkontroluj(this);">
Funkce musi vratit true pro odeslani nebo false pro zastaveni odesilani.
2. Pokud nekdo obchazi js, pak jej muzes zastavit v php, zkontrolujes, zda jsou vyplnene udaje a pokud je neco satne, vratis udaje zpet, vygenerujes novy formular a chybovou hlasku.
<?php
$val = isset($_GET['val']) ? $_GET['val'] : '';
$val = trim($val);
$error_list= array();
if ($val=='') {$error_list[] = 'chyba';}
if (count($error_list)==0) { odesliDoDb(); location('jina stranka'); }
// pokud to presmeruje, tak se dalsi kod nezpracovava, pokud ne, vypise se formular
$error_list= implode('<br>', $error_list);
$str = <<<EOF
$error_list
<form ...>
<input name=val value="$val">
</form>
EOF;
3. Pokud chces odesilat formular na pozadi, nesmazat stranku, dela se to pres
js ajax (httprequest, jquery ajax). To v podstate funguje tak, jako bys do
stranky pridal tag <script src="stranka.php"> a pres php vygenerujes js
kod + header javascript/text (pripade ajaxu pomoci tagu script). Ale, pokud ti
hacker obchazi js, mel bys to mit osetrene i v php kode. Ajax, pokud nereknes
jinak, funguje asynchronne. Cili, stahuje data na pozadi a az skonci, aktivuje
funkci. Takze mu musis pridat navratovou funkci, success: function(data)
Hledej priklady googlem nebo na forku.
goole = js ajax
goole = js jquery ajax example
https://www.sitepoint.com/…context-api/
$.ajax({
url: 'http://api.joind.in/v2.1/talks/10889',
data: {
format: 'json'
},
error: function() {
$('#info').html('<p>An error has occurred</p>');
},
dataType: 'jsonp',
success: function(data) {
var $title = $('<h1>').text(data.talks[0].talk_title);
var $description = $('<p>').text(data.talks[0].talk_description);
$('#info')
.append($title)
.append($description);
},
type: 'GET'
});
Děkuji za odpověď, nicméně je tohle nad mé chápání, takže to zadám
nějakému odborníkovi.
Zbytečně se s tím morduji a nechce se mě zkoušet metodu pokus / omyl.
Hele, jestli jde o to odeslani pri nacteni stranky, tak to se resi
presmerovanim pres location. Cili, strank s formularem, smeruje na jinou stranku
(nebo stejnou, nevim, jak mas php kod) a ta pri uspesnem ulozeni presmeruje na
dalsi jinou. Pri neuspesnem se vrati zpet.
Jeste je mozne, ze mas spatne udelanou kontrolu na strane php nebo na strane
javascriptu a ta ti dovoli ulozit php formular. To tezko rici, kdyz si nechas
php kod pro sebe.
google = location php form submit
Aha, ja si nevsim, v priloze mas obrazek s php kodem. To jako proc neni ve
zprave?
V tom kodu nemas zadnou kontrolu.
google = php form validate example
https://www.tutorialspoint.com/…_example.htm
https://www.javatpoint.com/…ation-in-php
https://www.formget.com/…n-using-php/
<?php
// Initialize variables to null.
$nameError ="";
$emailError ="";
$genderError ="";
$websiteError ="";
// On submitting form below function will execute.
if(isset($_POST['submit'])){
if (empty($_POST["name"])) {
$nameError = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameError = "Only letters and white space allowed";
}
}
if (empty($_POST["email"])) {
$emailError = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid or not
if (!preg_match("/([w-]+@[w-]+.[w-]+)/",$email)) {
$emailError = "Invalid email format";
}
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
// check address syntax is valid or not(this regular expression also allows dashes in the URL)
if (!preg_match("/b(?:(?:https?|ftp)://|www.)[-a-z0-9+&[me|]!:,.;]*[-a-z0-9+&[/me|]#/%=~_|]/i",$website)) {
$websiteError = "Invalid URL";
}
}
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
if (empty($_POST["gender"])) {
$genderError = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
//php code ends here
?>
<!DOCTYPE html>
<html>
<head>
<title>Form Validation with PHP - Demo Preview</title>
<meta content="noindex, nofollow" name="robots">
<link href="style.css" rel="stylesheet">
</head>
<body>
<div class="maindiv">
<div class="form_div">
<div class="title">
<h2>Form Validation with PHP.</h2>
</div>
<form action="validation.php" method="post">
<h2>Form</h2>
<span class="error">* required field.</span>
Name:
<input class="input" name="name" type="text" value="">
<span class="error">* <?php echo $nameError;?></span>
E-mail:
<input class="input" name="email" type="text" value="">
<span class="error">* <?php echo $emailError;?></span>
Gender:
<input class="radio" name="gender" type="radio" value="female">Female
<input class="radio" name="gender" type="radio" value="male">Male
<span class="error">*<?php echo $genderError;?></span>
Website:
<input class="input" name="website" type="text" value="">
<span class="error"><?php echo $websiteError;?></span>
Comment:
<textarea cols="40" name="comment" rows="5">
</textarea>
<input class="submit" name="submit" type="submit" value="Submit">
</form>
</div>
</body>
</html>
https://www.webcodegeeks.com/…ion-example/
<?php
$name =""; // Sender Name
$email =""; // Sender's email ID
$message =""; // Sender's Message
$nameError ="";
$emailError ="";
$messageError ="";
$fileError ="";
$successMessage =""; // On submitting form below function will execute.
if ( isset ( $_POST['submit'] ) ) { // Checking null values in message.
if ( empty ( $_POST["name"] ) ) {
$nameError = "Name is required";
}
if ( empty ( $_POST["email"] ) ) {
$emailError = "Email is required";
}
if (!isset ( $_POST["technologies"] ) ) {
$technologiesError = "Select one technology";
}
if ( empty ( $_POST["message"] ) ) {
$messageError = "Message is required";
}
if ( !$_FILES['resume']['name'] ) {
$fileError = "File is required";
}
}
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" enctype="multipart/form-data">
<label>Name :</label>
<input class="input" type="text" name="name" value="">
<div class="error"><?php echo $nameError;?></div>
<label>Email :</label>
<input class="input" type="text" name="email" value="">
<div class="error"><?php echo $emailError;?></div>
<label>Technologies :</label>
<div>
<input type="radio" name="technologies" value="PHP"> PHP
<input type="radio" name="technologies" value="HTML"> HTML
<input type="radio" name="technologies" value="PYTHON"> Python
</div>
<div class="error"><?php echo $technologiesError;?></div>
<label>Message :</label>
<textarea name="message" val=""></textarea>
<div class="error"><?php echo $messageError;?></div>
<label>Resume :</label>
<input class="input" type="file" name="resume">
<div class="error"><?php echo $fileError;?></div>
<input class="submit" type="submit" name="submit" value="Submit">
<div class="success"><?php echo $successMessage;?></div>
</form>
A doplnil bych rtam toto:
if (
$nameError =="" &&
$emailError =="" &&
$messageError =="" &&
$fileError ==""
) {mail...}
Zobrazeno 9 zpráv z 9.