Autor | Zpráva | ||
---|---|---|---|
tpilar Profil |
Na tento začátek PHP programu
<?php $action = $_POST['action']; $jmeno = $_POST['jmeno']; $mail = $_POST['mail']; $vzkaz = $_POST['vzkaz']; $kontrola = $_POST['kontrola']; mi XAMPP vypisuje chybové hlášení : Notice: Undefined index: action in C:\xampp\htdocs\a_kniha\kniha.php on line 3 Notice: Undefined index: jmeno in C:\xampp\htdocs\a_kniha\kniha.php on line 4 Notice: Undefined index: mail in C:\xampp\htdocs\a_kniha\kniha.php on line 5 Notice: Undefined index: vzkaz in C:\xampp\htdocs\a_kniha\kniha.php on line 6 Notice: Undefined index: kontrola in C:\xampp\htdocs\a_kniha\kniha.php on line 7 Další problém, který mám je ten, že vzniká soubor s koncovkou *.body . Vzniklý soubor bych potřeboval automatizovaně zkopírovat s příponou html. Děkuji. Tom Omlouvám se, prvním řádkem je tag HTML, číslování řádků je tedy poněkud zavádějící. Řádek 2. je ve skutečnosti řádek 3. Moderátor Davex: Titulek „$_POST['action'] problém“ nevystihoval podstatu dotazu. Příště zkus prosím vymyslet lepší.
|
||
Str4wberry Profil |
#2 · Zasláno: 8. 2. 2013, 11:19:24
1) Podívejte se na Ošetřování Notice: undefined index - nutnost?
2) Pokud je soubor jeden, tak ho ručně přejmenujte a v kódu zajistěte, aby se používal právě ten soubor s příponou html . Pokud potřebujete přejmenovat souborů víc, existuje na to např. hezká funkce „Hromadné přejmenování“ v programu Total Commander.
|
||
Micruss Profil |
#3 · Zasláno: 8. 2. 2013, 11:53:10
to action je kontrola jestli jsou odeslaný posty ne? pokud mas formular treba
if(isset($_POST['action'])) { $jmeno = $_POST['jmeno']; $mail = $_POST['mail']; $vzkaz = $_POST['vzkaz']; $kontrola = $_POST['kontrola']; } |
||
Joker Profil |
#4 · Zasláno: 8. 2. 2013, 12:19:31
Micruss:
To způsobí stejný problém, pokud bude vyplněné action, ale ne to ostatní. Lepší je polím už rovnou dávat datový typ a případně výchozí hodnotu. Příklad: // boolean $odeslano = isset($_POST["odeslano"]); //číslo $cislo = empty($_POST["cislo"]) ? 0 : intval($_POST["cislo"]); // řetězec $text = empty($_POST["text"]) ? "" : $_POST["text"]; |
||
tpilar Profil |
#5 · Zasláno: 8. 2. 2013, 12:59:22
V podstatě to zakládá pouze jeden jediný soubor do kterého to zapisuje. Dám to sem celé aby byla funkce lépe vidět.
<html><body> <?php $action = $_POST['action']; $jmeno = $_POST['jmeno']; $mail = $_POST['mail']; $vzkaz = $_POST['vzkaz']; $kontrola = $_POST['kontrola']; function antispam($email, $jmeno){ $return = "<script type=\"text/javascript\"><!--\ndocument.write('<a href=\"' + 'mailto:' + '"; for($i=0;$i<strlen($email);$i++){ $code .= $email{$i}=='@' ? "' + '".ord("@")."' + '" : "".ord($email{$i}).";"; } $return .= $code."' + '\">' + '".$jmeno."' + '<\/a>');\n--></script>"; RETURN $return; } ?> <form name="form" method="post" action="kniha.php"> <table><tr><td>jméno:</td> <input type="hidden" value="uloz" name="action" /> <td><input type="text" name="jmeno" value="<?php echo $jmeno ?>" size="50" /</td> </tr><tr><td>e-mail:</td> <td><input type="text" name="mail" value="<?php echo $mail ?>" size="50" /></td> </tr><tr></tr> <tr><td valign="top">Vzkaz</td> <td><textarea name="vzkaz" cols="40" value="<?php echo $vzkaz ?>" rows="5"><?php echo $vzkaz ?> </textarea></td></tr> <tr><td></td><td>Ochrana proti spamu: 4 plus 5 = <input type="text" name="kontrola" value="<?php echo $kontrola ?>" size="8" /> </td> <tr><td></td><td> <input type="submit" value="odeslat"></td> </tr> </table> </form> <table> <?php if ($action=='uloz'): $soubor = "kniha.body"; @$ext = fopen($soubor, "r"); @$obsah = fread($ext, filesize($soubor)); @FClose($ext); if($kontrola != "9"): echo "<h6>Špatná odpověď</h6>"; elseif(($vzkaz=="") or ($jmeno=="")): echo "<h6>Nejsou vyplněny požadované údaje</h6>"; else: $ext = fopen("kniha.body", "w"); $mail = HTMLSpecialCHars($mail); if($mail == "") $mail = ""; else $mail = antispam($mail,$mail); $jmeno = HTMLSpecialCHars($jmeno); $vzkaz = HTMLSpecialCHars($vzkaz); $tab = "<tr><td width=\"300\" >".$jmeno."</td> <td align=\"right\">".Date(" d/m/Y H:i:s")."</td> </tr><tr><td colspan=\"2\">".$vzkaz."</td> </tr><tr><td width=\"150\">".$mail."</td> </tr><tr><td colspan=\"2\"><hr size=\"1\"></td> </tr>"; fputs($ext, "$tab"); fputs ($ext, "$obsah"); FClose($ext); @$ext = fopen("kniha.body", "r"); @fpassThru($ext); endif; else: @$ext = fopen("kniha.body", "r"); @fpassThru($ext); endif; ?> </table> </body> </html> Zřejmě bych však nepoužil výpis v prohlížeči. Nedává to pak úplně smysl. |
||
tpilar Profil |
#6 · Zasláno: 8. 2. 2013, 17:11:41
Trochu pomohlo tohle :
$_POST['jmeno'] = ""; $_POST['mail'] = ""; $_POST['vzkaz'] = ""; $_POST['kontrola']= ""; Ovšem $action = $_POST['action']; je mi jasné, tohle není textová proměnná, string. Užil jsem si i trochu legrace po $_POST['action'] = "uloz"; mi proběhl celý script s tím, že mám špatně sečtenu antispam ochranu. |
||
Joker Profil |
#7 · Zasláno: 8. 2. 2013, 17:27:34
tpilar:
Proč to neuděláte tak jak jsem psal? |
||
tpilar Profil |
#8 · Zasláno: 9. 2. 2013, 13:50:53
Omlouvám se ale to se mi to rozpadne úplně. Je to celé na mne příliš složité. V podstatě hlavně nejsem schopen definovat $action = $_POST['action']; jako Boolean.
S proměnnými typu string jsem to vyřešil takto : $_POST['jmeno'] = ""; $_POST['mail'] = ""; $_POST['vzkaz'] = ""; $_POST['kontrola']= ""; |
||
Joker Profil |
#9 · Zasláno: 9. 2. 2013, 14:31:06
tpilar:
„Vím, že to asi není ideální ale již se nevypisují jako chyba.“ Akorát to má drobnou vadu, že to zároveň smaže případný vstup vyplněný návštěvníkem stránky. „Je to celé na mne příliš složité.“ Co konkrétně je na tom složitého? Zrovna tohle mi nepřijde složité. „V podstatě hlavně nejsem schopen definovat $action = $_POST['action']; jako Boolean.“ V příspěvku [#4] jsem právě na tohle psal ukázku. |
||
Časová prodleva: 11 let
|
0