Requete php

Invité
Invité n'ayant pas de compte PHPfrance

10 févr. 2007, 22:12

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

Mammouth du PHP | 19672 Messages

10 févr. 2007, 23:31

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

11 févr. 2007, 00:07

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?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 févr. 2007, 12:07

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.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

11 févr. 2007, 12:50

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

Invité
Invité n'ayant pas de compte PHPfrance

11 févr. 2007, 13:35

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 févr. 2007, 14:42

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

11 févr. 2007, 15:31

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

Eléphant du PHP | 259 Messages

11 févr. 2007, 15:43

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... ? :)

Invité
Invité n'ayant pas de compte PHPfrance

11 févr. 2007, 15:54

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?

Eléphant du PHP | 259 Messages

11 févr. 2007, 16:10

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 ?

ViPHP
ViPHP | 3607 Messages

11 févr. 2007, 16:29

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

Invité
Invité n'ayant pas de compte PHPfrance

11 févr. 2007, 16:54

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?

Invité
Invité n'ayant pas de compte PHPfrance

11 févr. 2007, 17:04

ok, j'arrive a reccuperer le titre de la page...

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

Invité
Invité n'ayant pas de compte PHPfrance

11 févr. 2007, 17:34

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