Autor Zpráva
Akali
Profil
Ahoj, měl bych prosbu o upravu scriptu na kontrolu mailu

Mám tento script
<?php
ob_start();               // cachujeme vystup
  if(isset($_POST['sent'])){      // pokud byl odeslan formular pokracuj timto
    $jmeno=trim($_POST['jmeno']);
    $heslo1=$_POST['heslo1'];
    $heslo2=$_POST['heslo2'];
    $mail=trim($_POST['mail']);
    $web=trim($_POST['web']);
    $icq=trim($_POST['icq']);
    if($jmeno=="" or $heslo1=="" or $mail==""){ // pokud nebylo vyplněno něco z toho, co je povinné, dáme vědět a skript ukončíme
      $backlink="spatne_udaje_reg.php";
    }else{              // povinné udaje vyplněny vsechny
      require "db.php";     // pripojime se k databazi
      $PocetStejnych=mysql_result(mysql_query("SELECT COUNT(*) FROM `uzivatele` WHERE `jmeno`='$jmeno' OR `mail`='$mail'"), 0);
	  if($PocetStejnych!=0){    // pokud v db je jiz takove jmeno nebo heslo...
        $backlink="spatne_udaje_reg.php";
      }elseif($heslo1 != $heslo2){    // pokud se hesla nerovnají
        $backlink="spatne_udaje_reg.php";
      }else{            // hesla se shoduji, vlozime tedy data do databaze
        $heslo=md5($heslo1);  // zahashujeme heslo
        if($web=="http://" or $web==""){ //pokud nezadal web tak dame promennou web prazdnou
          $web="";
        }
        $VlozData=mysql_query("INSERT INTO uzivatele (jmeno,heslo,mail,ip_adresa,prava,icq) VALUES ('$jmeno', '$heslo', '$mail', '$web', '0', '$icq')") or die (mysql_error());
        // Vlozim do tabulky hodnoty - prvni je ID - nevyplnim, tvori se samo.
        // Jako posledni hodnota je "0", to jsou ty prava uzivatele.
		
        $backlink="reg_prijata.php"; // presmerovani s hlaskou ze je vse OK
      }

    }
  }else{
    $backlink="index.php?page=registrace&Alert=5";
  }
// pokud pouzijete HEADER LOCATION tak by pred nim nemelo byt zadne platne ECHO
//echo "<a href='index.php'>index</a>";
// samozrejme zde muze byt presmerovani na jinou stranku pomoci
 header ("Location: $backlink");
ob_end_flush();

?>


A potřebuju nějak udělat aby položka mail byly zkontrolována. Aby uživatel nenapsal do kolonky s mailem "na mail ti kašlu"

Je tu někdo ochotnej pomoci?
Joker
Profil
Návodů jak kontrolovat e-mailovou adresu je spousta.
Akali
Profil
Webů jsem prolezl spoustu. Ale žádný PHP kód se mi nepodařilo zapasovat do tohoto.
Aesir
Profil
Akali:
Můžete použít např. PHP fci filtr_var. Je tam i příklad, jak ji použít.
Medvídek
Profil
Akali:

//FUNKCE PRO KONTROLU EMAILOVE ADRESY
function zkontroluj_email($email) {
    $atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]'; // znaky tvořící uživatelské jméno
    $domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // jedna komponenta domény
    return eregi("^$atom+(\\.$atom+)*@($domain?\\.)+$domain\$", $email);
}

if(!zkontroluj_email($_POST["mail"])) echo "chyba";

nebo přímo 

<?php
if (!eregi('^[a-z0-9_]{1}[a-z0-9\-_]*(\.[a-z0-9\-_]+)*@[a-z0-9]{1}[a-z0-9\-_]*(\.[a-z0-9\-_]+)*\.[a-z]{2,6}$', $email))
{
    echo "nespravny format adresy";
}

?>
tiso
Profil
Medvídek: buď taký dobrý, a miesto skopírovania funkcie od Jakuba Vránu sem uvádzaj link, alebo ju aspoň skopíruj aj s komentárom a copyright at-tagom.
radas
Profil *
no ne že bych byl pesimista,ale ja už kontrolu e-mailu "vzdal", ikdyž bude nějaka zakladni kontrola emailu na webu klient si vždy najde cestu jak jsem docilit aby se vlk nažral a koza zustala cela...a nepomohl mi format emailové adresy ani kontrola domeny...fasfad@seznam.cz a na ten mail nic nepošleš ale kontrola projde..jediné co se mi osvědčilo bylo prostě posilat na registrovany e-mail odkaz s nějakým aktivačním kodem...byl bych rad kdyby třeba poradil nějaky lepší způsob...
Aesir
Profil
Medvídek:
Pozor na to, že funkce eregi je od 5.3 označena jako deprecated.

radas:
jediné co se mi osvědčilo bylo prostě posilat na registrovany e-mail odkaz s nějakým aktivačním kodem
Je to asi nejúčinnější kontrola toho, že má schránku s danou adresou skutečně uživatel pod kontrolou.
Akali
Profil
Byl by někdo ochotnej ty 2 scripta spárat do sebe, prostě mi to nejde.
mám tento HTML
<form action="reg_zpracuj.php" method="post">
  <input type="hidden" name="sent" value=""/>
                 <strong><a title="Povinný údaj">Už. jméno</a></strong> <br>
    <input type="text" name="jmeno" maxlength="32"/>*<br><br> 
                 <strong><a title="Povinný údaj - obě hesla se musí rovnat!">Heslo</a></strong> <br>
    <input type="password" name="heslo1" maxlength="32"/>* <br> <br>
                 <strong><a title="Povinný údaj - obě hesla se musí rovnat!">Heslo znovu</a> </strong><br>
    <input type="password" name="heslo2" maxlength="32"/>* <br> <br>
                 <strong><a title="Povinný údaj">Email</a></strong><br>
    <input type="text" name="mail" value="" maxlength="64"/>*<br> <br>
                  <strong>ICQ</strong><br>
    <input type="text" name="icq" value="" maxlength="64"/> <br> <br>
  <input type="submit" name="send" value="Registruj"/>
</form>
Akali
Profil
Nikdo
AM_
Profil
Pravděpodobně ne
Alphard
Profil
Akali:
Tak do podmínky
 if($jmeno=="" or $heslo1=="" or $mail==""){

doplňte
 if($jmeno=="" or $heslo1=="" or $mail=="" or !zkontroluj_email($mail)){

s tím, že funkci zkontroluj_email() sem dával Medvídek (je od Jakuba Vrány).
radas
Profil *
jen mi pořad neni jasne proč tam je ten hidden?
Dandim
Profil *
Mám menší problém s kontrolu mailů v PHP. Na webhostingu mi to jelo OK. Po změně hostingu mi to nějak nefunguje. Mám tuto funkci:
function JeEmail ($cislo) {
return filter_var($cislo, FILTER_VALIDATE_EMAIL);
}
Tato funkce je použita v podmínce:
if(!JeEmail($_POST["email"])) $chyba["spatnyemail"]=true;

Celou dobu mi to jelo, dle php.net není fce FILTER deprecated.
Nevím kde je chyba.
Dandim
Profil *
No mezitím jsem asi našel vysvětlení... předtím měl webhosting php 5.2 a teď na jiném je php 5.1.6.... a vypadá to tak že fce filter_var je poskytována až od verze 5.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:

0