[ damakii @ 10.09.2011. 19:51 ] @
Zdravo, imam sljedeci kod za upis podataka u bazu. Interesuje me kako ga modifikovati da upisuje samo e-mail format u bazu, a za sve ostalo da ispise da format nije validan. Evo koda:
---------------------------------
Code:
<?php
include('konekcija.php');
// Get values from form 
$email = $_POST['email'];
$date = date("d.m.Y.");
if (!$email)
  {
     echo 'Molimo upišite Vaš e-mail'; 
     exit;
  }
// Insert data into mysql 
$sql ="INSERT INTO newsletter (email,datum_upisa) VALUES ('$email', '$date')";
$result=mysql_query($sql);
// if successfully insert data into database, displays message "Successful".
if($result) {
echo "Uspješno ste upisali Vaš e-mail.";
}
else {
echo "Greška pri upisu e-maila u bazu.";
}
// close connection
mysql_close();
?>

---------------------------------
Molim pomoc.

[Ovu poruku je menjao flylord dana 10.09.2011. u 21:15 GMT+1]
[ Zlatni_bg @ 11.09.2011. 05:10 ] @
Code:

function check_email_address($email) {
  // First, we check that there's one @ symbol, 
  // and that the lengths are right.
  if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
    // Email invalid because wrong number of characters 
    // in one section or wrong number of @ symbols.
    return false;
  }
  // Split it into sections to make life easier
  $email_array = explode("@", $email);
  $local_array = explode(".", $email_array[0]);
  for ($i = 0; $i < sizeof($local_array); $i++) {
    if
(!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&
↪'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$",
$local_array[$i])) {
      return false;
    }
  }
  // Check if domain is IP. If not, 
  // it should be valid domain name
  if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) {
    $domain_array = explode(".", $email_array[1]);
    if (sizeof($domain_array) < 2) {
        return false; // Not enough parts to domain
    }
    for ($i = 0; $i < sizeof($domain_array); $i++) {
      if
(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|
↪([A-Za-z0-9]+))$",
$domain_array[$i])) {
        return false;
      }
    }
  }
  return true;
}


Posle samo ubacis ovu funkciju u svoj kod, odradis provere, ukoliko funkcija vraca tacnu vrednost, upisuje se u bazu, ukoliko ne, izbacuje gresku.
[ damakii @ 11.09.2011. 07:11 ] @
Hvala puno na odgovoru, ali mi nesto ne ide uglavljivanje mog koda u ovaj tvoj. Negdje grijesim :(
[ Milan Kragujevic @ 11.09.2011. 08:33 ] @
Code (php):

<?php
function check_email_address($email) {
  // First, we check that there's one @ symbol,
  // and that the lengths are right.
  if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
    // Email invalid because wrong number of characters
    // in one section or wrong number of @ symbols.
    return false;
  }
  // Split it into sections to make life easier
  $email_array = explode("@", $email);
  $local_array = explode(".", $email_array[0]);
  for ($i = 0; $i < sizeof($local_array); $i++) {
    if
(!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&
↪'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$"
,
$local_array[$i])) {
      return false;
    }
  }
  // Check if domain is IP. If not,
  // it should be valid domain name
  if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) {
    $domain_array = explode(".", $email_array[1]);
    if (sizeof($domain_array) < 2) {
        return false; // Not enough parts to domain
    }
    for ($i = 0; $i < sizeof($domain_array); $i++) {
      if
(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|
↪([A-Za-z0-9]+))$"
,
$domain_array[$i])) {
        return false;
      }
    }
  }
  return true;
}
include('konekcija.php');
// Get values from form
$email = mysql_real_escape_string($_POST['email']);
$date = date("d.m.Y.");
if (!$email)
  {
     echo 'Molimo upišite Vaš e-mail';
     exit;
  }
if(!check_email_address($email)) {
     echo 'E-mail nije validan';
exit;
// Insert data into mysql
$sql ="INSERT INTO newsletter (email,datum_upisa) VALUES ('$email', '$date')";
$result=mysql_query($sql);
// if successfully insert data into database, displays message "Successful".
if($result) {
echo "Uspješno ste upisali Vaš e-mail.";
}
else {
echo "Greška pri upisu e-maila u bazu.";
}
// close connection
mysql_close();
?>
 
[ damakii @ 11.09.2011. 18:41 ] @
Negdje i ovaj kod ima problem, na submit se nista ne desi.
[ Milan Kragujevic @ 11.09.2011. 18:49 ] @
Pejstuj kompletnu stranicu ovde
[ Milan Kragujevic @ 11.09.2011. 19:23 ] @
Code (php):


<?php
function check_email_address($email) {
  // First, we check that there's one @ symbol,
  // and that the lengths are right.
  if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
    // Email invalid because wrong number of characters
    // in one section or wrong number of @ symbols.
    return false;
  }
  // Split it into sections to make life easier
  $email_array = explode("@", $email);
  $local_array = explode(".", $email_array[0]);
  for ($i = 0; $i < sizeof($local_array); $i++) {
    if
(!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&
↪'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$"
,
$local_array[$i])) {
      return false;
    }
  }
  // Check if domain is IP. If not,
  // it should be valid domain name
  if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) {
    $domain_array = explode(".", $email_array[1]);
    if (sizeof($domain_array) < 2) {
        return false; // Not enough parts to domain
    }
    for ($i = 0; $i < sizeof($domain_array); $i++) {
      if
(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|
↪([A-Za-z0-9]+))$"
,
$domain_array[$i])) {
        return false;
      }
    }
  }
  return true;
}
include('konekcija.php');
// Get values from form
$email = mysql_real_escape_string($_POST['email']);
$date = date("d.m.Y.");
if (!$email)
  {
     echo 'Molimo upišite Vaš e-mail';
     exit;
  }
if(!check_email_address($email)) {
     echo 'E-mail nije validan';
exit;
// Insert data into mysql
$sql ="INSERT INTO newsletter (email,datum_upisa) VALUES ('$email', '$date')";
$result=mysql_query($sql) or die(mysql_error());
// if successfully insert data into database, displays message "Successful".
if($result) {
echo "Uspješno ste upisali Vaš e-mail.";
}
else {
echo "Greška pri upisu e-maila u bazu.";
}
// close connection
mysql_close();
?>

 
[ damakii @ 11.09.2011. 19:36 ] @
Hvala mnogo na brzim odgovorima, ali opet se nista ne desava. :((((((((

izvini sto sam dosadan.
[ Zlatni_bg @ 11.09.2011. 23:34 ] @
A Milane, gde ti je else ovde? Napisao si samo sta se desava ukoliko je pogresno unesen e-mail ili nije unesen uopste, al' nisi napisao sta se desava ako je tacno upisan. U tome je problem.
[ ivan.a @ 12.09.2011. 01:03 ] @
Rekao bih da su veoma loše napisani ovi gornji primeri.
ereg funkcija je odavno deprecated - http://php.net/manual/en/function.ereg.php

Za proveru maila možeš jednostavno koristiti regex:
Code:
if (!preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i", $mail))
 { 
 echo "Email adresa nije validna"; 
 }
  else  {
         echo "Email adresa je validna.";
         }
[ damakii @ 12.09.2011. 10:03 ] @
Meni i dalje ne radi, bas me j... ovaj kod :))))))). Pomagajte ljudi.
[ vatri @ 12.09.2011. 11:54 ] @
Ovaj kod gore radi 100%-probao sam kod sebe. Ti imas negdje drugdje problem.
[ ivan.a @ 13.09.2011. 02:18 ] @
Citat:
damakii: Meni i dalje ne radi, bas me j... ovaj kod :))))))). Pomagajte ljudi.
Napiši ceo kod sa gornjim primerom (stavi ga izmedju [code ] i [ / code ] tagova) pa ćemo rešiti problem. :)
Verovatno si propustio neku sitnicu...
[ damakii @ 13.09.2011. 14:13 ] @
01.php ima sljedeći kod:

Code (php):
 
<form id="form" name="form" method="post" action="insertmail2.php">
<table width="220" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="5" class="dezure"></td>
</tr>
<tr>
<td class="dezure"><input name="email" type="text" disabled="disabled" class="newsedit" id="email" /></td>
</tr>
<tr>
<td height="3" class="dezure"></td>
</tr>
<tr>
<td align="left" valign="middle" class="dezure"><input name="button" type="submit" class="newsdugme" id="button" value="Spasi" />
</td>
</tr>
</table>
</form>
 


A insermail2.php ima kod koji je napisao Milan:

Code (php):

<?php
function check_email_address($email) {
  // First, we check that there's one @ symbol,
  // and that the lengths are right.
  if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
    // Email invalid because wrong number of characters
    // in one section or wrong number of @ symbols.
    return false;
  }
  // Split it into sections to make life easier
  $email_array = explode("@", $email);
  $local_array = explode(".", $email_array[0]);
  for ($i = 0; $i < sizeof($local_array); $i++) {
    if
(!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&
↪'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$"
,
$local_array[$i])) {
      return false;
    }
  }
  // Check if domain is IP. If not,
  // it should be valid domain name
  if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) {
    $domain_array = explode(".", $email_array[1]);
    if (sizeof($domain_array) < 2) {
        return false; // Not enough parts to domain
    }
    for ($i = 0; $i < sizeof($domain_array); $i++) {
      if
(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|
↪([A-Za-z0-9]+))$"
,
$domain_array[$i])) {
        return false;
      }
    }
  }
  return true;
}
include('konekcija.php');
// Get values from form
$email = mysql_real_escape_string($_POST['email']);
$date = date("d.m.Y.");
if (!$email)
  {
     echo 'Molimo upišite Vaš e-mail';
     exit;
  }
if(!check_email_address($email)) {
     echo 'E-mail nije validan';
exit;
// Insert data into mysql
$sql ="INSERT INTO newsletter (email,datum_upisa) VALUES ('$email', '$date')";
$result=mysql_query($sql) or die(mysql_error());
// if successfully insert data into database, displays message "Successful".
if($result) {
echo "Uspješno ste upisali Vaš e-mail.";
}
else {
echo "Greška pri upisu e-maila u bazu.";
}
// close connection
mysql_close();
?>
 


Jednostavno ne radi, nista se ne desi. kada kliknem na "Spasi" na formi, otvori mi se insertmail2.php ali sa praznim ekranom, ništa nije ispisano. kako da ovo prilagodim. konekcija.php je ok jer mi radi kod ostalih formi bez problema. Dakle ovdje je neki problem u ovom insertmail2.php

Hvala puno na pomoći.

Dakipro:ispravljeni CODE tagovi

[Ovu poruku je menjao dakipro dana 13.09.2011. u 15:28 GMT+1]
[ dakipro @ 13.09.2011. 14:26 ] @
Kreni redom da dampujes post, promenjivu po promenjivu i prati dokle i kako se izvrasava kod, mozda ulazi u neku pogresnu granu, mozda nesto ne obradjuje kako je zamisljeno. Naj brze resenje problema, mnogooog brze od cekanja sigurno.
Ukljuci error_reporting ako vec nisi i vidi dal izlazi neka greska (obicno iskoci gde je zapelo)
[ Goran Rakić @ 13.09.2011. 14:37 ] @
Code (php):

if(!check_email_address($email)) {
     echo 'E-mail nije validan';
     exit;
 


Već ti je rečeno, nedostaje zatvorenje if grane. Nauči najpre osnove programiranja.

Kada se izvrši, kroz kod pitaš da li ova funkcija vraća netačno.

Trebaš ispod exit; da dodaš zatvorenu vitičastu zagradu. Tada će upis u bazu da se dogodi ako su prethodno sve provere prošle.

Da si uključio prikaz grešaka, stranica ne bi bila prazna već bi se prikazala PHP greška da nedostaje zagrada.
[ damakii @ 13.09.2011. 15:01 ] @
Nisam vidio ovo uopšte, ok sada radi sve nakon dodavanja }.

Gorane zahvaljujem na kritici.
[ ivan.a @ 14.09.2011. 10:52 ] @
Pitanje je samo do koje verzije php-a će ti raditi, pošto će pomenuta funkcija biti izbačena. Čudi me da niko od programera to nije spomenuo...

Zameni celu check_email_address funkciju sa sledećim kodom:

Code:
function check_email_address($email) {

   if (!preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i", $email))
   return false;
            else
            return true;
}
[ tahuti @ 14.09.2011. 21:28 ] @
Code (php):

if(!filter_var($email, FILTER_VALIDATE_EMAIL))
  {
  echo "E-mail is not valid";
  }
else
  {
  echo "E-mail is valid";
  }
 
[ Goran Rakić @ 14.09.2011. 21:31 ] @
Konačno. Pet bambija ;)

Najbolje rešenje ako je PHP >= 5.2, a verovatno jeste.

[Ovu poruku je menjao Goran Rakić dana 14.09.2011. u 22:44 GMT+1]
[ ivan.a @ 15.09.2011. 01:22 ] @
S' tim što ovo prolazi kao validno:

[email protected]
nesto@domen (mada ovo može proći kao validno)
[email protected]..
nesto@domen.
nesto@[email protected]

...ima još "fail-ova" (u zavisnosti od verzije)
https://bugs.php.net/bug.php?id=49576

php filter ipak nije najbolje rešenje, čak je dosta korektniji prethodni primer. Možda kombinacija sa regex:
Code:
function check_email_address($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\./', $email);
}


[Ovu poruku je menjao ivan.a dana 15.09.2011. u 02:58 GMT+1]
[ Goran Rakić @ 15.09.2011. 01:57 ] @
Prve dve su validne adrese e-pošte: http://en.wikipedia.org/wiki/Email_address#Valid_email_addresses (ispravka: za drugu nisam siguran)

Ako želiš proveru da li adresa zaista postoji, onda ti ne može pomoći ni jedan regularni izraz.

Naravno, postoje situacije kada se možeš zadovoljiti polovičnim rešenjem i tada je neki skraćeni regularni izraz (koji poštuje samo najčešće primere iz standarda) sasvim upotrebljiv.

Što se ostalih primera tiče, kod mene na 5.3.6 rezultat je ispravan (ispravka: osim kod druge, gde možda zaista nije po standardu).


[Ovu poruku je menjao Goran Rakić dana 15.09.2011. u 03:15 GMT+1]
[ tahuti @ 15.09.2011. 07:15 ] @
email addresa izgleda

local@domain

dozvoljeni karakteri u local ! # $ % & ' * + - / = ? ^ _ ` . { | } ~

specijalni karakteri: space "(),:;<>@[\] mogu da se pojave pod odredjenim uslovima

Najbolji nacin da se sazna da li je pravi email je da ti odgovori na tvoj email, ostalo je pogadjanje ili odbacujes pravilan email kao Hotmail.

1- email mora da ima @ najmanje jedan
2- mora postojati barem jedan karakter ispred @
3- domain string je pravilno formulisan, http://tools.ietf.org/html/rfc3696
4- proveri da li DNS postoji
5- je li ti se neko javio na email?

Postoji puno pravila za validaciju emaila i to je "Holy Grail" za regexovce
[ ivan.a @ 15.09.2011. 14:51 ] @
U većini slučajeva mislim da je sasvim dovoljan regex, filter ili kombinacija oba. Međutim, ako je potrebna još bolja validacija može se koristiti nešto ovako:
http://dev.kohanaframework.org...k/system/helpers/valid.php#L20

Koristi se regex+filter+dns/mx navodeći se raznim pravilima vezanih za ispravnost email adrese http://www.w3.org/Protocols/rfc822/