« 1 2 »
Autor Zpráva
zarkan
Profil *
Zdarec,
můžu poprosit o radu – co dělám blbě?
De mě o to, že si posílám výsledky na e-mail. Email nevyplňuji - mám v hidden svůj, aby to návštěvníka zbytečně neotravovalo, případně neodradilo vyplnit, jméno je předmět a vyber písmene je zprava. Kdybych tam měl na výběr jen z jedné možnosti tak je to v pohodě a chápal bych to, ale když tam mám už dvě možnosti výběru tak nevím co s tím. Chtěl bych to mít prostě tak, že mě na e-mail přijde předmět se jménem a ve zprávě bude napsaný třeba acko a ecko.

<form action="pokus.php" method="post">
<input type="hidden" name="email" value="muje-mail">
Jméno: <input name="predmet"><br>

Vyber písmeno:<br>
<input type="radio" name="zprava" value="acko">acko<br>
<input type="radio" name="zprava" value="becko">becko<br>
<input type="radio" name="zprava" value="cecko">cecko<br><br>

Vyber dalsi písmeno:<br>
<input type="radio" name="prava" value="decko">decko<br>
<input type="radio" name="prava" value="ecko">ecko<br>
<input type="radio" name="prava" value="efko">efcko<br><br>

<input type="submit" value="Odeslat">
</form>


A tady je ten pokus.php
<? if ( Mail("muje-mail", $predmet, $zprava, $prava, "From: " . $mail_odesilatele) )
echo "Mail byl odeslán";
else echo "Mail se nepodařilo odeslat"; ?>
zarkan
Profil *
v tom 1 řádku u toho pokus.php nemá být $mail_odesilatele) ale $email)
Davex
Profil
zarkan:
1) Jako čvrtý parametr funkce mail() patří tvůj pátý s přidaným koncem řádku "\n".
2) Spoléháš na zapnuté register_globals. Pro získání vyplněných údajů používej superglobální pole $_POST.
3) Ve formuláři chybí údaj mail_odesilatele.
zarkan
Profil *
Davex:
Tak abych řekl pravdu tak nejsem o moc chytřejší ten kód jsem vzal normalně tady na stránkách - Formulář na mail a ten mail_odesilatel jsem psal ze to mam blbe viz #2 ....
jenikkozak
Profil
zarkan:
1) Na uvedené stránce není přidán ten další parametr funkce mail(), a sice to $prava. Tuto proměnnou musíte přidat do $zpravy.
Například zápisem $zprava.=$prava;
2) Není-li na serveru zapnuté register_globals, což už moc nebývá, je nutné místo $predmet pracovat s $_POST["predmet"], místo $zprava s $POST["zprava"] a tak.
3) Yuhů má v kódu input <input name="mail_odesilatele">, ve Vašem skriptu chybí. Proměnná $mail_odesilatele, resp. $_POST["mail_odesilatele"] tedy neexistuje.
zarkan
Profil *
Mužu vědět co tam mám teď blbě:?


<form action="prihlaska.php" method="post">
<input type="hidden" name="email" value="muj.e-mail">
Jméno: <input name="predmet"><br>

Vyber písmeno:<br>
<input type="radio" name="zprava" value="acko">acko<br>
<input type="radio" name="zprava" value="becko">becko<br>
<input type="radio" name="zprava" value="cecko">cecko<br><br>

Vyber dalsi písmeno:<br>
<input type="radio" name="prava" value="decko">decko<br>
<input type="radio" name="prava" value="ecko">ecko<br>
<input type="radio" name="prava" value="efko">efcko<br><br>

<input type="submit" value="Odeslat">
</form>


A tady "prihlaska.php"
<?
$predmet = $_POST['predmet'];
$email = $_POST['email'];
$zprava = $_POST['zprava'];
$zprava = $_POST['prava'];

if ($predmet!="" and $email!="" and $zprava!="" and $prava!="")
{
Mail("muj.e-mail", $predmet, $zprava, $prava, "From: " . $email);
echo "<p><strong>Díky za tip.</strong></p>";
}
else
{
echo "<p><strong>Vypln jméno a tip!</strong></p>";
} 
?>

