Avatar billede Slettet bruger
19. august 2007 - 18:28 Der er 27 kommentarer og
1 løsning

Kontrol af email

Hej.

Jeg har en linie der kontrollere om en email er tilsyneladende  rigtig, men skriver man et navn og @ så går den videre, men skriver jeg f. eks. ole @ virker kontrollen, skriver jeg ole@ så sender den mailen. Nu bruger jeg mit navn, men det var med et andet. Der skal jo være et domænenavn og .dk eller noget andet. Er der fejl i denne linie ?

$regexp = "/^\w(\.?[\w-])*@\w(\.?[-\w])*\.[a-z]{2,4}$/i";
if(preg_match($regexp, $email)) {
.............

På forhånd tak.

Ole.
Avatar billede nielle Nybegynder
19. august 2007 - 18:39 #1
Den løsning du har der vil ikke godkende:

ole@

Der skal være moget bag @-tegnet før at den siger ok.
Avatar billede Slettet bruger
19. august 2007 - 18:42 #2
Hvad er der så galt ? Hvis jeg skriver navn@ og ikke noget bagefter, sender den og det giover jo en fejl i postsystemet.
Det er bare mystisk, synes jeg.
Avatar billede nielle Nybegynder
19. august 2007 - 18:42 #3
Kan du prøve at give et eksempel på noget mere kode hvor du reproducere fejlen?
Avatar billede nielle Nybegynder
19. august 2007 - 18:48 #4
Hvad giver dette f.eks.:

$email = "ole@";
$regexp = "/^\w(\.?[\w-])*@\w(\.?[\w-])*\.[a-z]{2,4}$/i";
if (preg_match($regexp, $email)) {
    echo "En korrekt email";
} else {
    echo "Ikke en korrekt emal";
}
Avatar billede Slettet bruger
19. august 2007 - 18:50 #5
Det kan jeg egentlig ikke, da det er et kørende systen, og jeg tør ikke rigtig lægge link til det her, så er der vel bare nogen der vil "lege". Det er nemlig ikke kun noget jeg bruger. Jeg kan smide hele filen ind, og så ved jeg ikke om du kan prøve på egen server ?

Det jeg er bange for er, at der måske har været nogen inde og pille, da jeg mener det har virker de sidste 2 eller 3 år uden dette problem.
Avatar billede nielle Nybegynder
19. august 2007 - 18:51 #6
Prøv mit kodeeksempel ovenfor og sig hvad det giver.
Avatar billede Slettet bruger
19. august 2007 - 18:57 #7
Hmm, det kan jeg ikke lige. Jeg har ikke en testserver kørende lige nu.

Måske kan jeg lige lave en lille midlertidig fil til test.

Jeg prøver lige.
Avatar billede Slettet bruger
19. august 2007 - 19:01 #8
Ok, svaret er:
Ikke en korrekt emal

så der virker den.
Avatar billede nielle Nybegynder
19. august 2007 - 19:02 #9
Så virker den også det andet sted. Det må være et adet sted at filem knækker...
Avatar billede Slettet bruger
19. august 2007 - 19:04 #10
Ok, men hvad dælen kan det så være ? Nogen ideer jeg kan se efter ?
Avatar billede nielle Nybegynder
19. august 2007 - 19:08 #11
For det skal jeg se noget mere kode.
Avatar billede Slettet bruger
19. august 2007 - 19:15 #12
Ja filen er lidt stor, men jeg kan jo smide den ind her. Men den kan ikke køres alene da der er flere filer hvor der kommer info med til denne fra tidligere side.

Men måske kan du se om der er opstået en fejl. Jeg kommer i tanler om at check på evt. tomme felter vist heller ikke er som det skal være.

Skal jeg kaste den ind ?
Avatar billede nielle Nybegynder
19. august 2007 - 19:17 #13
Prøv selv at lede efter fejlen til at starte med. Du kan jo lave sådan nogle s¨må tjek som det ovenfor til at eliminere fejlmulighederne.
Avatar billede Slettet bruger
19. august 2007 - 19:18 #14
Det er jeg vist ikke god nok til php til at kunne. Måske er dette nok:

function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;   
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}

