2 requêtes sur 1 interrogation SQL, la bête n'aime pas
Fermé
tipitap
Messages postés
21
Date d'inscription
mercredi 4 février 2009
Statut
Membre
Dernière intervention
28 juin 2014
-
27 juin 2014 à 18:27
Utilisateur anonyme - 29 juin 2014 à 06:53
Utilisateur anonyme - 29 juin 2014 à 06:53
A voir également:
- 2 requêtes sur 1 interrogation SQL, la bête n'aime pas
- Word numéro de page 1/2 - Guide
- 2 comptes whatsapp - Guide
- Signification 2 points d'interrogation sms - Forum Samsung
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Pense bete - Guide
4 réponses
Utilisateur anonyme
Modifié par le père. le 27/06/2014 à 22:03
Modifié par le père. le 27/06/2014 à 22:03
Bonjour
Il manque des morceaux de ton code, ce que tu as laissé est incohérent.
On peut quand même voir qu'il te manque des '' autour de $mdp_contr dans
Questions complémentaires : tu ne sais pas que les fonctions mysql_ sont obsolètes ? Il vaudrait mieux utiliser PDO.
As-tu échappé les valeurs que tu mets dans tes requêtes avec mysql_real_escape_string ?
Il manque des morceaux de ton code, ce que tu as laissé est incohérent.
On peut quand même voir qu'il te manque des '' autour de $mdp_contr dans
$Ref_contr = "SELECT Id_contr FROM Contributeurs WHERE pseudo= '$pseudo' AND mdp_contr='$mdp_contr'";
Questions complémentaires : tu ne sais pas que les fonctions mysql_ sont obsolètes ? Il vaudrait mieux utiliser PDO.
As-tu échappé les valeurs que tu mets dans tes requêtes avec mysql_real_escape_string ?
tipitap
Messages postés
21
Date d'inscription
mercredi 4 février 2009
Statut
Membre
Dernière intervention
28 juin 2014
28 juin 2014 à 17:25
28 juin 2014 à 17:25
Bonjour le père,
merci pour ta réponse. Les guillemets m'avaient échappé...
J'ignorais que les fonctions mysql_ étaient obsolètes, et je n'ai aucune connaissance de PDO...
Je ne comprends pas ta question:
"As-tu échappé les valeurs que tu mets dans tes requêtes avec mysql_real_escape_string ?" Que veut dire "échapper"?
Bonne journée!
merci pour ta réponse. Les guillemets m'avaient échappé...
J'ignorais que les fonctions mysql_ étaient obsolètes, et je n'ai aucune connaissance de PDO...
Je ne comprends pas ta question:
"As-tu échappé les valeurs que tu mets dans tes requêtes avec mysql_real_escape_string ?" Que veut dire "échapper"?
Bonne journée!
tipitap
Messages postés
21
Date d'inscription
mercredi 4 février 2009
Statut
Membre
Dernière intervention
28 juin 2014
28 juin 2014 à 17:28
28 juin 2014 à 17:28
Voici le texte entier; cela semblera peut-être plus cohérent?
<?php
session_start();
include('bibli_contenu.php');
entete('Enregistrement');
affiche_menu();
echo "</br>";
//transformation des réponses du formulaire en variables
$Id_contr = $POST['Ref_contr'];
$Titre_cont = $_POST['titre'];
$Type_cont = $_POST['type'];
$Adresse_cont = $_POST['adresse'];
$Editeur_cont= $_POST['editeur'];
$Lang_cont = $_POST['lang'];
$Ref_dom= $_POST['domaine'];
$Description_cont = $_POST['description'];
//Envoi dans la base
$connexion = mysql_connect($serveurbd, $userbd, $mdp);
mysql_select_db($nombd,$connexion);
/*requete pour retrouver le numéro du contributeur
$Ref_contr =
"SELECT 'Id_contr'
FROM 'Contributeurs'
WHERE pseudo= '$pseudo'
AND mdp_contr='$mdp_contr'";*/
$requete =
"INSERT INTO Contenus
(Contenus.Titre_cont, Contenus.Type_cont, Contenus.Editeur_cont, Contenus.Adresse_cont,
Contenus.Lang_cont, Contenus.Description_cont, Contenus.Ref_dom, Contenus.Ref_contr)
VALUES ('$Titre_cont', '$Type_cont', '$Editeur_cont', '$Adresse_cont',
'$Lang_cont', '$Description_cont', '$Ref_dom', '$Ref_contr')";
//D'abord requête, puis connexion, et pas l'inverse...
mysql_query($requete, $connexion);
//demande à Mysql de nous dire quel est le chiffre qu'elle a auto-incrémenté pour l'enregistrement
$Id_cont = mysql_insert_id();
//Affichage du contenu par requête à MySQL
echo "<b>Nous vous remercions pour votre enregistrement.</b>";
echo "<br />";
echo "Il porte le numéro '$Id_cont'";
$requete = "select * from Contenus where Id_cont=$Id_cont";
$resultat = mysql_query($requete, $connexion);
$contenu = mysql_fetch_array($resultat);
pied ();
?>
<?php
session_start();
include('bibli_contenu.php');
entete('Enregistrement');
affiche_menu();
echo "</br>";
//transformation des réponses du formulaire en variables
$Id_contr = $POST['Ref_contr'];
$Titre_cont = $_POST['titre'];
$Type_cont = $_POST['type'];
$Adresse_cont = $_POST['adresse'];
$Editeur_cont= $_POST['editeur'];
$Lang_cont = $_POST['lang'];
$Ref_dom= $_POST['domaine'];
$Description_cont = $_POST['description'];
//Envoi dans la base
$connexion = mysql_connect($serveurbd, $userbd, $mdp);
mysql_select_db($nombd,$connexion);
/*requete pour retrouver le numéro du contributeur
$Ref_contr =
"SELECT 'Id_contr'
FROM 'Contributeurs'
WHERE pseudo= '$pseudo'
AND mdp_contr='$mdp_contr'";*/
$requete =
"INSERT INTO Contenus
(Contenus.Titre_cont, Contenus.Type_cont, Contenus.Editeur_cont, Contenus.Adresse_cont,
Contenus.Lang_cont, Contenus.Description_cont, Contenus.Ref_dom, Contenus.Ref_contr)
VALUES ('$Titre_cont', '$Type_cont', '$Editeur_cont', '$Adresse_cont',
'$Lang_cont', '$Description_cont', '$Ref_dom', '$Ref_contr')";
//D'abord requête, puis connexion, et pas l'inverse...
mysql_query($requete, $connexion);
//demande à Mysql de nous dire quel est le chiffre qu'elle a auto-incrémenté pour l'enregistrement
$Id_cont = mysql_insert_id();
//Affichage du contenu par requête à MySQL
echo "<b>Nous vous remercions pour votre enregistrement.</b>";
echo "<br />";
echo "Il porte le numéro '$Id_cont'";
$requete = "select * from Contenus where Id_cont=$Id_cont";
$resultat = mysql_query($requete, $connexion);
$contenu = mysql_fetch_array($resultat);
pied ();
?>
Utilisateur anonyme
29 juin 2014 à 06:53
29 juin 2014 à 06:53
J'ignorais que les fonctions mysql_ étaient obsolètes
Donc tu ne lis pas le manuel php ? Tu dois être très fort, moi je pratique depuis plus de 10 ans (en amateur) et j'ai encore souvent besoin de le consulter ^^
je n'ai aucune connaissance de PDO
Il n'y a pas grand chose à apprendre. Et tout est expliqué dans le manuel.
Que veut dire "échapper"
Imagine que tu ais une requête avec une variable php :
Ta variable vaut "l'homme"
Quand php remplace $variable par sa valeur, ta requête devient
Si tu regardes ce qui se passe après le where, tu vois la condition champ = 'l' et ce qui suit, c'est à dire homme', est une erreur de syntaxe. En effet, la valeur qui suit champ commence par une apostrophe, et s'arrête à la première apostrophe suivante. Donc s'il y a une apostrophe dans ta variable, ça va planter à tous les coups.
Pour éviter ce problème, il faut insérer un \ avant les apostrophes dans les requêtes, comme indiqué dans le manuel (hum, hum) mysql. C'est ce qu'on appelle "échapper" les apostrophes.
Je t'ai montré le cas des apostrophes, mais il y a d'autres caractères qui peuvent poser des problèmes du même style.
Tous ces cas sont traités très simplement par une fonction en php : mysql_real_escape_string. Il faut que tu utilises cette fonction pour chaque variable que tu mets dans une requête.
Dans ton cas :
Attention, il faut avoir fait la connexion à la base de données AVANT d'appeler mysql_real_escape_string.
Note que tu n'as pas ce problème d'échappement avec les requêtes préparées utilisées par PDO.
Pour la résolution de ton problème, tu as défini une variable $Id_contr, mais dans la requête tu as mis $Ref_contr.
Quand tu as une erreur à l'exécution d'une requête, pense à utiliser mysql_error() pour avoir un message d'erreur un peu explicite :
Donc tu ne lis pas le manuel php ? Tu dois être très fort, moi je pratique depuis plus de 10 ans (en amateur) et j'ai encore souvent besoin de le consulter ^^
je n'ai aucune connaissance de PDO
Il n'y a pas grand chose à apprendre. Et tout est expliqué dans le manuel.
Que veut dire "échapper"
Imagine que tu ais une requête avec une variable php :
"SELECT * FROM matable WHERE champ='$variable'"
Ta variable vaut "l'homme"
Quand php remplace $variable par sa valeur, ta requête devient
"SELECT * FROM matable WHERE champ='l'homme'"
Si tu regardes ce qui se passe après le where, tu vois la condition champ = 'l' et ce qui suit, c'est à dire homme', est une erreur de syntaxe. En effet, la valeur qui suit champ commence par une apostrophe, et s'arrête à la première apostrophe suivante. Donc s'il y a une apostrophe dans ta variable, ça va planter à tous les coups.
Pour éviter ce problème, il faut insérer un \ avant les apostrophes dans les requêtes, comme indiqué dans le manuel (hum, hum) mysql. C'est ce qu'on appelle "échapper" les apostrophes.
Je t'ai montré le cas des apostrophes, mais il y a d'autres caractères qui peuvent poser des problèmes du même style.
Tous ces cas sont traités très simplement par une fonction en php : mysql_real_escape_string. Il faut que tu utilises cette fonction pour chaque variable que tu mets dans une requête.
Dans ton cas :
$Id_contr = mysql_real_escape_string($POST['Ref_contr']); ... $Description_cont = mysql_real_escape_string($_POST['description']);
Attention, il faut avoir fait la connexion à la base de données AVANT d'appeler mysql_real_escape_string.
Note que tu n'as pas ce problème d'échappement avec les requêtes préparées utilisées par PDO.
Pour la résolution de ton problème, tu as défini une variable $Id_contr, mais dans la requête tu as mis $Ref_contr.
Quand tu as une erreur à l'exécution d'une requête, pense à utiliser mysql_error() pour avoir un message d'erreur un peu explicite :
mysql_query($requete) or die (mysql_error()); // le paramètre $connexion est inutile