Impossible de rentrer la valeur d'une variable avec SELECT

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Impossible de rentrer la valeur d'une variable avec SELECT

[Resolu]: Imposs. de rentrer la valeur d'une var. avecSELE

par romca » 28 mai 2006, 16:32

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>'; }

par romca » 28 mai 2006, 16:31

Ok merci Cyrano...heureusement que t'es là, même un dimanche de pont !

par Cyrano » 28 mai 2006, 16:00

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.

par Invité » 28 mai 2006, 14:27

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!

par Cyrano » 28 mai 2006, 13:49

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])

par romca » 28 mai 2006, 12:19

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> <!---------------------------------------------------------

par Cyrano » 28 mai 2006, 11:06

Alors utilise trim() pour supprimer l'espace initial :
$query0="SELECT codebarrelivre FROM livre WHERE titre='". trim($titreEmprunt) ."'" ;

par Invité » 28 mai 2006, 10:20

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

par Cyrano » 28 mai 2006, 09:55

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.

par Invité » 28 mai 2006, 09:29

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]

par Cyrano » 28 mai 2006, 09:11

$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.

par barbux » 28 mai 2006, 01:10

$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)."' " ; 

par Invité » 28 mai 2006, 00:17

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.

par Cyrano » 28 mai 2006, 00:01

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>';
}

Impossible de rentrer la valeur d'une variable avec SELECT

par Invité » 27 mai 2006, 23:45

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>'; }