2014-06-16 6 views
0

J'ai donc créé une fonction:erreur PHP inconnu

function user_data($user_id) { 
    $data = array(); 
    $user_id = (int)$unser_id; 

    $func_num_args = func_num_args(); 
    $func_get_args = func_get_args(); 

    if ($func_num_args > 1){ 
     unset($func_get_args[0]); 

     $fields = '`' . implode('`, `', $func_get_args) . '`'; 
     $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE 'user_id' = $user_id")); 


     return $data; 
    } 

} 

Par erreur j'EMBALLÉES une faute de frappe unser_id mais na pas relise jusqu'à ce que je devais résoudre les problèmes sur la même ligne dans mon code.

Je crée un script de connexion, mais le point où je dois dépanner montre les données de profil de mes autres utilisateurs.

La raison pour laquelle je souligne la partie typo est parce que, pour une raison quelconque, c'est une erreur étrange. Si je le change en user_id, il ne me permettra plus de me connecter. Si je le laisse comme under_id cela fonctionne.

Je dois dépanner parce que je crois que c'est la cause du problème que j'ai en essayant de voir d'autres profils d'utilisateurs et de montrer leurs informations et pas les miennes qui se produisent en ce moment. Par exemple, dans mon URL www.mywebsite.com/myprofile montre mon nom d'utilisateur et mon adresse e-mail, si je tape www.mywebsite.com/otherprofile cela montre encore mes informations. Mais il montre une requête si je tape un utilisateur qui n'existe pas dans ma base de données pour que cette partie fonctionne.

Je crois que le problème toutes les souches forment cette faute de frappe, mais suis vraiment bloqué quant à résoudre une résolution?

Voici donc l'autre code:

page profil:

if (isset($_GET['username']) === true && empty ($_GET['username']) === false) { 
    $username = $_GET['username']; 



    if (user_exists($username) === true) { 
     $user_id = user_id_from_username($username); 
     $profile_data = user_data($user_id, 'first_name', 'last_name', 'email'); 

    ?> 


    <p><?php echo $profile_data['profile']; ?></p> 

    <h1><?php echo $profile_data['first_name']; ?> profile</h1> 
    <p><?php echo $profile_data['email'] ?></p> 



    <?php 

    } else { 
     echo 'Sorry, that user does not exist'; 
    } 
    } else { 
     header('Location: index.php'); 
    exit(); 
} 

Voici toutes les fonctions connexes:

function logged_in(){ 
    return (isset($_SESSION['user_id'])) ? true : false;  
} 


function user_exists($username) { 
    $username = sanitize($username); 
    $query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'"); 
    return (mysql_result($query, 0) == 1) ? true : false; 
} 

function email_exists($email) { 
    $email = sanitize($email); 
    $query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `email` = '$email'"); 
    return (mysql_result($query, 0) == 1) ? true : false; 
} 




function user_active($username) { 
    $username = sanitize($username); 
    $query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `active` = 1"); 
    return (mysql_result($query, 0) == 1) ? true : false; 
} 




function user_id_from_username($username) { 
    $username = sanitize($username); 
    return mysql_result(mysql_query("SELECT `user_id` FROM `users` WHERE `username` = '$username'"), 0, 'user_id'); 
} 




function login($username, $password) { 
    $user_id = user_id_from_username($username); 

    $username = sanitize($username); 
    $password = md5($password); 

    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password' "), 0) == 1) ? $user_id : false; 
} 
+1

Prenez l'habitude de vérifier s'il y a des erreurs dans votre requête. 'if (! result) show_error' – Ibu

+0

' où 'user_id''? –

+0

Je dois lire ceci encore, parce que la question est assez complexe, mais $ data = mysql_fetch_assoc (mysql_query ("CHOISIR $ fields FROM' users' WHERE 'user_id' = $ user_id ")); est un peu étrange pour moi? 'SELECT '$ fields' des utilisateurs où user_id = '$ user_id'' J'écrirais – tattvamasi

Répondre

1

Le problème dans votre première fonction est que vous citez votre Nom de colonne avec guillemets simples:

$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE 'user_id' = $user_id")); 
                     ^ ^

Cela signifie que vous n'utilisez pas réellement la colonne user_id mais une chaîne.

Vous devriez changer cela à:

$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id")); 

(ou sans les guillemets obliques ...). En dehors de cela, vous utilisez les fonctions obsolètes mysql_* et vous n'avez aucune gestion des erreurs. Vous devriez passer à PDO ou mysqli en utilisant des instructions préparées et assurez-vous qu'il lance des exceptions (les deux peuvent) afin que vous sachiez exactement ce qui ne va pas.

+0

A: Merci d'avoir repéré mon erreur et B: en passant ma requête mysql à mysqli_query? – user3746168

+0

La seule chose que je suggérerais sera de vérifier la requête d'erreur après l'exécution. Il y a beaucoup de potentiel d'erreurs car la liste des champs est une variable et l'imbrication rend l'erreur silencieuse. – Ibu

+0

J'ai trouvé un bon fil sur la conversion de la vieille mysql_query à PDO Merci pour le conseil – user3746168

0

vous remplacez l'argument $user_id passé à user_data par $unser_id:

$user_id = (int)$unser_id; 

De cette façon, la valeur de $user_id sera toujours tout ce qui est stocké dans $unser_id, pas ce qui est passé à la fonction. Vous devriez essayer de supprimer la ligne, de sorte que le code utilise réellement l'identifiant de l'utilisateur que vous lui transmettez.

Si vous n'avez aucune variable appelée $unser_id vous devriez vérifier les logs d'erreur de PHP. Je pense qu'il y aura des lignes disant quelque chose comme Undefined variable: unser_id.