Unknown column '' in 'where clause

mdpubs -  
 mdpubs -
Bonjour,

Voilà un problème que je n'arrive pas à résoudre. Voici mon code :
---------------------------
<?php
session_start ();
include ("settings_sql.php");

// Connexion au serveur
$mysql_link = mysql_connect($CONF['sql_host'], $CONF['sql_username'], $CONF['sql_password']);
mysql_select_db($CONF['sql_database']);

// Creation et envoi de la requete
if(isset($_GET['username'])) $_GET['username']=$_GET['username'];
$sql = "SELECT title,url FROM Affiliation_sites WHERE username=".$_GET['username'];

$result = mysql_query($sql, $mysql_link) or die($sql.'<br/>'.mysql_error());
$resultat = mysql_fetch_assoc($result);
?>
-----------------------------

Le but est de part un lien : .....php?username=(Le nom du membre) d'accéder à une page avec les information le concernant (Titre,ban, url, description). Si je ne met pas un GET, je ne peux avoir que les infos concernant USERNAME, hors j'ai besoin que la page affiche aussi les autres infos (titre, ban...), d'ou l'intérêt du GET. Mais avec le GET, il m'affiche bien l'USERNAME, mais dit :

Unknown column 'Username' in 'where clause'

Pourtant l'Username est bien dans la colonne ?

Je comprends rien ! Si je fais sans la valeur GET, je n'obtiens que l'USERNAME et pas les autres infos (Titre, ban, url...)

Si quelqu'un a une idée :o)

9 réponses

  1. Alain_42 Messages postés 5413 Statut Membre 904
     
    En résumé:

    <?php
    session_start ();
    include ("settings_sql.php");
    
    // Connexion au serveur
    $mysql_link = mysql_connect($CONF['sql_host'], $CONF['sql_username'], $CONF['sql_password']);
    mysql_select_db($CONF['sql_database']);
    
    // Creation et envoi de la requete
    if(isset($_GET['username'])){
    	// $_GET['username']=$_GET['username']; ne veut rien dire
    	$username=mysql_real_escape_string($_GET['username'],$mysql_link);  //on securise surtout pour une valeur passée par l'URL, c a d la variable $usernane reupere la valeur passée par l'uRL en $_GET en appliquant la fonction mysql_real_escape_string
    //ensuite il faut utiliser cette variable sinon ça sert à rien de l'avoir assainie par la fonction si tu fais ta requette avec ... WHERE username='$_GET.....
    
    	$sql = "SELECT title,url FROM Affiliation_sites WHERE username='".$username."'";
    
    	$result = mysql_query($sql, $mysql_link) or die($sql.'<br/>'.mysql_error());
    	$resultat = mysql_fetch_assoc($result);
    	//la suite de l'affichage
    }
    
    ?> 
    2
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    <?php
    session_start ();
    include ("settings_sql.php");
    
    // Connexion au serveur
    $mysql_link = mysql_connect($CONF['sql_host'], $CONF['sql_username'], $CONF['sql_password']);
    mysql_select_db($CONF['sql_database']);
    
    // Creation et envoi de la requete
    if(isset($_GET['username'])){
    	// $_GET['username']=$_GET['username']; ne veut rien dire
    	$username=mysql_escape_string($_GET['username']);  //on securise surtout pour une valeur passée par l'URL
    	$sql = "SELECT title,url FROM Affiliation_sites WHERE username='".$username."'";
    
    	$result = mysql_query($sql, $mysql_link) or die($sql.'<br/>'.mysql_error());
    	$resultat = mysql_fetch_assoc($result);
    	//la suite de l'affichage
    }
    
    ?> 
    1
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    pourquoi session ?
    si on arrive comme tu dis par un lien avec l'username passé par l'url en GET ça marche
    complètes ton code avec ça:

    //// ....
    $resultat = mysql_fetch_assoc($result);
    //tes infos sont dans l'array $resultat
    $tilte=$resultat['title'];
    $url=$resultat['url'];
    
    //mais attention seuls sont disponibles ceux qui sont ecrits a droite de SELECT dans ta requette
    //si tu les veux tous il faut faire SELECT * FROM ....
    
    1
  4. le père
     
    Bonjour

    Ton problème, c'est que tu avais oublié les guillemets autour du nom d'utilisateur dans ta requête
    $sql = "SELECT title,url FROM Affiliation_sites WHERE username=".$_GET['username'];
    Si ton nom d'utilisateur était toto par exemple, ça devanait :
    SELECT title,url FROM Affiliation_sites WHERE username=toto;
    pour mysql, comme toto n'a pas de guillemets, c'est un nom de colonne (comme username)
    D'où le message "Unknown column 'toto'"
    Il faut systématiquement mettre entre guillemets les valeurs des champs texte (pas les noms de champs !) dans les requêtes mysql.
    Dans ton cas :
    $sql = "SELECT title,url FROM Affiliation_sites WHERE username='".$_GET['username']."'";
    qui donnera
    SELECT title,url FROM Affiliation_sites WHERE username='toto'
    1
    1. mdpubs
       
      Oui c'est ça Mysql considérait l'USERNAME : exemple "bidule" comme un champs qui effectivement n'existe pas dans la table... Après il semble qu'il y ai plusieurs solutions car :

      username='".$username."'"; (proposé par Alain), fonctionne bien
      username='".$_GET['username']."'"; marche aussi

      Ce serait intéréssant de savoir par défaut quelles solutions est la mieux et pourquoi ?

      En tout cas j'ai beaucoup appris aujourd'hui, car j'utilise souvent ces requêtes...

      Merci :o)
      0
    2. le père
       
      Comme le dit arthezius un peu plus bas, la version où $_GET['username'] a été échappé par mysql_real_escape_string est préférable. En fait, on doit utiliser cette fonction pour insérer des données dans mysql dès qu'il y a le moindre doute sur ce qu'elles peuvent contenir. C'est à dire dans 99,9 % des cas.
      0
    3. arthezius Messages postés 3756 Statut Membre 475
       
      Je l'utilise personnellement pour quasiment toutes variables que je place dans mes requêtes.
      0
    4. mdpubs
       
      Donc avec : mysql_real_escape_string() , il vaut mieux utiliser : username='".$_GET['username']."'"; ????
      0
    5. le père
       
      $username=mysql_real_escape_string($_GET['username']);
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mdpubs
     
    Bonjour Alain,

    Merci pour la rapidité de ta réponse et le code plus clair... Je sais que dans mes codes, il y a souvent des anomalies, hi hi :o)

    Bon je n'ai plus le problème de "Unknow column...", mais je ne peux avoir les autres champs correspondants à USERNAME. Par exemple si je veux le titre ($title), correspondant à l'USERNAME, cela ne s'affiche pas. C'est pour ça que j'ai pris un GET, mais peut-être que c'est plutôt SESSION ? Qu'en penses-tu ?

    En fait l'idée, c'est une personne arrive avec le lien http://www.......php?username=bidule

    Le code que tu m'as donné affiche bien l'USERNAME, mais si je mets :
    <?php echo $title ;?>, le titre ($title), n'apparaît pas...

    Si tu as une idée (voir même plusieurs, hi hi ).

    En tout cas merci beaucoup de ton aide :o)
    0
  7. mdpubs
     
    Yeah !!!!

    Dans mon code ça marche avec <?php echo $tilte=$resultat['title'] ;?>

    J'avais trouvé : <?php echo 'L\'Annuaire professionnel de ' .$resultat['title']; ?>, mais impossible de retirer 'L\Annuaire professionnel de ' qui me renvoyait une erreur, que je n'arrivais pas à résoudre...

    Voilà, donc ton code est parfait et tout marche comme je voulais.

    Je te remercie chaleureusement Alain :o). C'est vraiment cool !!!!
    0
  8. Alain_42 Messages postés 5413 Statut Membre 904
     
    username='".$username."'";


    est mieux car $username passe $_GET['username'] a travers la fonction mysql_escape_string

    qui va protéger tous les caractères de la chaîne
    0
    1. mdpubs
       
      Qu'en penses-tu Alain, car là, je sais plus lequel utiliser ? :

      username='".$username."'"; avec mysql_escape_string ou
      username='".$_GET['username']."'"; avec mysql_real_escape_string()

      Ce que dit arthezius semble effectivement plus adapté ?
      0
  9. mdpubs
     
    Super ! Bon ben je le garde alors !

    Merci Alain :o)
    0
  10. mdpubs
     
    Bonsoir Alain,

    Cela semble nickel maintenant et ça marche bien sur ma page.Dorénavant je passerai par cette commande pour ce genre de suivi de lien.

    C'est vraiment sympa. Merci beaucoup :o)
    A+
    0