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:)

Était-ce utile?

La solution

  1. Modifier $_GET['key'] == true à $_GET['key'] == "true"
  2. Vous faites avant cette if, un mysql_connect(...) réussi ou mysql_pconnect(...)?
  3. Modifier mysql_affected_rows($result); à mysql_num_rows($result);. Vous pouvez utiliser touchés pour DELETE ou UPDATE instructions SQL .
  4. 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.
  5. if($result) changement if(mysql_affected_rows($result));. Vous pouvez le faire ici.
  6. Après les années d'appel de fonction header(...); ajouter un return 0; ou exit(0); dépend de votre logique de code complet.
  7. 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']);
  8. Je pense que votre position dans les fonctions de header() échoue. Dans header() adresse URL doit être complet comme: http://www.example.com/somewhere/index .php
  9. 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) { ... }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top