Autor Zpráva
margotka
Profil
Ahojte, potreboval by som pomôcť,
mám spravený formulár a funguje v poriadku akurát niekedy mi príde správny email s nevyplneným formulárom, i keď v ňom mám podmienku, kt. prikazuje vyplniť všetky údaje a aj funguje.
Odosiela to iba poslednú časť ofrmulára (ako keby sa refrešla posledná stránka, ktorá zabezpečuje odosielanie).
zabezpečil som to takto:
<p><strong>Odoslanie objednávky:</strong></p>
<? $headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
?>
<?

$text="";
$row = split(";", $basket);
for ($i = 0;$i<sizeof($row)-1;$i++)
{
$text = $text.$row[$i]."";
}
$text = $text." ";

$udaje_text="";
$udaje_rw = split(";", $udaje);
for ($i = 0;$i<sizeof($udaje_rw);$i++)
{
$udaje_text = $udaje_text.$udaje_rw[$i]."\n";
}
?></p></font>

<?
echo(ereg_replace("\n","<br>",$text));
echo("<br><br><p><strong>Na adresu:</strong></p>");
echo(ereg_replace("\n","<br>",$udaje_text));

if(empty($text) || empty($udaje_text) || empty($zahlavi))

{
echo ("Chyba");
die;
}
else
{

if (@mail("t.masko@gmail.com","Objednávka na tovar z www.nikomi.sk",$text."\n\n".$udaje_text.$zahlavi))
{
echo("<br><p><strong>Objednávka bola odoslaná </strong></p>");
}
else
{
echo("<br><p>Chyba : <strong>Objednávka nebola odoslaná, skontrolujte si správnosť všetkých údajov! </strong></p>");
}
}

?>
lenže problém je že keď tam dám die; neodošle mi to formulár aj keď je vyplnený... nevedeli by ste mi nejak poradiť ?
Ďakueje
mzk
Profil *
margotka:
lenže problém je že keď tam dám die;
pokud myslíš to die na řádku 32: to by teda mělo znamenat, že je podmínka splněna -> ukončí se script -> neodešle se mail

kdyžtak sem hoď celý kód..
---------------------------------------------------------------------------------------------------
ale máš to dost nepřehledně psaný - žádný odsazení... blbě se v tom orientuje
margotka
Profil
Toto je prvá časť kt. sa volá send.php a z nej sa vlastne kliknutím na tlačidlo Potvrdiť dostávame na odoslanie údajov, kde bol ucedený aj ten die

<?      echo("<b>Meno, priezvisko:</b>&nbsp;&nbsp;".ereg_replace("\"","",$meno)."<br>");
    echo("<b>Mesto:</b>&nbsp;&nbsp;".ereg_replace("\"","",$mesto)."<br>");
    echo("<b>Ulica:</b>&nbsp;&nbsp;".ereg_replace("\"","",$ulica)."<br>");
    echo("<b>PSČ:</b>&nbsp;&nbsp;".ereg_replace("\"","",$psc)."<br>");
    echo("<b>Telefón:</b>&nbsp;&nbsp;".ereg_replace("\"","",$tel)."<br>");
    echo("<b>E-Mail:</b>&nbsp;&nbsp;".ereg_replace("\"","",$email)."<br>");
    echo("<b>IČO:</b>&nbsp;&nbsp;".ereg_replace("\"","",$ico)."<br>");
    echo("<b>IČ DPH:</b>&nbsp;&nbsp;".ereg_replace("\"","",$icdph)."<br><br>");
    echo("<b>Poznámka:</b><br>".ereg_replace("\"","",$pozn)."<br>");
?>
<?
$udaje = "Meno: ".$meno.";"."Mesto: ".$mesto.";"."Ulica: ".$ulica.";"."PSČ: ".$psc.";"."Tel: ".$tel.";"."E-mail: ".$email.";"."IČO: ".$ico.";"."IČDPH: ".$icdph.";".";"
 ."POZNÁMKA: ".$pozn.";";
        $tmp = ereg_replace("\"","",$udaje);
        $udaje=$tmp;
?></p>
<table border="0">
        <form name="frm1" method="post" action="odoslane.php">
            <input type="hidden" name="udaje" value="<?echo($udaje)?>">
            <input type="hidden" name="basket" value="<?echo($basket)?>">
            <input type="hidden" name="where" value="9">
        </form>
</table>

a druhá časť kt. sa volá odoslané.php

<table width="540" border="0" cellpadding="0" cellspacing="0">
      

      <tr class="txt">
        <td>
        <p><strong>Odoslanie objednávky:</strong></p>
<? $headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";?>
<?     $text="";
      $row = split(";", $basket);
        for ($i = 0;$i<sizeof($row)-1;$i++)
            {
            $text = $text.$row[$i]."";
            }
    $text = $text." ";
    $udaje_text="";
    $udaje_rw = split(";", $udaje);
        for ($i = 0;$i<sizeof($udaje_rw);$i++)
            {
            $udaje_text = $udaje_text.$udaje_rw[$i]."\n";
            }
?>

