Conditie IF vine executata chair daca nu este adevarata

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Mezuky
Mesaje:11

Conditie IF vine executata chair daca nu este adevarata

Salut.
Am un script pentru inregistrarea utilizatorilor. Totul este bine, dar cand completez gresit un camp imi apare mesajul cu ce nu am completat bine, dar in acelasi timp apare si mesajul : "Contul a fost creat cu scces !"
Cred ca problema este de aici de undeva:

Cod: Selectaţi tot

if(mysql_query("INSERT INTO users (username, password, email)
    VALUES ('".$username."', '".$password."', '".$email."')")) {
    echo 'Contul tau a fost creat cu succes!';
    } else {
    echo 'Pentru a incerca din nou click <a href="register.php">aici</a>.';
} 
Conditia if se executa chaiar daca nu se insereaza variabilele $username, $password si $email in abza de date. :cry:

Scriptul complet : pastebin.com/1bzstK9Y

MarPlo Mesaje:4343
Salut
Eu cred ca acea conditie if() e adevarata, fiindca comanda Insert adauga date in baza de date, chiar daca sunt goale, si returneaza True.
Probabil ar trebui facuta conditia if() pe datele ce trebuie adaugate, sa nu fie goale, inainte de a face Insert.
Cam asa:

Cod: Selectaţi tot

if(empty($username) || empty($password) || empty($email)) echo 'Date necompletate';
else {
  if(mysql_query("INSERT INTO users (username, password, email)
    VALUES ('".$username."', '".$password."', '".$email."')")) {
    echo 'Contul tau a fost creat cu succes!';
  }
  else {
    echo 'Pentru a incerca din nou click <a href="register.php">aici</a>.';
  }
}
 

Mezuky Mesaje:11
Salut. Mersi pentru raspuns. Mai am o problema, daca utilizatorul nu completeaza nici-un camp sa se afiseze doar "Date necompletate" nu si email incorect, parolele nu se potrivesc etc. Mersi :)

Cod: Selectaţi tot

$err;
if( empty($_POST['username']) ) $err = 'Nu ai introdus niciun nume de utilizator <br />';
if(strlen($_POST['username'])>30) $err .= 'Numele de utilizator poate avea maxim 30 de caractere. <br />';
if( empty($_POST['password'])  || empty ($_POST['password_verification']) || $_POST['password'] != $_POST['password_verification']) {
    $err .= 'Parolele introduse nu se potrivesc. <br />';
}
if(strlen($_POST['password'])>30) $err .= 'Parola poate avea pana in 30 de caractere. <br />';
if(empty($_POST['email']) || !strstr($_POST['email'], '@') || !strstr($_POST['email'], '.')) $err .= 'Email invalid. <br/>';
// La email am verificat daca in alcatuirea lui exista un @ si un punct ( . ) . 
// Daca nu exista, adresa de email nu este valida!
// La toate campurile am folosit functia empty() pentru a vedea daca au fost completate sau nu

// Daca variabila $err nu este goala
if(!empty($err)){

// Deci exista erori pe care le afisam
echo $err;

$username=mysql_real_escape_string($_POST['username']);
$password=mysql_real_escape_string($_POST['password']);
$email=mysql_real_escape_string($_POST['email']);


// Verificam ca datele introduse sa nu fie goale
if(empty($username) || empty($password) || empty($email)) echo 'Date necompletate';
else {
  if(mysql_query("INSERT INTO users (username, password, email)
    VALUES ('".$username."', '".$password."', '".$email."')")) {
    echo 'Contul tau a fost creat cu succes!';
  }
  else {
    echo 'Pentru a incerca din nou click <a href="register.php">aici</a>.';
  }
}