Kam mám dat tohle? $zprava.=$prava;
jenikkozak
Profil
Čárkou se v závorce za názvem funkce oddělují její parametry.
Funkce mail má (v tomto případě) 4 parametry - adresáta, předmět, tělo e-mailu a hlavičky. Ty však máš parametrů 5. Chápeš?
Takže buď napíšeš:
$zprava=$zprava.$prava; //což se dá zkrátit na $zprava.=$prava;
mail ("adresát","předmět",$zprava,"hlavičky");
Nebo to spojíš v té funkci:
mail ("adresát","předmět",$zprava.$prava,"hlavičky");

Na řádku 5 máš zřejmě překlep:
$zprava=$_POST['prava'];
Davex ti radil, abys čtvrtý parametr ukončil zpětným lomítkem a enkem.
G3n3sis19
Profil
jenikkozak:
má to skoro dobře ;)
zarkan:
ta prihlaska.php by měla být takto
<?
$predmet = $_POST['predmet'];
$email = $_POST['email'];
$zprava = $_POST['zprava'];
$zprava .= $_POST['prava'];

if ($predmet!="" and $email!="" and $zprava!="" and $prava!="")
{
Mail("muj.e-mail", $predmet, $zprava, $prava, "From: " . $email . "\n");
echo "<p><strong>Díky za tip.</strong></p>";
}
else
{
echo "<p><strong>Vypln jméno a tip!</strong></p>";
} 
?>
TomasJ
Profil
G3n3sis19:
ta prihlaska.php by měla být takto
Ne neměla.

zarkan:
Mohla by být takto:
<?php
if(isset($_POST['zprava']))
{
  if(isset($_POST['predmet']) && isset($_POST['email']))
  {
    $predmet = $_POST['predmet'];
    $email = $_POST['email'];
    $zprava = $_POST['zprava']."\n".$_POST['prava'];
    mail("tvuj@mail.cz", $predmet, $zprava, "From: $email");
    echo "<p><strong>Díky za tip.</strong></p>";
  }
  else{echo "<p><strong>Vyplň jméno a tip!</strong></p>";}
}
?>
G3n3sis19
Profil
Dobře, mohla. ta moje oprava byla jen kvůli tomu \n. fungovalo by to
TomasJ
Profil
G3n3sis19:
Ne nefungovalo. Posíláš tam 5 parametrů a funkce mail() má jen 4.
mail("pro@koho.cz", "Předmět", "Zpráva", "Další parametry, třeba informace hlavičky mailu, oddělené \n");
G3n3sis19
Profil
Jo a joo, tak na to jsem nekoukal, nevšiml jsem si toho. Omlouvám se ti
zarkan
Profil *
TomasJ:
Díky moc :)
zarkan
Profil *
Mám menší problém - mám stejný kód jako předtím, s tím že tam mám 4 otázky na který jsou možnosti odpovědět přes input typ radio. Jakmile jsou vyplněny všechny čtyři odpovědi tak je vše v pořádku - vypíše se diky a odpovědi všech otázek mi dojdou na email. Jakmile ale vynechám otázku "acko" tak se bohužel už nic nestane - ani se nenapíše chybová hláška (else). Nevíte někdo prosím kde je problém? Předem díky.

<?php
if(isset($_POST['acko']))
{
  if(isset($_POST['predmet']) && isset($_POST['email']))
  {
    $predmet = $_POST['predmet'];
    $email = $_POST['email'];
    $acko = $_POST['acko']."n".$_POST['becko']."n".$_POST['cecko']."n".$_POST['decko'];
    mail("muj@mail.cz", $predmet, $acko, "From: $email");
    echo "<p><strong>Díky.</strong></p>";
}
  else{echo "<p><strong>Chyba!</strong></p>";}
}
?>
petr 6
Profil
zarkan:
Nevíte někdo prosím kde je problém?
Problém je v tom, že to máš tak napsané, aby se kód na řádcích 4 až 12 provedl jen při vyplněném áčku, viz řádek 2:
if(isset($_POST['acko']))
zarkan
Profil *
petr 6:
A nějakej tip na to jak to udělat aby mě přišli výsledky i jen v té situaci když odpovím jen např. na cecko a decko?
petr 6
Profil
zarkan:
Třeba odstranit tu podmínku
zarkan
Profil *
petr 6:
Takže stačí smazat 2,3 a 13 řádek?
petr 6
Profil
zarkan:
Ano. Co jiného?
zarkan
Profil *
petr 6:
No, že mě to teď nefunguje už vůbec, ani když odpovím na všechny 4 otázky.
petr 6
Profil
zarkan:
No, že mě to teď nefunguje už vůbec, ani když odpovím na všechny 4 otázky.
Asi to máš rozbité.
Buďto jsi umazal málo nebo moc, nebo máš nějakou další chybu mimo uvedený kód.
Zarkan
Profil *
Ten kód mám teďka takhle:
<?
$predmet = $_POST['predmet'];
$email = $_POST['email'];
$zprava = $_POST['acko']."\n".$_POST['becko']."\n".$_POST['cecko']."\n".$_POST['decko'];

