Autor Zpráva
Jiko
Profil *
Zdravím,
chtěl jsem se zeptat mám formulář, když člověk výpíše třeba email špatně a vrátí se zpět na formulář všechny hodnoty se smažou.
Hledal jsem na internetu řešení, ale našel jsem jedině nějaké šílené a dlouhé řešení, které stejně nefungovalo.

Můj kod:

<link rel="stylesheet" href="style.css">
<div class="registrace">
<fieldset>
<legend>Registrace</legend>

<form action="registrace_zpracuj.php" method="post">
<label for="jmeno">Jméno:</label><input id="jmeno" name="jmeno" type="text" value="<?php (isset($_POST["jmeno"]) ? default_value( $_POST['jmeno'] ) : NULL ); ?>"><br>
<label for="email">Email:</label><input id="email" name="email" type="text"><br>
<label for="heslo">Heslo:</label><input id="heslo" name="heslo" type="password"><br>
<label for="oheslo">Znovu heslo:</label><input id="oheslo" name="oheslo" type="password"><br>

<input style="margin: 0.5em 0 0 8em;" type="submit" name="submit" value="Registrovat se"><br>

</form>

</fieldset>
</div>

<a href="./index.php">Zpět</a>

Akacko
Profil
Jiko:
Napiš co ti nefunguje, popř. co chceš aby tvůj kód dělal.
A když uvádíš část kódu tak uveď i definice funkci v něm uvedených.
fikus
Profil *
Jiko:
fakt by to chtělo víc údajů, ale napadá mě: tohle co si použil počítá s tím, že to zpracováváš v rámci jednoho skriptu, jinak se na $_POST nemůžeš odvolávat. Ten kód, který si sem vložil je tedy taky z "registrace_zpracuj.php" nebo to posíláš z jiné stránky?
AM_
Profil
to, co máš u jména, není úplně špatně - jen to default_value je tam trochu navíc a není to ošetřené, já bych to udělal takhle:
<input id="jmeno" name="jmeno" type="text" value="<?php echo isset($_POST["jmeno"]) ? htmlspecialchars($_POST['jmeno']) : ''; ?>">

uděláš to u všech polí a máš to.
"jednoduše" to bohužel nejde, leda bys formulářová pole generoval nějak dynamicky, ale to při takto malém formuláři by bylo mnohem pracnější, než rozkopírovat tento kód.

//edit: předpokládá to, že stále existují postdata, čili že ten formulář zpracovává sám sebe. Zjednodušíš si život, když ošetření toho formuláře nacpeš do stejného souboru jako PHP kód před ten formulář, takže vše bude v jednom souboru např. registrace.php. Pokud je registrace úspěšná, přestaneš stránku zpracovávat a přesměruješ se třeba na registrace_uspech.php, v opačném případě jí necháš doběhnout, třeba ještě vypíšeš nějakou chybu a zobrazí se ti žádaný formulář s vyplněnými daty.
Alphard
Profil
Myslím, že cílem je zachovat vyplněné údaje ve formuláři.

Jiko:
Co třeba session? Při odeslání formuláře uložte hodnoty do session a při jeho výpisu kontrolujte, jestli tam je něco nastavené.