<?    echo(ereg_replace("\n","<br>",$text));
    echo("<br><br><p><strong>Na adresu:</strong></p>");
    echo(ereg_replace("\n","<br>",$udaje_text));

        if(empty($text) || empty($udaje_text) || empty($headers))
            {
            echo ("Chyba");
            die;
            }
        
        else{
            if (@mail("moj@gmail.com","Objednávka na tovar z www.web.sk",$text."\n\n".$udaje_text.$zahlavi))
                {
                echo("<br><p><strong>Objednávka bola odoslaná </strong></p>");
                }
            }

?>

        </td>
      </tr>

</table>
Virtus
Profil
No tak jestli ta druhá část (odeslané.php) je celý kód, tak se ti to nikde neodešle, protože:
if(empty($text) || empty($udaje_text) || empty($zahlavi))
/*
proměnná $zahlavi, není nikde definovaná, respektive, začne "existovat" až v momentě, kdy se ptáš, jestli je empty, a vten moment, do ní PHP přiřadí hodnotu NULL,
neměla by tam místo ní být proměnná $headers?
*/
margotka
Profil
jo mala, mal som to /*odlmčané*/ a zabudol som to prepísať počas toho ako sa stým dnes prplem... ale mne príde email vždy keď ho vyplním... vždy... problém je v tom, že niekdy mi prídu prázdne maily ako keby sa iba posledná stránka odoslane.php dala natvrdo do prehliadača a dokolo sa refrešovala... vtedy chodia prázdne maily iba s hlavičkou... a neviem ako tam mám spraviť nejakú podmienku, ktorá tomu zabráni.
Virtus
Profil
Takže email který vám příde prázdný, obsahuje pouze hlavičky a předmět bez textu?
v takovém případě si tam zkuste přidat tenhle kód:
ob_start();
var_dump($text);
$varDumpText = ob_get_contents();
ob_end_clean();
$text .= '<hr/>' . $varDumpText . '<hr/>';
 if (@mail("moj@gmail.com","Objednávka na tovar z www.web.sk",$text."\n\n".$udaje_text.$zahlavi)){
 .....
přidá Vám to do obsahu emailu čáru a pod ní to vypíše typ a obsah proměnné $text a pod to opět čáru, takhle si ověříte, jestli PHP opravdu odesílá prázdný email a jestli to dělá vůbec daný PHP script. A ještě drobnost, funkce ereg_replace() je už celkem dlouho deprecated, použijte místo ní ratši preg_replace() a to samé funkce split(), místo toho ratši explode()
Tori
Profil
Pár drobností: (čísla řádků budou vzhledem k [#1]):
- ř.9: V cyklu tímhle zadáním: for ($i = 0;$i<sizeof($row)-1;$i++) vynecháváte poslední položku. Je to úmysl?
- ř.28: if(empty($text) - podmínka nebude nikdy splněna, $text vždy obsahuje alespoň mezeru (přidáváte ji na ř.13).
- místo $text = $text.$row[$i]; je poněkud přehlednější psát $text .= $row[$i];
- jelikož jen vyhazujete uvozovky, dá se místo ereg_replace použít i obyčejná str_replace
margotka
Profil
Virtus:
mohli by ste mi prosím poradiť ako a kam presne zakomponovať tento kóh? nejak mi to nie je jasné :)
Virtus
Profil
<table width="540" border="0" cellpadding="0" cellspacing="0">
      
 
      <tr class="txt">
        <td>
        <p><strong>Odoslanie objednávky:</strong></p>
<? $headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";?>
<?     $text="";
      $row = split(";", $basket);
        for ($i = 0;$i<sizeof($row)-1;$i++)
            {
            $text = $text.$row[$i]."";
            }
    $text = $text." ";
    $udaje_text="";
    $udaje_rw = split(";", $udaje);
        for ($i = 0;$i<sizeof($udaje_rw);$i++)
            {
            $udaje_text = $udaje_text.$udaje_rw[$i]."\n";
            }
?>
 
<?    echo(ereg_replace("\n","<br>",$text));
    echo("<br><br><p><strong>Na adresu:</strong></p>");
    echo(ereg_replace("\n","<br>",$udaje_text));
 
        if(empty($text) || empty($udaje_text) || empty($headers))
            {
            echo ("Chyba");
            die;
            }
        
        else{
            ob_start();
            var_dump($text);
            $varDumpText = ob_get_contents();
            ob_end_clean();
            $text .= '<hr/>' . $varDumpText . '<hr/>';
            if (@mail("moj@gmail.com","Objednávka na tovar z www.web.sk",$text."\n\n".$udaje_text.$zahlavi))
                {
                echo("<br><p><strong>Objednávka bola odoslaná </strong></p>");
                }
            }
 
?>
 
        </td>
      </tr>
 
</table>

a přesně jak psal/a Tori:
- ř.28: if(empty($text) - podmínka nebude nikdy splněna, $text vždy obsahuje alespoň mezeru (přidáváte ji na ř.13).

v [#3] to máte akorát na řádku 15, když si tohle tedy zkusíte poslat tak by Vám v emailu mělo přijít něco takového, pokud Vám přijde "prázdný" email:
---------------------------------------------------------------------------------------------------
string(1) " "
---------------------------------------------------------------------------------------------------


Edit:
Ještě poznámka k té podmínce:
 if(empty($text) || empty($udaje_text) || empty($headers))
$udaje_text = bude vždycky obsahovat minimálně: string(1) "\n", protože splituje na řádku 17 ( $udaje_rw = split(";", $udaje); ), a i když je proměnná $udaje prázdná, do proměnné $udaje_rw se vám uloží tohle:
array(1) {
  [0] =>
  string(0) ""
}
Tudíž Vám alespoň jednou ten cyklus for hned pod tím projde.
margotka
Profil
Virtus:
neviem či som to teda pochopil správne, ak teda mám prsunúť podmienku if(empty($text) || empty($udaje_text) || empty($headers))
na trinásty riadok má to vyzerať takto?
<? $headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";?>
<?     $text="";
      $row = split(";", $basket);
        for ($i = 0;$i<sizeof($row)-1;$i++)
            {
                if(empty($text) || empty($udaje_text) || empty($headers))
            {
            echo ("Chyba");
            die;
            }
            $text = $text.$row[$i]."";
            }
    $text = $text." ";
    $udaje_text="";
    $udaje_rw = split(";", $udaje);
        for ($i = 0;$i<sizeof($udaje_rw);$i++)
            {
            $udaje_text = $udaje_text.$udaje_rw[$i]."\n";
            }
?>
 
<?    echo(ereg_replace("\n","<br>",$text));
    echo("<br><br><p><strong>Na adresu:</strong></p>");
    echo(ereg_replace("\n","<br>",$udaje_text));
 
        
        
         
            ob_start();
            var_dump($text);
            $varDumpText = ob_get_contents();
            ob_end_clean();
            $text .= '<hr/>' . $varDumpText . '<hr/>';
            if (@mail("t.masko@gmail.com","Objednávka na tovar z www.web.sk",$text."\n\n".$udaje_text.$zahlavi))
                {
                echo("<br><p><strong>Objednávka bola odoslaná </strong></p>");
                }
            
 
?>
Virtus
Profil
Zkuste něco takového:
<table width="540" border="0" cellpadding="0" cellspacing="0">


      <tr class="txt">
        <td>
        <p><strong>Odoslanie objednávky:</strong></p>
<?

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

$text = "";
if( !empty( $basket ) ){
    $row = explode(';', $basket);
    for( $i = 0; $i < sizeof( $row ) - 1; $i++ ){
        $text .= $row[$i];
    }
}

if( !empty( $text ) ){
    $text .= ' ';
}

if( empty( $udaje ) ){
    $udaje_rw = array();
    $udaje_text = "";
} else {
    $udaje_rw = explode(';', $udaje);
    for( $i = 0; $i < sizeof( $udaje_rw ); $i++ ){
        $udaje_text .= $udaje_rw[$i]."\n";
    }
}

echo( ereg_replace("\n",'<br>',$text) );
echo '<br><br><p><strong>Na adresu:</strong></p>';
echo(ereg_replace("\n",'<br>', $udaje_text));

if( empty( $text ) || empty( $udaje_text ) ){
    echo 'Chyba';
    die();
} else {
    if( @mail('moj@gmail.com', 'Objednávka na tovar z www.web.sk', $text . "\n\n" . $udaje_text . $headers ) ){
        echo '<br><p><strong>Objednávka bola odoslaná </strong></p>';
    }
}

?>

        </td>
      </tr>
</table>
margotka
Profil
Virtus
No skúsil som, ale nepríde mi email ani keď mám vyplnený formulár
Tori
Profil
margotka:
nepríde mi email ani keď mám vyplnený formulár
Tak to už je jiný problém, ne? Mohl třeba skončit v koši na spam. Anebo se vůbec neodeslal - třeba proto, že hlavičky mají být jako čtvrtý parametr, ne přilepené k obsahu zprávy.
Virtus
Profil
Pokud jste to ještě stále nevyřešil, zkuste odstranit ten zavináč před tou funkcí mail, jestli vám to nebude hlásit nějakou chybu, i když by tedy asi nemělo a pokud programujete na ubuntu tak si můžete zkusit zobrazit log odeslaných/neodeslaných emailů: cat /var/log/mail.log, na jiných systémech nevím kde jsou logy
margotka
Profil
Virtus:
Funguje... :))
odstránil som zavináč a ide to
Ďakujem vám veľmi pekne za rady Virtus: Tori:
margotka
Profil
Ešte by som sa Vás predsa len chcel spýtať na jednu vec, nechce mi to odosielať s diakritikou, a neviem kam má zakomponovať ten $headers aby mi to prešlo. pretože mail mi príde len keď som headers vyhodil tak ako hovoril Tori a potom to funguje, ale tá diakritika nie.
Tori
Profil
Nepsala jsem vyhodit, ale dát samostatně jako čtvrtý parametr. Ohledně diakritiky se koukněte do FAQ: Nejčastější potíže s PHP (FAQ) » Kódování e-mailu, aneb abychom neposílali otazníky.

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: