Page 1 sur 2

Requete php

Posté : 10 févr. 2007, 22:12
par Invité
Bonjour,

j'essaie de construire une fonction php: qui me permet de rechercher dans ma base de donner un les details dans unae autre table.

ex: j'ai une page avec pour titre paul sur cette page il il y a une breve description de paul. je veux placer un lien a la suite qui verifie si paul existe dans l'autre table, et qui fasse le lien vers l'autre page si paul exite reellement.

Voici ce que j'ai fait:

Dans la page .php:
/* le titre de la page */
$article = mysql_fetch_array(mysql_query("select * from lexique where id = '".addslashes($_GET['id'])."' limit 1"));
$content['titre'] = stripslashes($article['titre']);


/* le lien qui suit */

// je recupere le titre de la page  $article et lui demande que paul s'affiche//

$i = 0;
$lexique = mysql_query("select id, titre from lexique where titre LIKE ($article)");
while($lexiques = mysql_fetch_array($lexique)) {
	$content['lexique'][$i]['titre'] = stripslashes($lexiques['titre']);;
	$content['lexique'][$i]['id'] = $lexique['id'];
	$i++;
}

Voir ce que j'ai marquer dans le template:
<a href="dicodocDetails.php?id=<?=@$content['lexique'][0]['id'];?>"> 
        <?=@$content['lexique'][0]['titre'];?></a>
mais voici ce que le serveur me repond:


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/data/lri/G/M/L/A/GMLA58RP/lexiqueDetails.php on line 42


Merci de votre aide

Posté : 10 févr. 2007, 23:31
par Cyrano
Ton message d'erreur est probablement du à ce que MySQL retourne un message d'erreur au lieu de la ressource attendue.

Donc revoie ta méthodologie :
-1- définir la requête SQL
-2- l'exécuter
-3- etc...

Ça veut dire que lorsque tu crées ton code, commence par créer la requête :
$sql = "SELECT .... etc ....";
Après seulement tu l'exécutes;
$ressource = mysql_query($sql);
Et là, si tu as un problème, tu à la possibilité de faire afficher la requête avant son exécution en intercalant un :
echo($sql);
Fais alors un copier/coller et teste-là avec phpMyAdmin par exemple, tu seras fixé sur la nature de l'erreur.

Posté : 11 févr. 2007, 00:07
par Invité
Voici ce que j'ai fait:
dans la partie php:
$lexique = "select id, titre from lexique where titre LIKE ($article)"; 
$lien= mysql_query ($lexique);
echo($lien); 
Dans le templates:
<?php  echo($lien); ?>
rien ne s'affiche...


Le titre de la page est déterminé par la foncrion $article plus haut - et le mot retourné par $article existe dans les deux tables?

Posté : 11 févr. 2007, 12:07
par Ryle
As tu affiché ta requête puis essayé de la jouer dans mysql (ou phpMyAdmin) comme te l'as suggéré Cyrano ?

Tu aurais sans doute rapidement constaté qu'il t'affichait un message d'erreur te disant que ta syntaxe sql n'est pas bonne.

Pour rappel, en sql, une chaine de caractères (varchar, date, text, ...) doit toujours être entouré d'apostrophes. Seuls les nombres (int, float, ...) ne doivent pas en avoir.
Par ailleurs, la fonction LIKE n'a d'intérêt que si tu utilises des jocker (%) dans ta recherche pour indiquer les parties de la chaine que tu ne connais pas :

Code : Tout sélectionner

LIKE 'ma_chaine' équivaut à : est strictement identique à 'ma_chaine' ( = 'ma_chaine' ) LIKE 'ma_chaine%' équivaut à : n'importe quoi commence par 'ma_chaine' LIKE '%ma_chaine' équivaut à : n'importe quoi qui se termine par 'ma_chaine' LIKE '%ma_chaine%' équivaut à : n'importe quoi qui contient 'ma_chaine' ...
A noter que MySql est insensible à la casse, mais ce n'est pas le cas des autres bases de données.

Posté : 11 févr. 2007, 12:50
par Invité
j'ai modifié:

Voici ce que j'ai fait:
// je recupere le titre de la page  $article // 

echo($article); 

// je selectionne dans l'autre table la le titre et l'id correspondant au titre en question:

$lexique = "select id, titre from dicodoc where titre LIKE '$article'";
 
$lien= mysql_query ('$lexique');

//j'affiche le résulats:
echo($lien); 

dans la page templates:
 <?php  echo($lien); ?>

Voici ce qu'il me dit...

ArrayResource id #7

Resource id #7 ??

Posté : 11 févr. 2007, 13:35
par Invité
la requete fonctionne dans mysql, cependant je ne peux tester tout car $article est variable...

il me manque peut etre un my_fletch_array? pour que ca fonctionne

