Autor Zpráva
james2210
Profil
Ahojte

Snažím sa spraviť upozornenie na novu súkromnú spravu na e-mail , problém je v tom že mi to nevypíše žiadnu chybu a potom neviem kde je chyba lebo údaje z formulára mi uloží do DB - to funguje ale žiadny e-mail mi o novej sprave nepríde

vyskúšal som už asi x rôznych návodov ktoré som si trocha poopravil ale stále s rovnakým výsledkom.
takže by som asi potreboval stým trocha pomôcť.

<?php
    if (isset($_REQUEST['do-kontaktuj']))
    {                                                                                                                       
                                                                                                                                                                                                                        
            $nazov_spravy            = addslashes(trim($_REQUEST['nazov_spravy']));                                
            $obsah_spravy            = addslashes(trim($_REQUEST['obsah_spravy']));                                
            $komu_poslat             = 8; // pre administratora                                                                                                                                                     
            $e_mail_ziadatela        = addslashes(trim($_REQUEST['e_mail_ziadatela']));                                                                                               
            $precitane                   = 0;                                                                           
            $dvolezita                    = 1;                                                                         
      
      // Štart : udaje pre odoslanie e-mail
        
        // trim() - odstraňuje zbytečné mezery a řádky.
        // htmlspecialchars() - převádí specifické symboly do HTML entit, proto, aby jsme zabránili nejjednoduššímu pokusu o hacknutí stránky. 
        // substr($_POST['title'], 0, 1000) - omezujeme text do 1000 znaků.

              $title                      = substr(htmlspecialchars(trim($_POST['nazov_spravy'])), 0, 1000);           
              $mess                    = substr(htmlspecialchars(trim($_POST['obsah_spravy'])), 0, 1000000);        
              $to                         = 'xxx221@gmail.com';                                                                        
              $from                     = addslashes(trim($_REQUEST['e_mail_ziadatela']));                          
      
      // End : udaje pre odoslanie e-mail
    
        $errs = array();
        
        if (!$nazov_spravy)
            $errs[] = "Nevyplnili ste <b>predmet správy</b>.";
            
        if (!$obsah_spravy)
            $errs[] = "Nevyplnili ste <b>obsah spávy</b>.";
            
        if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $e_mail_ziadatela)) // Jestli pole email vyplněno špatně 
            $errs[] = "Nevyplnili ste <b>E-mal</b>.";
                    
        if (!$errs)
        {
    
             // Štart : dalšie údaje pre odoslanie e-mailu
    
               $headers  = 'MIME-Version: 1.0' . "\r\n";
               $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
               $headers .= 'From: Koding.cz<info@koding.cz>'. "\r\n";
      
               if(mail($to, $title, $mess, $headers)) {
                  echo 'Děkujeme! Váš dopis byl odeslán.';
               }else{
                  echo 'Dopis nebyl odeslán';
               }
               
             // End : dalšie údaje pre odoslanie e-mailu
             
                 
             if (mysql_query("insert into spravy values (NULL, '$nazov_spravy', '$obsah_spravy', '$komu_poslat', '$od_koho', '$e_mail_ziadatela', now() ,'$precitane', '$dvolezita') "))          
                die (redirect("."));    // die (redirect("./?okay=true"));
            else
                echo(mysql_error ());
        }
        else
        {
            foreach ($errs as $err)
            {
                echo "<p>$err</p>\n";
            }
        }
    
    }
    
    ?>
james2210
Profil
problém som už vyriešil
Jan Kozák
Profil
To je dobře. A jak jsi to udělal? Když na to koukám, myslím, že jsi to všechno zahodil a začal od začátku.
james2210
Profil
nezačal som od začiatku , len som to troch upravil postupnosti ale najväčší problém bol že som to skúšal na localhoste ale keď som to nahral na server tak to záhadne začalo fungovať

asi som nemal niečo nastavené na localhoste preto to nefungovalo. asi bol problém v smtp protokol.
to je môj odhad kde bol problém , ale hlavná vec že mi to už funguje.
Keeehi
Profil
james2210:
Ano, problém he opravdu Jen v tom, že jsi to testoval na localhostu. Tam sis zprovoznil webserver a na něm testoval stránky. Ovšem pro úspěšné odeslání emailu to není všechno. Na to je potřeba mít na tom stroji nainstalovaný taky mailserver. Což hostingy normálně mívají a proto emaily od tamtud chodí.
Pokud ti na localhostu stačí jen otestovat, jak pak bude email vypadat, tak pro Windows jsem si oblíbil www.toolheap.com/test-mail-server-tool Je to geniálně jednoduché, žádná složitá instalace nebo integrace do operačního systému.
Jan Kozák
Profil
Dobře, řekněme si o některých věcech, ve kterých je ten skript málo vhodný:
- Nepoužívej pole $_REQUEST, může dojít ke kolizi názvů. Stejně dobře víš, že data budou odeslána metodou post.
- Nemíchej české a anglické názvy proměnných. Za chvíli už nebudeš vědět, jaký je rozdíl mezi obsahem proměnné mess a obsah_spravy. Nepoužívej dva jazyky na rozlišení obsahu proměnné. A ty popisuj tak, abys stále věděl, co obsahují.
- Používáš špatnou escapovací funkci. Addslashes v životě prakticky nevyužiješ. Pro escapování řetězce při ukládání do DB použij fci mysql_real_escape_string.
- V aktuálních verzích PHP jsou mysql_* funkce označené jako deprecated.
- Na ostré verzi webu nevypisuj chybové hlášky.
- Při vkládání dat do databáze nespoléhej na pevné pořadí sloupců.
Najdi si pořádnou učebnici. A na tutoriál, který používáš, raději rychle zapomeň.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0