Page 1 sur 1
Impossible de rentrer la valeur d'une variable avec SELECT
Posté : 27 mai 2006, 23:45
par Invité
Salut a tous, petite question de débutant:
Je ne comprend pas la valeur de la variable "$titreEmprunt" n'arrive pas a "rentrer" dans mon SELECT.
j'ai cherché pourtant sur le net et ça à l'air d'être bon. Est ce que quelqu'un aurait une idée, merci. Voici une partie du script qui récupère la valeur d'un formulaire, cette valeur est bien récupérée car la 1ere ligne controle ceci, et la valeur s'affiche bien.
de plus quand je met une valeur en type "text" à la palce de $titreEmprunt dans mon SELECT ça fonctionne.
Est ce que quelqu'un aurait une idée merci.
Code : Tout sélectionner
/Recupération des "codebarrelivre" ------------------------------------------------------------
echo 'TEST: titre saisi:'.$titreEmprunt.'<br>';
$query0="SELECT codebarrelivre FROM livre WHERE titre='$titreEmprunt' " ;
$result =mysql_query($query0);
if (!$result)
{
echo '<b>La requete de connection à la table livre à échouée: </b><br>'.mysql_error();
exit;
}
while($ligne=mysql_fetch_array($result))
{
echo 'code barre du livre: '.$ligne['codebarrelivre'].'<br>';
}
Posté : 28 mai 2006, 00:01
par Cyrano
Regarde ton code : sur certaines lignes, tu fais une concaténation correcte, mais pas pour la requête : pour quelle raison ?
D'autre part, tu pourrais éventuellement faire afficher la requête, tu saurais de quoi elle a l'air uene fois générée :
//Recupération des "codebarrelivre" ------------------------------------------------------------
echo 'TEST: titre saisi:'.$titreEmprunt.'<br>';
$query0="SELECT codebarrelivre FROM livre WHERE titre='". $titreEmprunt ."' " ;
echo("<p>Requête générée : ". $query0 ."</p>\n");
$result =mysql_query($query0);
if (!$result)
{
echo '<b>La requete de connection à la table livre à échouée: </b><br>'.mysql_error();
exit;
}
while($ligne=mysql_fetch_array($result))
{
echo 'code barre du livre: '.$ligne['codebarrelivre'].'<br>';
}
Posté : 28 mai 2006, 00:17
par Invité
Ok je vais essayer merci. J'ai verouillé un truc sur mon editeur Screem sous Mandrake et j'arrive plus a visualiser le code, je verrais demain
Merci.
Posté : 28 mai 2006, 01:10
par barbux
$query0="SELECT codebarrelivre FROM livre WHERE titre='$titreEmprunt' " ;
La concatenation est correct la. les simples quotes peuvent etre incluses dans les doubles et les variables sont interpretées dans les doubles.
Le probleme doit venir d'autre part, de la chaine $titreEmprunt je pense.
Essaye ca :
$query0="SELECT codebarrelivre FROM livre WHERE titre='".addslashes($titreEmprunt)."' " ;
Posté : 28 mai 2006, 09:11
par Cyrano
$query0="SELECT codebarrelivre FROM livre WHERE titre='$titreEmprunt' " ;
La concatenation est correct la.
Non, là, il n'y a pas de concaténation du tout : l'interpréteur PHP doit donc extraire une variable de la chaine de caractère qui doit être lue au préalable, ça saute aux yeux avec la coloration syntaxique.
J'ai verouillé un truc sur mon editeur Screem sous Mandrake et j'arrive plus a visualiser le code...
Quand je parle de visualiser une requête générée, il faut entendre "visualiser dans ton navigateur, Firefox, Opera ou Konkeror, peu importe, c'est pour ça que j'ai rajouté un echo() juste avant l'exécution mais juste après la définition de la requête.
Posté : 28 mai 2006, 09:29
par Invité
Non je sais y'a pas de pbm, en effet je peux quand même le visualiser avec comme tu dis n'importe quel editeur, mais comme l'editeur Screem venait juste de se bloqué je voulais juste avant retrouver ma config de base c'est tout.
J'ai donc essayer avec ta solution Cyrano pour visualiser la requete et j'obtiens bien la chaine de caractères saisie.
Code : Tout sélectionner
TEST: titre saisi: Vipere au poing
Requête générée : SELECT codebarrelivre FROM livre WHERE titre=' Vipere au poing'
Mais j'ai ressayé avec la mienne sans la concaténation que tu me proposes, et la requete prend bien également la valeur de la variable "titreEmprunt" (que j'ai pû visualiser maintenant à l'aide de ton "echo"). Le pbm vient apparemment ensuite d'une contrainte sur une clef étrangère. je vais voir ça...
Merci a vous 2
Code : Tout sélectionner
La requete principale d'insertion a echouée
Cannot add or update a child row: a foreign key constraint fails
[/code]
Posté : 28 mai 2006, 09:55
par Cyrano
Requête générée : SELECT codebarrelivre FROM livre WHERE titre='_Vipere au poing'
Regarde bien : dans la chaine envoyée en variable, il y a un espace au début, est-ce normal (j'ai ajouté un soulignement)?
Ce que tu peux faire dans ce genre de cas, tu fais afficher la requête, ça c'est fait, ensuite, tu copie cette requête et tu la tstes directement dans ton gestionnaire de base, phpMyAdmin ou autre pour voir le retour et soit une erreur, soit les lignes attendues.
Posté : 28 mai 2006, 10:20
par Invité
Ok j'ai testé ma requete directement sous PHP MYAdmin et elle fonctionne bien, mais avec l'espace devant elle me retourne rien et sans espace elle me retourne bien le N° de code barre du livre. J'ai ensuite rectifié le script mais par l'interface Web toujours rien? Je te remet le code utilisé sans concaténation:
Code : Tout sélectionner
echo 'TEST: titre saisi:'.$titreEmprunt.'<br>';
$query0="SELECT codebarrelivre FROM livre WHERE titre='$titreEmprunt' " ;
echo("<p>TEST: Requête générée : ". $query0 ."</p>\n");
$result =mysql_query($query0);
if (!$result)
{
echo '<b>La requete de connection à la table livre à échouée: </b><br>'.mysql_error();
exit;
}
while($ligne=mysql_fetch_array($result))
{
echo 'code barre du livre: '.$ligne['codebarrelivre'].'<br>';
$livrecodebarre=$ligne['codebarrelivre'];
}
J'obtiens:
Code : Tout sélectionner
TEST: titre saisi: Vipere au poing
TEST: Requête générée : SELECT codebarrelivre FROM livre WHERE titre=' Vipere au poing'
TEST: adherent saisi: Astorino
La requete principale d'insertion a echouée
Cannot add or update a child row: a foreign key constraint fails
Posté : 28 mai 2006, 11:06
par Cyrano
Alors utilise trim() pour supprimer l'espace initial :
$query0="SELECT codebarrelivre FROM livre WHERE titre='". trim($titreEmprunt) ."'" ;
Posté : 28 mai 2006, 12:19
par romca
Ok merci mais j'ai trouvé pourquoi c'est que j'integre un deuxieme varibale dans la table et la j'ai plusieurs enregistrement possible, donc j'ai une erreur à l'integration des données dans la tabe...logique
Pour cela il faudrait que j'intègre les 2 éléments de ma table à la fois (qui s'affiche automatiquement dans un formulaire dans un champ de selection). Pourrait tu me dire comment intégré dans un même champ de selection d'une liste déroulante deux chaps d'une table? Voici une partie du code. J'y arrive pas j'ai du mal avec la concaténation, Merci
Code : Tout sélectionner
<select name="adherentEmprunt">
<?php
include("connectionuserBibliothecaire.php");
include ("connectionBDD.php");
$result=mysql_query ("SELECT nom,prenom FROM adherent WHERE 1");
if (!$result)
{
echo '<b>La requete à échouée: </b><br>'.mysql_error();
exit();
}
while($resultat=mysql_fetch_array($result))
{
echo '<option value=" ' .$resultat['nom']'.'$resultat['prenom']' ".>'.$resultat['nom']'.'$resultat['prenom'].'</option>' ;
}
mysql_close($connect_db);
?>
</select>
<!---------------------------------------------------------
Posté : 28 mai 2006, 13:49
par Cyrano
La concaténation de chaines avec des vriables PHP n'est pas terriblement complexe : le schéma est le suivant :
$concat = "début de chaîne suivie de ". $variable ." suivi de la fin de chaine";
Sur cette base, on peut corriger ton code de la manière suivante :
<select name="adherentEmprunt">
<?php
include("connectionuserBibliothecaire.php");
include ("connectionBDD.php");
$sql = "SELECT nom, prenom FROM adherent";
$result = mysql_query ($sql);
if (!$result)
{
echo '<b>La requete à échoué: </b><br>'.mysql_error();
exit();
}
else
{
while($resultat=mysql_fetch_array($result))
{
echo "<option value=\"". $resultat['nom'] ." ". $resultat['prenom'] ."\">". $resultat['nom'] ." ". $resultat['prenom'] ."</option>\n";
}
}
mysql_close($connect_db);
?>
</select>
<!--------------------------------------------------------- -->
Tu noteras que j'ai remplacé les apostrophes dans la chaine de création des options par des guillemets : il faut dans ce cas échapper les guillemets encadrant les valeurs d'attributs de la balise avec un "\".
J'ai également inséré un espace entre le nom et le prénom dans la valeurs : on fait là aussi une concaténation de façon à reproduire un affichage normal sans coller les deux valeurs entre elles.
Observe avec la coloration syntaxique, c'est plus clair à voir. (bouton [
php] au lieu de [
code])
Posté : 28 mai 2006, 14:27
par Invité
Ok j'ai compris merci. je vais mettre ça en application.
Comme tu le dis je vais faire également faire attention à la coloration syntaxique. dernière question: Les guillements ou l'apostrophe c'est pareil apparement?
Merci encore des tes conseils!
Posté : 28 mai 2006, 16:00
par Cyrano
Les guillements ou l'apostrophe c'est pareil apparement?
Pas tout à fait :
<?php
$var = "Valeur";
echo $var; // Affiche Valeur
echo "$var"; // Affiche Valeur
echo '$var'; // Affiche $var
?>
En clair pour être très sommaire, PHP n'interprète pas ce qui est entre guillemets.
Ce qu'il est important de faire, c'est une alternance correcte des deux. C'est en particulier important avec des tableaux associatifs :
La différence par exemple entre
$tableau['id'] et
$tableau[id], c'est que dans le premier cas, PHP va chercher la valeur correspondant à l'index "id", mais dans le second, PHP va d'abord chercher la valeur de la constante "id" pour savoir quel index chercher dans le tableau, et l'erreur classique, c'est que cette constante n'existe pas et ça te retourne une erreur.
Posté : 28 mai 2006, 16:31
par romca
Ok merci Cyrano...heureusement que t'es là, même un dimanche de pont !
[Resolu]: Imposs. de rentrer la valeur d'une var. avecSELE
Posté : 28 mai 2006, 16:32
par romca
Salut a tous, petite question de débutant:
Je ne comprend pas la valeur de la variable "$titreEmprunt" n'arrive pas a "rentrer" dans mon SELECT.
j'ai cherché pourtant sur le net et ça à l'air d'être bon. Est ce que quelqu'un aurait une idée, merci. Voici une partie du script qui récupère la valeur d'un formulaire, cette valeur est bien récupérée car la 1ere ligne controle ceci, et la valeur s'affiche bien.
de plus quand je met une valeur en type "text" à la palce de $titreEmprunt dans mon SELECT ça fonctionne.
Est ce que quelqu'un aurait une idée merci.
Code : Tout sélectionner
/Recupération des "codebarrelivre" ------------------------------------------------------------
echo 'TEST: titre saisi:'.$titreEmprunt.'<br>';
$query0="SELECT codebarrelivre FROM livre WHERE titre='$titreEmprunt' " ;
$result =mysql_query($query0);
if (!$result)
{
echo '<b>La requete de connection à la table livre à échouée: </b><br>'.mysql_error();
exit;
}
while($ligne=mysql_fetch_array($result))
{
echo 'code barre du livre: '.$ligne['codebarrelivre'].'<br>';
}