Compte PHP activation
-
26-09-2019 - |
Question
J'ai créé ce script d'activation de l'enregistrement du compte de mon propre, je l'ai vérifié encore et encore de trouver des erreurs, je ne vois pas une erreur particulière ...
Le domaine serait comme ceci:
http://domain.com/include/register.php?key = true & p = AfRWDCOWF0BO6KSb6UmNMf7d333gaBOB
Ce qui vient d'un e-mail, lorsqu'un utilisateur clique, ils redirigés vers ce script:
if($_GET['key'] == true)
{
$key = $_GET['p'];
$sql = "SELECT * FROM users
WHERE user_key = '" . $key . "'";
$result = mysql_query($sql) or die(mysql_error());
if(mysql_affected_rows($result) > 0)
{
$sql = "UPDATE users
SET user_key = '', user_active = '1'
WHERE user_key = '" . $key . "'";
$result = mysql_query(sql) or die(mysql_error());
if($result)
{
$_SESSION['PROCESS'] = $lang['Account_activated'];
header("Location: ../index.php");
}
else
{
$_SESSION['ERROR'] = $lang['Key_error'];
header("Location: ../index.php");
}
}
else
{
$_SESSION['ERROR'] = $lang['Invalid_key'];
header("Location: ../index.php");
}
}
Il ne fonctionne même pas du tout, je regardais dans la base de données avec l'utilisateur avec cette touche, il correspond, mais il continue à venir comme une erreur qui me extrêmement ennuyeux. La base de données est droite, la table et la colonne est droite, rien de mal à la base de données, il est le script qui ne fonctionne pas.
Aidez-moi, les gars.
Merci:)
La solution
- Modifier
$_GET['key'] == true
à$_GET['key'] == "true"
- Vous faites avant cette
if
, unmysql_connect(...)
réussi oumysql_pconnect(...)
? - Modifier
mysql_affected_rows($result);
àmysql_num_rows($result);
. Vous pouvez utiliser touchés pourDELETE
ouUPDATE
instructions SQL . - Avant de seconde si a été ouvert, avant d'ajouter seconde
mysql_result(...)
,mysql_free_result($result);
à la mémoire allouée au résultat précédent. -
if($result)
changementif(mysql_affected_rows($result));
. Vous pouvez le faire ici. - Après les années d'appel de fonction
header(...);
ajouter unreturn 0;
ouexit(0);
dépend de votre logique de code complet. - Vous utilisez variable
$key
dans instructions SQL , pour obtenir votre code plus sûr sur attaques par injection SQL obtenir le changement$key = $_GET['p'];
à$key = mysql_real_escape_string($_GET['p']);
- Je pense que votre position dans les fonctions de
header()
échoue. Dansheader()
adresse URL doit être complet comme: http://www.example.com/somewhere/index .php - Et vérifier votre variable
$_GET['p']
existe !! Si cela n'existes et si existe$_GET['key']
, vous trouvez tous les utilisateurs activés. Ensuite, je pense que le user_key de réglage à « » est nessesary si vous avez marqueur user_activated.
Autres conseils
vous ne devriez pas utiliser:
if(mysql_affected_rows($result) > 0)
Vous devez utiliser mysql_num_rows ()
Votre problème est:
$result = mysql_query($sql) or die(mysql_error());
« ou » rend votre boolean
de déclaration ainsi $ résultat obtient une True
au lieu de la valeur retournée par mysql_query ()
echo 'Hello' or die('bye'); // outputs nothing, because result is True not 'Hello'
3 or die() == True; // true
3 or die() != 3; // true
ou est le même que || et il est opérateur instruction logique .
Cela fonctionne:
$result = mysql_query($sql);
if(!$result) die(mysql_error());
La même erreur a été faite il y a quelques heures:
Les cas où ou peut être utilisé:
defined('FOO') or
define('FOO', 'BAR');
mysql_connect(...) or die(...);
mysql_select_db( .... ) or die(...);
mysql_query('UPDATE ...') or die(...);
if(FOO or BAR) { ... }