Autor Zpráva
Jockie
Profil
mám problém s mail formulářem. Nechápu jak je to možný, po odeslání ze stránky to dorazí na správný email, ale nevypisuje se jméno (email) odesilatele a neprijde prvni řádek v <textarea> tedy pokud se neodřádkuje neprijde žádný text :(

takhle to mám udelane:


<?php
if ($zapsat):
if ($email) $prispevek .= ' E-mail odesílatele: ' . htmlspecialchars($email) . '.';
$prispevek .= ' A napsal ti: ' . htmlspecialchars($zprava);
if (mail("jaromir.krpalek@quick.cz", "www.digirain.wz.cz", $prispevek)):
endif;
endif;
?>

--------------------

<fieldset><br />
<legend>Napište nám </legend>
<form name="form1" onsubmit="return zkontroluj(document.form1.email, document.form1.text);" action="<?php echo$PHP_SELF; ?>" method="post">
Váš e-mail: <input type="text" value="<?php echo $email; ?>" name="email"><br />
<textarea name="zprava" rows="7" cols="30" class="mar"></textarea><br />
<input type="submit" value="odeslat" name="zapsat" class="button" />
</form>
</fieldset>
Oswald
Profil
Nebude to ono již klasické register_globals=off?


$_POST[zapsat]
$_POST[email]
$_SERVER[PHP_SELF];
Jockie
Profil
Oswald: vysvetli mi to prosim trochu. Ja se v php moc neorientuju ...
Jockie
Profil
mohl by mi nekdo poradit co s tim ?? zacinam z toho bejt trochu spatnej :) PHPcku zatim moc nerozumim a nevim kde je chyba a potreboval bych ji odstranit ...
juneau
Profil
misto promenne $zapsat zkus pouzit $_POST["zapsat"]; ... pokud je to tedy promena predana formularem. pokud by jsi ji predaval pres url (script.php?promena=neco), tak by to bylo $_GET["zapsat"]...

samozrejme nejde jen o $zapsat, ale o vsechny ostatni
Oswald
Profil
Je to hlavně kvůli bezpečnosti, aby nebylo tak snadné např. upravovat parametry v URL a ovlivňovat tak aplikaci. Proto se k proměným získaných pres post, get, cookies, session apod. přistupuje pomocí těchto superglobálních polí a nejsou přímo vyditelné. Automatickou registraci můžeš zapnout v php.ini ale není to moc dobrý nápad.

http://www.php.net/manual/cs/language.variables.predefined.php
Anonymní
Profil *
juneau: mohl bys prosim napsat jak by ten zapis vypadal ?? ja si nejsem moc jistej v kramflecich ..
juneau
Profil
podle vseho takhle:

<?php

if ($_POST["zapsat"]):

if ($_POST["email"]) $prispevek .= ' E-mail odesílatele: ' . htmlspecialchars($_POST["email"]) . '.';

$prispevek .= ' A napsal ti: ' . htmlspecialchars($_POST["zprava"]);

if (mail("jaromir.krpalek@quick.cz", "www.digirain.wz.cz", $prispevek)):

endif;

endif;

?>
Jockie
Profil
juneau: dik zkusim to ...
Jockie
Profil
juneau: porad to dela stejnou chybu ... nevypisuje jmeno odesilatele a prvni radek textu ... :(
juneau
Profil
a neni nejaka blbost v tom javascriptu?

vloz na zacatek toho php: error_reporting(15); ... vypise to chyby. pokud se nejake vyskytnou... coz asi jo :)
Jockie
Profil
juneau: tak to neco vypsalo ...


Notice: Undefined index: zapsat in /3w/wz.cz/t/tests-server/new/HTML/kontakt/kontakt.php on line 3
Jockie
Profil
juneau:

a todle se napsalo do řádku kam se má napsat mail ...


<font color=ff0000><br /><b>Notice</b>: Undefined variable: email in <b>/3w/wz.cz/t/tests-server/new/HTML/kontakt/kontakt.php</b> on line <b>58</b><br /></font>
juneau
Profil
ta prvni chybovka znamena, ze do scriptu nebyla poslana zadna POST hodnota s indexem "zapsat" ... tedy jako by ve formulari chybel <input/textarea ... name="zapsat"> nebo byla tato kolonka odeslana prazdna. vazne divny... nemelo by to mit vliv, ale zkus tem formularovym prvkum zadat jeste atribut id se stejnou hodnotou jako name.
Jockie
Profil
juneau: tak ani pridani atributu id se stejnou hodnotou nepomohlo ... je to opravdu divny :( nemáš nejaky napad jak jinak by to šlo udělat ?? třeba to celý předělat ??
mackopu
Profil
Tak to ještě dopucuj na:
<?php 

if (isset($zapsat)):
$prispevek = "";
if (isset($email)):
$prispevek .= ' E-mail odesílatele: ' . htmlspecialchars($email) . '.';
endif;
$prispevek .= ' A napsal ti: ' . htmlspecialchars($zprava);
if (mail("jaromir.krpalek@quick.cz", "www.digirain.wz.cz", $prispevek)):
echo "Email byl odeslán.";
else:
echo "Email se nepodařilo odeslat.";
endif;
endif;
?>

Mám pocit, že ses tam trochu zamotal v endifech.
Proměnnou $prispevek je nejprve třeba inicializovat jako prázdnou, pokud ji pak chceš spojovat pomocí .=
A to isset tam bývá taky důležité. Zkus to.
Jockie
Profil
mackopu: děkuji zkusím to ... já php neumím a zatim neovládam tak vlastně nevim co je v tom zápisu a tudíš sem bezbranej proti jakýkoli chybě v tom :(
Jockie
Profil
mackopu tak ted uz je to opravdu zoufaly :( zkopiroval jsem ten tvuj zapis a stejnak mi to nechodi ... porad stejny problem nevypisuje se mail a prvni radek v textarea
mackopu
Profil
Jak budu mít rochu času, otestuju to u sebe a ještě se ti ozvu - nezoufej ;-)
Jockie
Profil
mackopu tak nezoufu a doufam :)
mackopu
Profil
Tak za tohle dávám ruku do ohně:
<?php

if (isset($zapsat)):
$prispevek = "";
if (isset($email)):
$prispevek .= "E-mail odesílatele: ". htmlspecialchars($email).",";
endif;
$prispevek .= " Zpráva: ".htmlspecialchars($zprava);
if (mail("tvoje.adresa@seznam.cz", "Predmet zpravy", $prispevek)):
echo "Email byl odeslán.";
else:
echo "Email se nepodařilo odeslat.";
endif;
endif;
?>

<fieldset>
<legend>Napište nám </legend>
<form action="<?php echo$PHP_SELF; ?>" method="post">
Váš e-mail: <input type="text" value="<?php echo $email; ?>" name="email"><br />
<textarea name="zprava" rows="7" cols="30"></textarea><br />
<input type="submit" value="odeslat" name="zapsat" />
</form>
</fieldset>
Testoval jsem to na třech serverech a chodí to jako hodinky.
Anonymní
Profil *
mackopu supeeeer dik ti moc nevim co s tim bylo asi patrne byla chyba v tom javascriptu kontrolujici jestli sou pole plna nebo ne ...

jeste se zeptam jestli je možné nák dát do kupy hlavičku příchozí zprávy ?? mám kódování UTF-8 a mrší to náky znaky ..
Jockie
Profil
mackopu a nebo vlastne to neni problem ... zprava to je pro me takže to nikomu nebude rvat žíly a kdyz tam nedam diakritiku tak to bude v pohode ;-)
Jockie
Profil
no tak ani ne myslel sem že to mrší jenom hlavičku ale ono to mrší celej dokument ...
Jockie
Profil
mackopu nasel jsem tady uz stejny problem ...

mail ($_POST["email"], $predmet , $telo,"From: automat@server\r\nContent-Type: text/plain; charset=utf-8")



po přidání tohodle by to dělat nemělo ... a ja bych se jenom zeptal kam to pridat ??
mackopu
Profil
V tom případě takto:
Nejdřív funkce kontroly -
<script language="JavaScript">

<!--
function kontrola(vstup)
{
if (vstup.zprava.value=="")
{
alert("Napište zprávu!");
vstup.zprava.focus();
return false;
}
else
return true;
}
// -->
</script>
Tohle přidej do tagu formuláře-
 onsubmit="return kontrola(this)"
A nakonec vložení hlavičky emailu-
<?php

$hlavicka = "Content-Type: text/plain; charset=UTF-8\n";
if (isset($zapsat)):
$prispevek = "";
if (isset($email)):
$prispevek .= "E-mail odesílatele: ". htmlspecialchars($email).",";
endif;
$prispevek .= " Zpráva: ".htmlspecialchars($zprava);
if (mail("tvoje.adresa@seznam.cz", "Predmet zpravy", $prispevek, $hlavicka)):
echo "Email byl odeslán.";
else:
echo "Email se nepodařilo odeslat.";
endif;
endif;
?>
A pokud tam dáš místo Content-Type: text/plain Content-Type: text/html, tak to bude umět přečíst i zprávu napsanou v html kódu :-)
Jockie
Profil
mackopu je mozny ze nejprve mi to nechodilo protoze jsem mel dan php skript jeste pred deklaraci a javascript byl jako externi a odkaz na nej byl v hlavicce ??
mackopu
Profil
Ten javascript by na to neměl mít vůbec vliv. Načítá se totiž do klientského počítače a tam čeká až ho bude zapotřebí, aniž by rozhodoval o tom, jestli se nějaká proměnná odešle PHP skriptu. Jen tě prostě nepustí dál, když nesplníš jeho podmínky. Abych ti na tvou otázku ale mohl odpovědět opravdu korektně, musel bych kód té původní stránky vidět CELÝ (tedy jestli to vůbec ještě stojí za to...)
Jockie
Profil
mackopu dík za vysvětlení ... ukázal bych ale už ten kod nemam prepsal jsem ho

mockrat dik !!!
mackopu
Profil
Dobrou ;-)
Toto téma je uzamčeno. Odpověď nelze zaslat.