Hallo

Ik ben bezig met een simpel registratie scriptje waar een email verificatie aan verbonden zit.

Hij gaat alleen steeds naar de melding: Geen geldig emailadres.

Terwijl het gewoon een geldig adres is.

Ziet iemand wat ik fout doe?

Ik werk op localhost met WAMP


Dit is mijn code.
<?php
include 'includes/header.php';
include 'connection/connection.php';

$msg='';

if(!empty($_POST['email']) && isset($_POST['email']) && !empty($_POST['password']) && isset($_POST['password']) && !empty($_POST['address']) && isset($_POST['address']) && !empty($_POST['postcode']) && isset($_POST['postcode']) && !empty($_POST['plaats']) && isset($_POST['plaats']) && !empty($_POST['land']) && isset($_POST['land']) )
{

// username and password sent from form
$email=mysqli_real_escape_string($connection,$_POST['email']);
$password=mysqli_real_escape_string($connection,$_POST['password']);
$address=mysqli_real_escape_string($connection,$_POST['address']);
$postcode=mysqli_real_escape_string($connection,$_POST['postcode']);
$plaats=mysqli_real_escape_string($connection,$_POST['plaats']);
$land=mysqli_real_escape_string($connection,$_POST['land']);

// regular expression for email check
$regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/';

if(preg_match($regex, $email))
{
$password=md5($password); // encrypted password
$activation=md5($email.time()); // encrypted email+timestamp
$count=mysqli_query($connection,"SELECT uid FROM users WHERE email='$email'");
// email check
if(mysqli_num_rows($count) < 1)
{
mysqli_query($connection,"INSERT INTO users(email,password,activation,address,postcode,plaats,land) VALUES('$email','$password','$activation','$address','$postcode','$plaats','$land')");
// sending email
include 'includes/Send_Mail.php';
$to=$email;
$subject="Email verificatie";
$body='Beste, <br/> <br/> Bedankt voor je aanmelding bij website! Klik op de volgende link om uw account te activeren. <br/> <br/> <a href="'.$base_url.'activation/'.$activation.'">'.$base_url.'activation/'.$activation.'</a>';

Send_Mail($to,$subject,$body);
$msg= "U bent geregistreerd, check alstublieft uw email voor de verificatiemail.";
}
else
{
$msg= 'Dit email adres is al in gebruik.';
}

}
else
{
$msg = 'Dit is geen geldig email adres.';
}

}
// HTML Part
?>

Dit is de connection file
<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'dbnaam');
$connection = @mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
$base_url='http://localhost/email_activation/';
?>

Activation.php

<?php
include '../connection/connection.php';
$msg='';
if(!empty($_GET['code']) && isset($_GET['code']))
{
$code=mysqli_real_escape_string($connection,$_GET['code']);
$c=mysqli_query($connection,"SELECT uid FROM users WHERE activation='$code'");

if(mysqli_num_rows($c) > 0)
{
$count=mysqli_query($connection,"SELECT uid FROM users WHERE activation='$code' and status='0'");

if(mysqli_num_rows($count) == 1)
{
mysqli_query($connection,"UPDATE users SET status='1' WHERE activation='$code'");
$msg="Uw account is geactiveerd!";
}
else
{
$msg ="Uw account is al actief, u hoeft niet meer te activeren.";
}

}
else
{
$msg ="Verkeerde activatiecode.";
}

}
?>

<?php echo $msg; ?>

Het email script:
<?php
function Send_Mail($to,$subject,$body)
{
require '../phpmailer/class.phpmailer.php';
$from = "[email protected]";
$mail = new PHPMailer();
$mail->IsSMTP(true); // use SMTP
$mail->IsHTML(true);
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Host = "tls://smtp.yourwebsite.com"; // SMTP host
$mail->Port = 465; // set the SMTP port
$mail->Username = "SMTP_Username"; // SMTP username
$mail->Password = "SMTP_Password"; // SMTP password
$mail->SetFrom($from, 'From Name');
$mail->AddReplyTo($from,'From Name');
$mail->Subject = $subject;
$mail->MsgHTML($body);
$address = $to;
$mail->AddAddress($address, $to);
$mail->Send();
}
?>

En als laatste het formulier:


        <div class="grid_6">
            <h2><span>Registreren</span></h2>
            <form class="form" method="post">
            	<div class="inputgroup">
                    <label for="emailadres">Emailadres:</label>
                    <input name="email" id="emailadres" value="" placeholder="Email-adres" type="text">
                </div>
            	<div class="inputgroup">
                    <label for="wachtwoord">Wachtwoord:</label>
                    <input name="password" id="wachtwoord" value="" placeholder="Wachtwoord" type="password">
                </div>
            	<div class="inputgroup">
                    <label for="adres">Adres:</label>
                    <input name="address" id="adres" value="" placeholder="Adres" type="text">
                </div>
            	<div class="inputgroup">
                    <label for="postcode">Postcode:</label>
                    <input name="postcode" id="postcode" value="" placeholder="Postcode" type="text">
                </div>
            	<div class="inputgroup">
                    <label for="plaats">Plaats:</label>
                    <input name="plaats" id="plaats" value="" placeholder="Plaats" type="text">
                </div>
            	<div class="inputgroup">
                    <label for="land">Land:</label>
                    <input name="land" id="land" value="" placeholder="Land" type="text">
                </div>
                <input type="submit" class="button" value="Registration" />
				<span class='msg'><?php echo $msg; ?></span>
        </div>

Sowieso maak je met de regel

$password=mysqli_real_escape_string($connection,$_POST['password']);

je password mogelijk anders dan dat het ingevoerd is. Bijvoorbeeld de pass "ge'heim" wordt "ge\'heim"

Als je daarna md5($password) doet, krijg je een heel andere hash...
@Johan K mysqli_* is toch niet depreciated?? Of heb ik dat verkeerd.
mysqli_* is niet deprecated. mysql_* daarintegen wel.
mysqli_real_escape_string zet er quotes bij dacht ik en daardoor klopt het niet meer
Quotes? Nee, mysql gebruikt de \ als escapekarakter
Ivo P op 27/05/2015 17:14:37

Sowieso maak je met de regel

$password=mysqli_real_escape_string($connection,$_POST['password']);

je password mogelijk anders dan dat het ingevoerd is. Bijvoorbeeld de pass "ge'heim" wordt "ge\'heim"

Als je daarna md5($password) doet, krijg je een heel andere hash...

Nice catch. Escapen zou altijd de laatste handeling moeten zijn, op het moment dat je deze (user) DATA in de query-string (SQL) opneemt inderdaad...

Tevens:
<?php
    $email=mysqli_real_escape_string($connection,$_POST['email']);
    $password=mysqli_real_escape_string($connection,$_POST['password']);
    $address=mysqli_real_escape_string($connection,$_POST['address']);
    $postcode=mysqli_real_escape_string($connection,$_POST['postcode']);
    $plaats=mysqli_real_escape_string($connection,$_POST['plaats']);
    $land=mysqli_real_escape_string($connection,$_POST['land']);
?>

Aint nobody got time for that. Schrijf een wrapper oid, dit kan korter natuurlijk.

Reageren