Autor Zpráva
IamNotThePlayer
Profil
Zdravím.

Ve vytváření formulářu nejsem moc zkušený a potřeboval bych poradit s nefunkčním skriptem. Mám tenhle kód v jednom souboru

  <?php
header("Content-Type: text/html; charset=windows-1250");
$to = "petr@centrum.cz";
$extra = "From: $email\r\nReply-To: $email\r\n";
$subject = "Kontakt od ".$jmeno."";
$mess = "Jméno: ".$jmeno."\nEmail: ".$email."\nText:\n".$text."";
mb_language('Neutral');
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output("UTF-8");
if($jmeno==""||$text==""||ereg("^.+@.+\\..+$", $email)==false){
echo "<script>alert('Špatně zadané údaje, zkuste to prosím znovu.');</script>";
} else{
$succes = mb_send_mail($to, $subject, $mess, $extra);
if($succes){
echo "<script>alert('Zpráva byla úspěšně odeslána, děkujeme.');</script>";
}else{
echo "<script>alert('Nastala chyba, zkuste nás kontaktovat na e-mail: petr@centrum.cz');</script>"; } }
print "<meta http-equiv=\"refresh\" content=\"0;URL=navrhwebu.php\">";
exit();
?>

a druhý kód v dalším

<form action="kontakt.php" method="post">
<div class="kText">Jméno:</div>
<div class="kInput"><input id="kJmeno" name="jmeno" accesskey="j" type="text" size="30" /></div>
<br />
<div class="kText">Email:</div>
<div class="kInput"><input id="kEmail" name="email" accesskey="e" type="text" size="30" /></div>
<br />
<div class="kText">Text:</div><div class="kInput">
<textarea id="kText" name="text" accesskey="t" rows="10" cols="60"></textarea></div>
<br />
<input type="submit" class="kBut" value="Odeslat"/>
</form>

Když vypíšu údaje a dám odeslat vypíše mi to chybovou hlášku o špatně zadaných údajích. Kód jsem našel na internetu a nevím v čem jsem udělal chybu. Jsem opravdu jen začátečník.
mimochodec
Profil
IamNotThePlayer:

Pro předání dat z formuláře využíváš přímo proměnné:
<input id="kJmeno" name="jmeno" accesskey="j" type="text" size="30" />
..
$subject = "Kontakt od ".$jmeno;

Toto fungovalo dřív, dneska se to nedoporučuje a defaultně to nefunguje. Místo toho použij

$subject = "Kontakt od ".$_POST["jmeno"];
IamNotThePlayer
Profil
Upravil jsem to do takovéto podoby a přesto mi to vypisjuje stejnou hlášku.

  <?php
header("Content-Type: text/html; charset=windows-1250");
$to = "petr@centrum.cz";
$extra = "From: $email\r\nReply-To: $email\r\n";
$subject = "Kontakt od ".$_POST["jmeno"];
$mess = "Jméno: ".$jmeno."\nEmail: ".$email."\nText:\n".$text."";
mb_language('Neutral');
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output("UTF-8");
if($jmeno==""||$text==""||ereg("^.+@.+\\..+$", $email)==false){
echo "<script>alert('Špatně zadané údaje, zkuste to prosím znovu.');</script>";
} else{
$succes = mb_send_mail($to, $subject, $mess, $extra);
if($succes){
echo "<script>alert('Zpráva byla úspěšně odeslána, děkujeme.');</script>";
}else{
echo "<script>alert('Nastala chyba, zkuste nás kontaktovat na e-mail: petr7@centrum.cz');</script>"; } }
print "<meta http-equiv=\"refresh\" content=\"0;URL=navrhwebu.php\">";
exit();
?>
mimochodec
Profil
To jmeno byl příklad. Uprav stejným stylem všechny ty předávané hodnoty.
IamNotThePlayer
Profil
Zaměnil jsem hodnoty a pořád to nefunguje.

