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

Alain_42 Messages postés 5413 Statut Membre 894
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
<?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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
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
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
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
arthezius Messages postés 3756 Statut Membre 475
 
Je l'utilise personnellement pour quasiment toutes variables que je place dans mes requêtes.
0
mdpubs
 
Donc avec : mysql_real_escape_string() , il vaut mieux utiliser : username='".$_GET['username']."'"; ????
0
le père
 
$username=mysql_real_escape_string($_GET['username']);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
arthezius Messages postés 3756 Statut Membre 475
 
Mieux: mysql_real_escape_string()
https://www.php.net/manual/fr/function.mysql-real-escape-string.php

Sur la page de mysql_escape_string():
Cette fonction est OBSOLETE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l'utiliser.
0
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
mdpubs
 
Super ! Bon ben je le garde alors !

Merci Alain :o)
0
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