if ($predmet!="" and $email!="" and $zprava!="")
{
Mail("muj@mail.cz", $predmet, $zprava, "From: " . $email);
echo "<p><strong>Díky.</strong></p>";
}
else
{
echo "<p><strong>Chyba!</strong></p>";
} 
?>

A mám menší problém když nenapíšu ani předmět ani zprávu, tak se mě vypíše chyba to samé i u toho když vypíšu jen zprávu, ale ne předmět - to je vše v pořádku. Ale, bohužel když vypíšu předmět a zprávu nechám volnou, tak se to odešle a potvrdí se to tím díky. Tak nevíte jak bych to měl upravit, aby se to odeslalo a aby se to díky zobrazilo jen v případě, že vyplním jak předmět tak i zprávu.
petr 6
Profil
Zarkan:
Máš tam pořád
$zprava = "\n\n\n"
což vyhoví podmínce
$zprava!=""


Zkus testovat
trim($zprava)!=""
případně
!empty($zprava)
zarkan
Profil *
petr 6:
Jo díky, sice to jsem ani po pár dnech hraní to trim a ani empty moc nepobral, ale nakonec jsem jen smazal ty novy řádky a faká to, jak má. Takže děkuji.
Sirion
Profil
Používat skryté prvky ve formulářích nedoporučuji, je to potenciální zdroj útoku a navíc zbytečné. Uložení do proměnné je lepší.

např.

$odesilatel="From: Jan Novák <jan.novak@seznam.cz>";
G3n3sis19
Profil
zarkan:
trim a ani empty
trim ti smaže všechny zbytečný mezery (na začátku a na konci proměnné) a empty zkontroluje, jestli je proměnná prázdná ;)
zarkan
Profil
Ještě jeden dotaz - k výpisům hlášek. Mám teďka ten kód (jen ty hlášky) takto:

if ($jmeno!="" and $zprava!="")
{
// tady mám ten samotný kód který se udělá v případě že vypíšu jak jmeno tak i zprávu
echo "<b><font color=green>Díky.</font color=green></b><br><br>";} // a tady ta hláška - díky

else
{echo "<b><font color=red>Chyba!</font color=red></b><br><br>";} // hláška - chyba

A chtěl bych to mít ještě tak, že tam nebude jen ta chyba, ale aby se dál ještě zobrazilo buď:
($jmeno!="")
echo "<b><font color=red>Není vypsána zpráva.</font color=red></b><br><br>";
nebo
($zprava!="")
echo "<b><font color=red>Není vypsáno jmeno.</font color=red></b><br><br>";
a nakonec
else
{echo "<b><font color=red>Chyba - neni vypsáno ani jmeno ani zprava!</font color=red></b><br><br>";}
Keeehi
Profil
if(empty($jmeno) and !empty($zprava))
    echo "<b><font color=red>Není vypsána zpráva.</font></b><br><br>";
if(!empty($jmeno) and empty($zprava))
    echo "<b><font color=red>Není vypsáno jmeno.</font></b><br><br>";
if(empty($jmeno) and empty($zprava))
    echo "<b><font color=red>Chyba - neni vypsáno ani jmeno ani zprava!</font></b><br><br>";
zarkan
Profil
Parada díky.
Jinak jaktože tam nikde nejsou ty zavory { a } ????
Keeehi
Profil
zarkan:
Pokud se má if (a další) vztahovat jen k jednomu následujícímu příkazu, je možné je vynechat.
« 1 2 »

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: