Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Samovolné odesílání formuláře

Aktivity
Avatar
Libor Sedláček:5.6.2020 14:25

Ahoj, řeším problém který jistě pro borce tady problém není. Podotýkám, že se v PHP moc neorientuji. Na stránce mám formulář s tlačítkem odeslat, který po vyplnění vše odešle správně.
Problém mám v tom, že se odešle sám i prázdný formulář po načtení stránky.

Zkusil jsem: Moc jsem toho nezkusil jelikož nevím kde je chyba.

Chci docílit: Chci dosáhnout toho, aby se informace z formuláře odeslali až po kliknutí na tlačítko a jen pokud bude vyplněný.

HTML
<form id="contact" action="poslat.php" method="post">
<div class="row">
<div class="col-lg-12">
<fieldset>
<img id="logo-form" src="assets/i­mages/logo2d.png" width="130px">
</fieldset>
<fieldset>
</fieldset>
</div>
<div class="col-md-6 col-sm-12">
<fieldset>
<span style="color: #A8A8A8"> <strong>J</stron­g>méno a <strong>P</stron­g>říjmení:</span><b­r>
<input id="name" name="jmeno" type="text" pattern="([^0-9 ]+\s){1}([^0-9 ]+)" placeholder="" required>
</fieldset>
</div>
<div class="col-md-6 col-sm-12">
<fieldset>
<span style="color: #A8A8A8"> <strong>E</stron­g>mail:</span><b­r>
<input name="email" type="text" id="email" title="zadejte platnou emailovou adresu" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$" placeholder="
" equired>
</fieldset>
</div>
<div class="col-md-6 col-sm-12">
<fieldset>
<span style="color: #A8A8A8" ><strong>P</stron­g>ředmět:</span><­br>
<input id="subject" name="subject" type="text" placeholder="ne­povinné pole">
</fieldset>
</div>
<div class="col-md-6 col-sm-12">
<fieldset>
<span style="color: #A8A8A8"> <strong>M</stron­g>obil:</span><­br>
<input id="mobil" title="9 čísel bez mezer" pattern="[0-9]{9}" name="mobil" placeholder="*" type="text" required>
</fieldset>
</div>
<div class="col-md-12">
<fieldset>
<span style="color: #A8A8A8"><str­ong>Z</strong>prá­va:</span><br>
<textarea name="text" accesskey="t" row="20px" cols="20px"></t­extarea>
</fieldset>
</div>
<div class="col-lg-12">
<fieldset>
<button id="form-submit" type="submit" onClick="akce()" class="main-button"><b>Odes­lat</b></button>
</fieldset>
</div>
</div>
</form>

 
Odpovědět
5.6.2020 14:25
Avatar
Libor Sedláček:5.6.2020 15:18

taky bych rád, aby stránka zůstala načtená. Po kliknutí se zobrazí prázdná webová stránka...

 
Nahoru Odpovědět
5.6.2020 15:18
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:8.6.2020 8:05

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'
});
Editováno 8.6.2020 8:07
 
Nahoru Odpovědět
8.6.2020 8:05
Avatar
Odpovídá na Peter Mlich
Libor Sedláček:8.6.2020 13:36

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.

 
Nahoru Odpovědět
8.6.2020 13:36
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:8.6.2020 14:15

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

 
Nahoru Odpovědět
8.6.2020 14:15
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:8.6.2020 14:18

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

 
Nahoru Odpovědět
8.6.2020 14:18
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:8.6.2020 14:23

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>
 
Nahoru Odpovědět
8.6.2020 14:23
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:8.6.2020 14:26

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...}
Editováno 8.6.2020 14:29
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
8.6.2020 14:26
Avatar
Odpovídá na Peter Mlich
Libor Sedláček:8.6.2020 16:23

Děkuji za zprávy,
Pohraju si s tím....

 
Nahoru Odpovědět
8.6.2020 16:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.