Posté : 11 févr. 2007, 14:42
par Ryle
Resource id# signifie que l'objet que tu affiche correspond a une ressource que php ne sait pas afficher tel quel, en l'occurence un ResultSet MySQL. (A noter qu'il fait de même en affichant Array() quand tu lui demandes d'afficher un tableau avec echo)

Il te faut donc effectivement parcourir cette ressuorce avec l'une des fonctions mysql_fetch_* pour en récupérer les résultats.

Par ailleurs, si tu n'utilises pas de joker dans le LIKE de ta requete sql, et que tu compares donc des chaines identiques, préfère lui toujours la fonction égale (=) qui consommera beaucoup moins de ressources pour un même résultat :)

Posté : 11 févr. 2007, 15:31
par Invité
Ca ne marche toujours pas...

Voici ce que j'ai fait:

Dans la page php:
// je recupere le titre de la page  $article et lui demande que paul s'affiche// 
echo($article); 
$lexique = "select id, titre from dicodoc where titre='$article'"; 
$lien= mysql_query ($lexique);
$resultat = mysql_fetch_array($lien);
Dans le templates:
<?php  echo($resultat); ?>
mais toujours le meme affichage:

il affiche: Array en haut de la page...

Posté : 11 févr. 2007, 15:43
par Jules Petibidon
hello,

pour information, http://www.php.net/manual/fr/ est ton ami. lorsque tu ne comprends pas un résultat de fonction, tu n'as qu'a la rechercher sur ce site et tu en obtiendras une description complete.

d'aucuns diront que c'est de la concurrence déloyale pour phpfrance, mais c'est des jaloux médisants ;)

sinon mysql_fetch_array renvoie un tableau (array en anglais) dont les index contiennent le nom des champs retournés par la requete... et un index numérique en plus pour les cas ou il y aurait des doublons dans les libellés...

je t'embrouille là ? ;) bon ok, donc en regle générale on utilise quelque chose qui ressemble a ca :
$ma_requete = mysql_query( '....' );
while( $resultat = mysql_fetch_array( $ma_requete ) ){
 echo $resultat['mon_champ']
}
mon_champ étant le nom d'une des colonnes que tu as récupéré par ta requete.

La lecture de quelques tutos serait peut-etre intéressante aussi... ? :)

Posté : 11 févr. 2007, 15:54
par Invité
Non toujours pareil??

code page php:
// je recupere le titre de la page  $article et lui demande que paul s'affiche// 
echo($article); 
$lexique = "select id, titre from dicodoc where titre='$article'"; 
$lien= mysql_query ($lexique);
while ( $resultat = mysql_fetch_array($lien)){
echo $resultat['titre'];
Code page templates:
<?php  echo $resultat['titre']; ?>
Toujours: en haut de page array?

Posté : 11 févr. 2007, 16:10
par Jules Petibidon
c'est pareil pour $article, si on est toujours sur la meme base que le premier message, c'est un résultat de mysql_fetch_array(), donc un array...

a priori tu devrais afficher $article['titre'] à la place de $article... non ?

Posté : 11 févr. 2007, 16:29
par jojolapine
va faire un tour içi: http://phpdebutant.org/article66.php
Parce que apperement tu n'est pas très familier des bases de données...

Posté : 11 févr. 2007, 16:54
par Invité
voici ce que j'ai fait:

dans la page .php:
/* le titre de la page */
$article = mysql_fetch_array(mysql_query("select * from lexique where id = '".addslashes($_GET['id'])."' limit 1"));
$content['titre'] = stripslashes($article['titre']);

/* le corps de la page */
$content['corps'] = '<p><INPUT TYPE="button" VALUE="Retour" style="background: white; border: 1px solid gray" onClick="history.back()"></p>';
$content['corps'] .= nl2br(bbCode(stripslashes($article['corps'])));
$content['apropos'] .= 'Article écrit le '.$article['date'].' par <b>'.$article['auteur'].'</b><br />Source: '.$article['source'];


/* le lien qui suit */ 

// je recupere le titre de la page  $article et lui demande que paul s'affiche// 
echo($article['titre']); 

$lien= mysql_query ("select id, titre from dicodoc where titre='$article'");
while ( $resultat = mysql_fetch_array($lien)){

}

et dans la page templates:
 <?php echo $resultat['titre']; ?>
le mot en question s'affiche bien, mais il apparait en haut a droite de la page?

mais pas du tout dans le centre de la page ou il devrait etre en théorie?

Posté : 11 févr. 2007, 17:04
par Invité
ok, j'arrive a reccuperer le titre de la page...

par contre pour la requete ca reste délicat...

Posté : 11 févr. 2007, 17:34
par Invité
Par contre, je bloque sur la construction de cette requete qui recupere le titre et va chercher dans l'autre table la suite, et fait le lien??

je n'arrive pas du tout a construire cette requete??