[#4]
Nejsem si jist, jestli je POST na dané stránce k dispozici.
Jiko
Profil *
Zdravím,
potřeboval bych to pro daný příklad vím, že je lepší nebo snadnější to udělat ve stejné stránce.

Ještě tedy posílam kod stránky registrace_zpracuj.php

<?php
@include "./connect.php";

if (isset($_POST['submit'])) {
$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$heslo = $_POST['heslo'];
$oheslo = $_POST['oheslo'];
$opravneni = "0";
$md5_heslo = md5($heslo);

$kemail = "^[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+@[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+\.[a-z]{2,3}$";

if (!(EregI($kemail, $email) && !EregI("\.{2,}", $email) && !EregI("_{2,}", $email) && !EregI("-{2,}", $email))){ die("Email neni korektně zadán!". "<br>". '<a href="registrace.php">Zpět na Registraci</a>'); }


if ($jmeno == "") { echo "Přihlašovací jméno nebylo vyplněno!"."<br>"; }
else if ($email == "") { echo "Email nebyl vyplněn!"."<br>"; }
else if ($heslo == "") { echo "Heslo nebylo vyplněno!"."<br>"; }
else if ($heslo!=$oheslo) { echo "Ověření hesla je nesprávné!"; }
else { 
$sql = mysql_query("INSERT INTO uzivatele VALUES ('','$jmeno','$md5_heslo','$email','$opravneni')")  or die(mysql_error());

echo "Registrace proběhla úspěšně.". "<br>";
echo '<a href="./index.php">Zpět na přihlášení</a>';
  
}
}

?>

AM_
Profil
Jiko:
@include "./connect.php";
proč je tam ten zavináč? jediné rozumné vysvětlení je past sám na sebe, až si omylem smažeš connect.php, nebudeš vědět, proč ti to nefunguje :)
-jinak vše bylo řečeno, buď si v případě chyby formulářové hodnoty v registrace_zpracuj.php ulož do SESSION, nebo je předej v URL zpět index.php.
-Pro uživatele by také bylo pohodlnější, kdyby se mu u chyba zobrazila rovnou na formuláři, ne aby musel zase na něco klikat, aby se dostal zpátky.
-do třetice, POSIXové funkce Ereg(i) jsou zavržené, mají méně možností a chovají se někdy podivně, používej perl-kompatibilní preg_.
Jinak ta podmínka je šílená ty všechny negace přes sebe :) a nevím, proč by validní e-mail neměl obsahovat více teček, pomlček či podtržítek za sebou - pokud na tom ale trváš, napiš to aspoň do jednoho výrazu a ne do pěti :)
Jiko
Profil *
AM:
<?php echo isset($_POST["jmeno"]) ? htmlspecialchars($_POST['jmeno']) : ''; ?>

Tak jsem vše přesunul, na jednu stránku a stále to nefunguje hodnotu si to nezapamatuje.

<?php
include "./connect.php";

if (isset($_POST['submit'])) {
$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$heslo = $_POST['heslo'];
$oheslo = $_POST['oheslo'];
$opravneni = "0";
$md5_heslo = md5($heslo);

$kemail = "^[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+@[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+\.[a-z]{2,3}$";

if (!(EregI($kemail, $email) && !EregI("\.{2,}", $email) && !EregI("_{2,}", $email) && !EregI("-{2,}", $email))){ die("Email neni korektně zadán!". "<br>". '<a href="registrace.php">Zpět na Registraci</a>'); }


if ($jmeno == "") { echo "Přihlašovací jméno nebylo vyplněno!"."<br>"; }
else if ($email == "") { echo "Email nebyl vyplněn!"."<br>"; }
else if ($heslo == "") { echo "Heslo nebylo vyplněno!"."<br>"; }
else if ($heslo!=$oheslo) { echo "Ověření hesla je nesprávné!"; }
else { 
$sql = mysql_query("INSERT INTO uzivatele VALUES ('','$jmeno','$md5_heslo','$email','$opravneni')")  or die(mysql_error());
  
}
}

?>

<link rel="stylesheet" href="style.css">
<div class="registrace">
<fieldset>
<legend>Registrace</legend>

<form action="registrace.php" method="post">
<label for="jmeno">Jméno:</label><input id="jmeno" name="jmeno" type="text" value="<?php echo isset($_POST["jmeno"]) ? htmlspecialchars($_POST['jmeno']) : ''; ?>" maxlength="16"><span>( Max. 16 znaků )</span><br>
<label for="email">Email:</label><input id="email" name="email" type="text"><br>
<label for="heslo">Heslo:</label><input id="heslo" name="heslo" type="password"><br>
<label for="oheslo">Znovu heslo:</label><input id="oheslo" name="oheslo" type="password"><br>

<input style="margin: 0.5em 0 0 8em;" type="submit" name="submit" value="Registrovat se"><br>

</form>

</fieldset>
</div>

<?php 
echo "Registrace proběhla úspěšně.". "<br>";
?>
  
<a href="./index.php">Zpět na přihlášení</a>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0