<?php
header("Content-Type: text/html; charset=windows-1250");
$to = "petr@centrum.cz";
$extra = "From: .$_POST["email"]\r\nReply-To: .$_POST["email"]\r\n";
$subject = "Kontakt od ".$_POST["jmeno"];
$mess = "Jméno: ".$_POST["jmeno"]"\nEmail: ".$_POST["email"]"\nText:\n".$_POST["text"]"";
mb_language('Neutral');
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output("UTF-8");
if(.$_POST["jmeno"]==""||.$_POST["text"]==""||ereg("^.+@.+\\..+$", .$_POST["email"])==false){
echo "<script>alert('Špatně zadané údaje, zkuste to prosím znovu.');</script>";
} else{
$succes = mb_send_mail($to, $subject, $mess, $extra);
if($succes){
echo "<script>alert('Zpráva byla úspěšně odeslána, děkujeme.');</script>";
}else{
echo "<script>alert('Nastala chyba, zkuste nás kontaktovat na e-mail: petr@centrum.cz');</script>"; } }
print "<meta http-equiv=\"refresh\" content=\"0;URL=navrhwebu.php\">";
exit();
?>
Opravdu se omlouvám, že s tím otravuju, ale nevím, která tečka nebo čárka tam má zůstat. Nejsem žádný programátor.
panther
Profil
IamNotThePlayer:
nebudu to prochazet cele, ale muzes zde podle zvyrazneni syntaxe videt, ze tam mas syntakticke chyby, konkretne na r. 4 ma byt 2x 'email' v apostrofech misto uvozovek.

- na r. 11 tecky byt nemaji.
- misto ereg se koukni na funkci filter_var
- na 6. radku ma byt texka pred uvozovkou za jmenem, za emailem, posledni 2 uvozovky pred strednikem smaz
- na 4. radku name byt tecka za FROM, ani za Reply To

Nevim, proc si ty tecky domyslis, jak se ti to hodi. Stacilo jen nahradit jeden nazev promenne za jiny, ne tam vymyslet buhvi co.

Musi ti hlasit chybu i stranka, pokud je mas zapnute. Pokud ne, zapni si jejich vypisovani, budes hned moudrejsi. Neni to o znalosti programovani, najit si radek, na kterem mas napsanou chybu a chybovou hlasku prelozit zvladne kazdy.
IamNotThePlayer
Profil
Díky moc. Opravil jsem ty chyby a ted mi to hlásí jen toto:

Parse error: syntax error, unexpected '"', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in E:\Programy\Server\xampp\htdocs\formularpokus\web\formular.php on line 4
panther
Profil
IamNotThePlayer:
a ted mi to hlásí jen toto
jeste tam syntakickou chybu nekde mas, bohuzel nevim, jak vypada tvuj aktualni kod.

Hlaska mluvi jasne: n 4. radku neocekavana uvozovka, ocekavany string nebo promenna. To bude pravdepodobne to, co jsem psal o uvozovkach a apostrofech hned na prvnim radku.
IamNotThePlayer
Profil
Vyřešil jsem to jiným skriptem, který funguje.

<?php
$jmeno = $_POST['jmeno'];

$mail = $_POST['mail'];
$predmet = $_POST['predmet'];
$text = $_POST['text'];

$prijemce = "petr@centrum.cz";

$zahlavi = "From: " . $mail . "\r\n"; 


if ( !empty($jmeno) and !empty($mail) and !empty($predmet) and !empty($text)) {
    mail($prijemce, $predmet, $text, $zahlavi);
    echo "<h3>Mail byl odeslán.</h3>"; 

    } else {
        echo "<h3>Nevyplnili jste všechna pole. Mail nebyl odeslán.</h3>";

        }
?>

Jenom jsem chtěl ještě vědět jak zajistit aby po vypsání hlášky - Mail byl odeslán - stránka sama skočila zpátky na stránku s formulářem.
Druhá věc - odeslal jsem mail, ale stále nepřišel. Používám xxamp jako zkušební server na počítači a nevím jestli musí být stránka na skutečném hostingu nebo to prostě má trvat déle.
panther
Profil
IamNotThePlayer:
mozna ti to tolik vadit nebude, ale:
- nekontrolujes email, takze projde i hodnota 'a', ktera jako platny email nevypada
- PIses mail byl odeslan, ale zda byl odeslan, nekontrolujes. Vetisnou se odesle, nicmene nemusi.

stránka sama skočila zpátky na stránku s formulářem.
- header (hlaska se nevypise, presmeruje se rovnou)
- JS

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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