8791 sujets

Développement web côté serveur, CMS

Bonjour,
J'essaie depuis plusieurs jours de faire un accès à mon site par identifiant et mot de passe.
Je suis passée par tous les messages d'erreur possibles, réglés un par un mais là je cale depuis 2 jours. Voici le message d'erreur sql " Erreur sur la requete : |Unknown column 'lithotheque' in 'where clause' ".
Je me permets de vous soumettre ci-dessous mes codes au cas où quelqu'un aurait une idée.
Un grand merci par avance,
Evelyne31

Fichier "verif_login.php" (avec include "sql_acces.php") :

 
if(isset($_POST['login']) && !empty($_POST['login']) && isset($_POST['password']) && !empty($_POST['password']))
{
	SQLSelect();
	$req = mysql_query('SELECT password, login FROM USERS WHERE USERS.login = '.$_POST['login']) or die("Erreur sur la requete : <font color=\"red\">$sql" . "|" . mysql_error() . "</font>");
	if(mysql_num_rows($req))
	{
		$data = mysql_fetch_assoc($req);
		if($_POST['password'] == $data["password"])
		{
			$loginOK = true;
		}
	}
	if ($loginOK) {
		$_SESSION["login"] = $data["login"];
	}
}
?>


Fichier "connexion.php" :

<?php
$BDD_host = "localhost";
$BDD_base = "lithotheque";
$BDD_login = $_POST["login"];
$BDD_password = $_POST["password"];
?>


Fichier "sql.php" où se trouve ma fonction SQLSelect, avec toutes mes fonctions et include "connexion.php" :

function SQLSelect() {
    global $BDD_host;
    global $BDD_base;
    global $BDD_login;
    global $BDD_password;

    mysql_pconnect($BDD_host, $BDD_login, $BDD_password) or die("<font color=\"red\">Erreur de connexion : " . mysql_error() . "</font>");
    mysql_select_db($BDD_base) or die("<font color=\"red\">Erreur select db : " . mysql_error() . "</font>");
    mysql_query("SET NAMES 'utf8'");
}
Bonsoir Sylverdragon,
Lithotheque n'est pas une colonne, c'est le nom de la base de données ($BDD_base = "lithotheque";)
J'ai vérifié la frappe, c'est bien ça, il n'y a pas d'erreur.
Aurais-tu une idée ? Je ne comprends pas pourquoi l'erreur SQL pointe vers une erreur de colonne inconnue nommée "lithotheque" ? alors qu'il s'agit de la bdd ?
J'ai lu, relu mon code... dans les 3 fichiers concernés, rien à faire.
Merci par avance,
Evelyne31
Tu as un problème de " / '

J'aurai plutôt fait :

mysql_query("SELECT password, login FROM USERS WHERE USERS.login = '$_POST['login']' ")

Mais je me trompe peut-être Smiley lol
Merci pour cette nouvelle réponse... mais le problème reste entier.
Une indication peut-être : "lithotheque" est le nom de la base de données ($BDD_base = "lithotheque";)
ET le nom de l'identifiant que je saisis dans le champ ($_POST['login']).
Mais je ne comprend toujours pas pourquoi SQL me retourne une erreur de colonne ???
Le message d'erreur à présent après applications de tes corrections :

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /Applications/MAMP/htdocs/archeotheques/lithotheque/lith_acces/lith_verif_login.php on line 13

Toujours cette même ligne de requête qui pose problème, la voici avec vos rectifications :
$req = mysql_query("SELECT password, login FROM USERS WHERE USERS.login = '$_POST['login']' ") or die("Erreur sur la requete : <font color=\"red\">$req" . "|" . mysql_error() . "</font>");


Quelle galère. Aurais-tu STP une idée ??? Je n'en peux plus.
Merci par avance,
Evelyne31
Merci Sylverdragon pour cette réponse... qui me désespère un peu plus. Je suis allée voir le lien.
Adapté à mon code cela donne :
$req = mysql_query("SELECT password, login FROM USERS WHERE USERS.login=".$_POST['login']") or die("Erreur sur la requete : "mysql_error()"");
Et... nouveau message d'erreur : Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /Applications/MAMP/htdocs/archeotheques/lithotheque/lith_acces/lith_verif_login.php on line 18
La ligne 18 c'est ma requête $req ci-dessus ????
Je suis là-dessus depuis plusieurs jours, et depuis ce matin 9h. Peut-être que je n'ai plus les idées claires ?
Pouvez-vous m'aider ?
Merci par avance, c'est tellement incompréhensible.
Très bonne soirée en tout cas,
Evelyne31
Il me semble qu'il n'y a pas de guillemet à la fin...

$req = mysql_query("SELECT password, login FROM USERS WHERE USERS.login=".$_POST['login']) or die("Erreur sur la requete : "mysql_error()"")

Et as tu essayés la solution avec les accolades?
Modérateur
Ça lu,

En lisant vite fait, j'ai vu pas mal d'erreurs :

Dans un message, ton erreur venait de là par exemple (quadruple guillemet simple):
Evelyne31 a écrit :
...
login = '$_POST['login']' 

....


Et dans un autre par exemple : (le point de concaténation)
Evelyne31 a écrit :
...
.login=".$_POST['login']"

....


Là je viens de ressortir un vieux script qui va te permettre de revoir ton script de connexion (Je t'invite à le lire et voir d'où proviennent tes erreurs de connexions Smiley cligne ). Because, c'est mal agencé pour du procédurale :
1. Je ne vois pas l'intérêt de globaliser des variables.
2. Je ne vois pas l'intérêt d'utiliser des variables pour la connexion alors que de toutes manières ce sera des valeurs constantes.
3. Je ne vois pas l'intérêt d'utiliser une connexion persistente
4. mélanger msg erreur avec l'exécutif, mmmmhhhh pas bon pour la maintenance


<?php
  // pour la connexion à MySQL

  define ('NOM',"user");
  define ('PASSE', "mdp");
  define ('SERVEUR', "localhost");
  define ('BASE', "uneBaseDeDonnees");
  
  
function Connexion ($nom, $motPasse, $base, $serveur){
  	// Connexion au serveur 
  	$connexion = mysql_connect ($serveur, $nom, $motPasse);

  	if (!$connexion) {
    		throw new Exception("Désolé, connexion au serveur $serveur impossible");
  	}

  	// Connexion à la base
  	if (!mysql_select_db ($base, $connexion)) {
    		throw new Exception("Désolé, accès à la base $base impossible <b>Message de MySQL :</b> " . mysql_error($connexion));
  	}
  	return $connexion;
 } 
  
 function Requete ($requete, $connexion){
 	$resultat = mysql_query ($requete, $connexion);

  	if ($resultat){
   		return $resultat;
  	}else{  
    		throw new Exception("Erreur dans l'exécution de la requête '$requete'. <b>Message de MySQL :</b> " .  mysql_error($connexion));
  	}  
 } 

 // Recherche de l'objet suivant
 function ObjetSuivant ($resultat){
  	return  mysql_fetch_object ($resultat);
 } 
  
 
 
try{
 	$connexion = Connexion (NOM, PASSE, BASE, SERVEUR);
 	$sql = "
 		SELECT
 			unChamp,
 			unAutreChamp,
 			encoreUnAutreChamp,
 			etEncoreUnAutreChamp
 		FROM
 			uneTable
 		WHERE
 			unChamp = 'uneCondition'
 	";
  	$query = Requete ($sql, $connexion);

  	while ($resultat = ObjetSuivant ($query))
     		echo "<b>$resultat->unChamp</b>, $resultat->unAutreChamp, $resultat->encoreUnAutreChamp, $resultat->etEncoreUnAutreChamp.<br/>";
} catch (Exception $e) {
	echo $e->getMessage();
}
?>



Après tu peux imaginer un objet MySql qui te permettra d'écrire une seule instruction

//....
while ($resultat = $mysql->ObjetSuivant ($query))
//...

et d'étendre l'objet mySql vers d'autres connexion (PostGr, Sqlite, Oracle, etc.)

D'une manière générale, il est préférable d'oublier mysql_connect et toutes ces déclinaisons. Ce sont des fonctions dépréciées. PDO is better and faster
Modifié par niuxe (01 Oct 2012 - 06:48)
Bonjour,
Un très grand merci à vous Sylverdragon et niuxe pour vos réponses, détaillées et expliquées.
Sylverdragon : je n'ai pas testé la solution avec les accolades mais je vais le faire pour en avoir le coeur net.
niuxe : oui, je fais pas mal d'erreur, c'est la fatigue et mon logiciel (Fraise) n'est pas très performant, je vais changer pour Eclypse sous peu. J'étudie ton script en détail avant de le tester, je veux comprendre.
Pour le PDO et coder un objet MySQL, je pense que ce n'est pas -encore- dans mes maigres compétences. Je voudrais avancer. Je perfectionnerai tout ça après, je garde vos conseils dans un coin.
Encore merci et très bonne journée, je vous tiens informés de mes résultats.
Evelyne31