ARRAY & Requete sql.

Mammouth du PHP | 504 Messages

22 nov. 2011, 15:27

Bonjour a tous,

Je cherche a recuperer les variables d'un tableau dans ma requete sql.

Alors j'ai ceci:
$tmp45 = explode(';', stripslashes($page['mots_clefs']));
$content['mots_clefs'] = array();
foreach($tmp45 as $tmp46) {
	if(strlen(trim($tmp46)) > 2) $content['mots_clefs'][] = trim($tmp46);
}
et
$relatif1 = mysql_query("SELECT id, titre, FROM Adresse	WHERE titre LIKE '%[b]Valeur de mot cle du tableau[/b]%' order by rand() limit 20");
En fait, je cherche a mettre a la place de valeur de mot cle du tableau par ma valeur de mon tableau. ex: valeur[1], valeur[2]

Merci de votre aide.

ViPHP
xTG
ViPHP | 7331 Messages

22 nov. 2011, 15:41

Par concaténation. ;)
$relatif1 = mysql_query("SELECT id, titre, FROM Adresse WHERE titre LIKE '%" . mysql_real_escape_string($value[0]) . "%' order by rand() limit 20");
Et sans oublier mysql_real_escape_string() pour échapper la variable.

Mammouth du PHP | 504 Messages

22 nov. 2011, 17:00

En fait, j'ai pas compris ta réponse:

J'ai essayé ça:

Code : Tout sélectionner

$relatif1 = mysql_query("SELECT id, titre, FROM Adresse WHERE titre LIKE '%" . mysql_real_escape_string($content['mots_clefs'][0]) . "%' order by rand() limit 20");
Mais ça ne marche pas.

En fait, je n'arrive pas a recuperer la premiere ou deuxieme valeur dans mon tableau.

Mammouth du PHP | 672 Messages

22 nov. 2011, 17:21

Bonjour.

1. Affiche le contenu de ton tableau :
var_dump($content['mots_clefs']);
2. Mets ta requête SQL dans une variable, et profite-en pour l'afficher :
$requete = "SELECT id, titre, FROM Adresse WHERE titre LIKE '%<span style="font-weight: bold">Valeur de mot cle du tableau</span>%' order by rand() limit 20";
echo "Requete = $requete";
$relatif1 = mysql_query($requete) or die ("erreur dans la requete :".mysql_error());
3. Essaye d'éclaircir un peu ton besoin.
Tu veux passer ta requête à partir d'un mot clé, ou tu veux automatiser pour la passer pour chacun ?

Mammouth du PHP | 504 Messages

22 nov. 2011, 17:56

Re,

Mon vrai besoin est de passer la requete automatiquement pour chacun des mots_clefs. Mais vu que je n'arrive meme pas a en recuperer un seul dans ma requete. Je ne me suis pas pencher dessus encore.

Mammouth du PHP | 504 Messages

22 nov. 2011, 18:48

Alors quand, je fais un:

Code : Tout sélectionner

<?php print_r ($content['mots_clefs']);?>
Jai bien mes valeurs: Array ( [0] => genetique [1] => reproduction )

maintenant il faut que je prenne individuellement ces valeurs pour les inclure dans ma requete.

Mammouth du PHP | 672 Messages

22 nov. 2011, 18:55

foreach ($content['mots_clefs'] as $mot_cle) {
   $requete = "SELECT id, titre, FROM Adresse WHERE titre LIKE '$mot_cle' order by rand() limit 20";
   echo $requete; // afficher la requête
   $relatif1 = mysql_query($requete) or die ("erreur dans la requete '$requete' :".mysql_error());
   // traitement du retour de la requête
}
Et vu ton problème, tu devrais tester les requêtes générées en les passant dans phpMyAdmin (ou équivalent) :roll:

Mammouth du PHP | 504 Messages

22 nov. 2011, 19:04

Oui, ca vient de ma requette:

J'ai un probleme par la: ....
WHERE titre LIKE '%" .stripslashes($content['mots_clefs'][0])."%' order by rand() limit 20"
:?

ViPHP
xTG
ViPHP | 7331 Messages

22 nov. 2011, 19:32

Que renvoie echo $requete ? On ne te l'a pas demandé pour rien. ^^
Y-a-t-il une erreur d'affichée sur ta page lors de l'exécution ?

Mammouth du PHP | 504 Messages

22 nov. 2011, 19:42

Que renvoie echo $requete ? On ne te l'a pas demandé pour rien. ^^

ça me donne: Requete = Resource id #14

???

J'ai fait tout ça:

<h4><?php echo "Requete = $depeches_relatif";?></h4> => Requete = Resource id #14

<h4><?php print_r ($content['mots_clefs']);?></h4> => Array ( [0] => genetique [1] => reproduction )

<h4><?php echo ($content['mots_clefs'][0]);?></h4> => genetique

<h4><?php echo ($content['mots_clefs'][1]);?></h4> => reproduction

Je ne comprend pas individuellement, ça marche et dés que je les mets dans la requete ça bug...

ViPHP
xTG
ViPHP | 7331 Messages

22 nov. 2011, 21:15

Non, ce qui nous intéresse c'est la requête SQL : $requete
Et non $relatif qui est le retour de l'exécution de la requête.

Mammouth du PHP | 504 Messages

22 nov. 2011, 21:53

echo de la requete m'a donné:

Code : Tout sélectionner

SELECT id, titre FROM news WHERE titre LIKE '%%' order by rand() limit 20
avec cette requette a la envoyé/
$depeches_relatif = mysql_query("SELECT id, titre FROM news WHERE titre LIKE '%".stripslashes($content['mots_clefs'][0])."%' order by rand() limit 20");
Merci de votre aide.

ViPHP
xTG
ViPHP | 7331 Messages

22 nov. 2011, 22:50

Déjà... stripslashes() c'est loin d'être mysql_real_escape_string() ;)
S'il existe une fonction faite pour le driver c'est pas pour rien.

Ensuite il semblerai que tout simplement ta variable soit vide. Ou bien que cet index n'existe pas et que ton niveau d'erreur n'est pas réglé pour t'afficher le warning.
Fais un var_dump() de cette variable.

Mammouth du PHP | 504 Messages

22 nov. 2011, 22:55

Le var_dump de la variable me donne:

array(2) { [0]=> string(9) "genetique" [1]=> string(12) "reproduction" }

Mammouth du PHP | 504 Messages

22 nov. 2011, 23:03

Je crois avoir trouver. La variable $content['mots_clefs'] était défini plus loin dans mon script en fait je l'ai défini avant et là ça marche. :wink: La variable s'affiche bien dans la requete.

merci à vous