$editFormAction = $HTTP_SERVER_VARS['PHP_SELF'];
if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
  $editFormAction .= "?" . $HTTP_SERVER_VARS['QUERY_STRING'];
}

if ((isset($HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form2")) {

$_SESSION['id'] = $_POST['id'];
$ny = $_POST['id'];
$_SESSION['skole'] = $_POST['skole'];
$_SESSION['adresse'] = $_POST['adresse'];
$_SESSION['postnummer'] = $_POST['postnummer'];
$_SESSION['Byen'] = $_POST['Byen'];
$_SESSION['laerer'] = $_POST['laerer'];
$_SESSION['Klasse'] = $_POST['Klasse'];
$_SESSION['deltager'] = $_POST['deltager'];
$_SESSION['telf'] = $_POST['telf'];
$SizeA = "75";
// $_SESSION['email'] = $_POST['email'];
$_SESSION["Film"] = $Film;
$_SESSION["Dag"] = $Dag;
$_SESSION["Dato"] = $Dato;
$_SESSION["Tid"] = $Tid;
$_SESSION['pris'] = $_POST['pris'];
$_SESSION["Plads"] = $Plads;
$_SESSION['kode'] = $_POST['kode'];
$email = $_POST['email'];
$pladser = $_SESSION["Plads"];
$deltag = $_SESSION['deltager'];

if ($pladser >= $deltag) {
$_SESSION["Plads"] = $Plads;
} else {
?>
  <center><font color="#FF0000">
  <?php
      echo 'Du kan ikke bestille så mange pladser ' . '!<br>Der er kun ' . $pladser . ' tilbage.<br><br>';
  ?>
  </font></center> 
<?php
}

if (!isset($_POST['form2']))
{
  $post_empty = 0;
  foreach ($_POST as $key => $value) {
      if ($_POST[$key] == "" || $_POST[$key] == NULL)
      {
        $post_emptykey[] = $key;
        $post_empty++;
      }
  }
  for ($i = 0; $i < $post_empty; $i++)
  {
  ?>
  <center><font color="#FF0000">
  <?php
      echo 'Du skrev ikke noget i '.$post_emptykey[$i].'!<br><br>';
      unset ($_SESSION['email']);
      unset ($_SESSION['kode']);
  ?>
  </font></center> 
<?php
}
}

$regexp = "/^\w(\.?[\w-])*@\w(\.?[-\w])*\.[a-z]{2,4}$/i";
if(preg_match($regexp, $email)) {
$_SESSION['email'] = $_POST['email'];
} else {
?>
<center><font color="#FF0000"><br>
<?php
echo 'Din e-mail adresse er ikke gyldig.';
unset ($_SESSION['email']);
?>
</font></center><br>
<?php
}

  $insertGoTo = "bekraeft.php?id=ny";
  if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
?>
Avatar billede Slettet bruger
19. august 2007 - 19:31 #15
Stop.

Jeg tror det er noget javascript der er gået ged i. Måske efter opdatering.

Der er et check der sender en kode og den kan man sende i systemet med ovennævnte forkerte mailadresse.

Den sender den nemlig, selvom den er forkert, og den er der jo ingen der modtager og giver en ndn.

Hvis ikke du ved en masse om javascript så smid et svar for din ulejlighed. Det fik mig til at tænke lidt længere :-)
Avatar billede nemlig Professor
19. august 2007 - 19:35 #16
Ikke for at blande mig i pointene - men mere for at give et bidrag, som jeg anvender med succes:
Jeg har følgende funktion:

function check_email($email) {
if((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) {
$host = explode('@', $email);
if (function_exists("checkdnsrr")) {
if(checkdnsrr($host[1].'.', 'MX') ) return TRUE;
if(checkdnsrr($host[1].'.', 'A') ) return TRUE;
if(checkdnsrr($host[1].'.', 'CNAME') ) return TRUE;
} else { return TRUE;}
}
return FALSE;
}


Og så tjekkter jeg emailadressen ($email) sådan her:

if(check_email($_POST['email']) === FALSE)
{
    echo "Emailadressen er indtastet forkert!<br>";
}
Avatar billede nielle Nybegynder
19. august 2007 - 19:43 #17
Du kan da prøve at poste dit javascript.
Avatar billede Slettet bruger
19. august 2007 - 19:52 #18
Tak for din function Nemlig.

Her er først input feltet.

    <tr valign="baseline">
      <td width="15%" nowrap align="right">e-mail:</td>
      <td width="50%" colspan="3"><input type="text" name="email" onChange="validateEmail(this.value);" value="<?php echo $_SESSION['email']; ?>" size="50">&nbsp;&nbsp; <img src="image/info.png" onMouseOver="myHint.show(4)"  onMouseOut="myHint.hide()"></td>
    </tr>

og så funktionen:
Avatar billede Slettet bruger
19. august 2007 - 19:53 #19
function validateEmail( email ){
  mailtemp = hex_md5(email);
  mailkode = mailtemp.substr(2,5);
  document.getElementById("EmailVindue").src = "SendKode.php?email="+email;
  document.getElementById("mailMessage").style.display = "block";
}

Æv, der er ikke noget der hedder trykke forkert - eller rettere stoppe det :)

Men denne function går videre til filen send og det skal den jo ikke når mai adressen er forkert.
Avatar billede nielle Nybegynder
19. august 2007 - 20:12 #20
Hvis du har et tjek på email i SendKode.php vil den ikke blive sendt. Du bør under alle omstændigheder altid følge op med en serverside-validering idet du ikke kan stole på sikkerheden i client-side validering.

Regelen er:

Clientside validering - til at *hjælpe* dine brugere og *ikke* andet.
Serverside validering - til at sikre din applikation imod ulovligt input (f.eks. fra hackertyper).
Avatar billede Slettet bruger
19. august 2007 - 20:21 #21
Ok. Smid et svar. Jeg er for træt til at rode mere nu. Jeg vil se på det igen i morgen.
Tak for hjælpen. Det hjælper altid med lidt input udefra, så er der noget at se efter. Send filen genererer kun en kode som brugeren skal bruge, men det duer ikke den sender ved forkerte mailadresser, så det vil jeg forske i. Det kan jo så give anledning til nye soørgsmål :)

Ole.
Avatar billede nielle Nybegynder
19. august 2007 - 20:25 #22
Svar :^)
Avatar billede Slettet bruger
20. august 2007 - 20:08 #23
Hmm, jeg mener at have sendt en kommentar her, men der er ikke noget nu.

Nemlig, jeg brugte din funktion til at checke mail, så vil du have lidt point så skriv det, så laver jeg et spørgsmål med points til dig.
Avatar billede nielle Nybegynder
20. august 2007 - 20:19 #24
Jeg behøver ikke at få flere point end jeg allerede har fået, men ellers tak for tilbudet. :^)
Avatar billede Slettet bruger
20. august 2007 - 20:22 #25
Det var jo også nemlig som sendte en funktion :) og han fik jo ikke noget, men nu har jeg brugt funktionen, og så ville jeg jo gerne give lidt for den.
Avatar billede nemlig Professor
20. august 2007 - 20:25 #26
Ellers tak - det var ikke netop ikke for at få andel i noget, men mere for at bidrage.
Nielle har givet nogle rigtig gode bidrag, og jeg er meget enig i Nielle's betragtninger om at Javascript er godt til klientsiden, og PHP til serversiden.
Avatar billede nielle Nybegynder
20. august 2007 - 20:27 #27
Ahh på den måde. Mislæste dit indlæg. ;^)
Avatar billede Slettet bruger
20. august 2007 - 20:32 #28
Okay. Så siger jeg tusind tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester