Page 1 sur 1

Usage de UNION dans une requete

Posté : 18 sept. 2009, 05:40
par Fredy07
Bonjour,

j'utilise une pagination dans un moteur de recherche, et quand je me place vers la 2eme page, il m'affiche le message que le mot clef est vide, message que j'ai mis pour verifier qu'il y ait un mot a chercher:
$word = $_POST['word'];

if (empty($word)){
echo("<font face=verdana size=2>mot cle est vide</font><br>"); 
echo("<a href=\"javascript:history.back()\"> Retourner </a>");
}

Re: Usage de UNION dans une requete

Posté : 18 sept. 2009, 08:08
par Fredy07
La portion du code de la requete est:
$query1 = "select description, url, title, hits from detail Where description LIKE '%$word%'";
$query1 .= " Union ";
$query1 .= "select description, url, title_ar, hits from detail_x Where description LIKE '%$word%'";

Re: Usage de UNION dans une requete

Posté : 18 sept. 2009, 21:26
par stopher
Hi ,

Si j'ai bien compris ,
tu as un "moteur de recherche" , dans lequel tu précise un mot clef .

Tu valide se formulaire , tu te retrouve avec les premiers résultats , sur ta page , et les liens vers la seconde troisième ect .. page si elles existent .

Ton problème , étant que lorsque tu cliques sur l'un des liens pour changer de page , ton mot clef disparait ( il n'est plu pris en compte ).

C'est ça ?

Il faut voir comment tu gères ton multipages , comment passes tu les paramètres lorsque tu navigues de l'une à l'autre .
De plus les données POST que tu as validés au niveau de ton moteur de recherche , n'existent plus à partir du moment ou tu envoies une nouvelle requête http au navigateur ( donc dés que tu cliques sur un lien ).

Plusieurs solutions s'offrent à toi , comme garder le/les mots clef en session ou passer ses mots clef entre chaque page .

Petit NB : Fais trés attention à sécuriser ta requête de recherche , échappes tes mots clef mysql_real_escape_string() + htmlentities() si tu affiches de nouveau les mots clefs saisies , car comme elle est là , l'on peut très facilement faire du dégât via des injections SQL .

Bonne continuation
Ch.

Re: Usage de UNION dans une requete

Posté : 19 sept. 2009, 01:59
par Fredy07
J'ai pratique cet exemple:

Re: Usage de UNION dans une requete

Posté : 19 sept. 2009, 02:59
par Fredy07
Voila mon code:
<?php
session_start();

$word = $_POST['word'];

if (empty($word)){
echo("<font face=verdana size=2>the word field is empty</font><br>"); //message qui s'affiche si le visiteur n'a pas rempli ce champ
echo("<a href=\"javascript:history.back()\"> Return </a>");
}
else
{
	

$messagesParPage=5; //Nous allons afficher 5 messages par page.

//Une connexion SQL doit être ouverte avant cette ligne...
$query = "select description, url, title from details Where description LIKE '%$word%'";
$query .= " Union ";
$query .= "select description, url, title from details_x Where description LIKE '%$word%'";

$result=mysql_query($query) or die (mysql_error());
$total = mysql_num_rows($result);

$donnees=mysql_fetch_assoc($result); //On range retour sous la forme d'un tableau.
//$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
if ($total) {
	
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);

if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
     $pageActuelle=intval($_GET['page']);
     
     if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
     {
          $pageActuelle=$nombreDePages;
     }
}
else // Sinon
{
     $pageActuelle=1; // La page actuelle est la n°1    
}

$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire

$query1 = "select description, url, title, hits from details Where description LIKE '%$word%'";
$query1 .= " Union ";
$query1 .= "select description, url, title_ar, hits from details_x Where description LIKE '%$word%'";
$query1 .= " ORDER BY hits DESC LIMIT $premiereEntree, $messagesParPage";

$result1=mysql_query($query1) or die (mysql_error());
	
	echo '<table width="500" align="center">'; // start table
	echo '<tr bgcolor="#dadeec">';
	echo '<td>Resultats "<font color="purple"><b>'.$word.'</b></font>" : ' .$total.'</td>';
	echo '</tr>';
	
		while ($row = mysql_fetch_array($result1)) {
		
		$color = ($total % 2) ? $bgcolor1 : $bgcolor2 ;
			
		$description = $row['description'];
		$title = $row['title'];
		$url = $row['url'];

$lg_max = 400; //nombre de caractère autoriser
if (strlen($description) > $lg_max)
{
$description = substr($description, 0, $lg_max);
$last_space = strrpos($description, " ");
$description = substr($description, 0, $last_space)."...";
}

// coloriser + souligner + mettre en gras le mot recherche
$description = str_replace ($word,'<b><u><font color="#33FF00">'.$word.'</font></u></b>', $description);

?>


  <tr bgcolor="<?php echo $color; ?>">
    <td>    
	<?php
	echo '<font color="red">'.$title_ar.'</font> >>>>>> <font color="green">'.$category.'</font><br>';
	?>
	</td>
  </tr>
  <tr bgcolor="<?php echo $color; ?>">
    <td>
    <?php
    echo strip_tags($description,'<b></b><u></u><font></font>'); // on autorise les <b> et </b>
    ?>
	</td>
  </tr>
  <tr bgcolor="<?php echo $color; ?>">
    <td>
	<?php
	echo $url;
	?>
	</td>
  </tr>
<?php
$total++;
	
	echo '<tr><td><hr class="HR01"></td></tr>';
			} // end while
			echo '</table>'; // end table
			} // end if
				

else
{
	echo 'aucun  resultat';
}



echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
{
     //On va faire notre condition
     if($i==$pageActuelle) //Si il s'agit de la page actuelle...
     {
         echo ' [ '.$i.' ] '; 
     }	
     else //Sinon...
     {
          echo ' <a href="index.php?menu=Search_Check&page='.$i.'">'.$i.'</a> ';
     }
}
echo '</p>';

} // end if empty


?>

Re: Usage de UNION dans une requete

Posté : 19 sept. 2009, 10:38
par stopher
Dés que tu changes de page ,
 echo ' <a href="index.php?menu=Search_Check&page='.$i.'">'.$i.'</a> ';
$_POST['word'] n'héxiste plus !

C'est donc normal qu'il te dise ce que que le mot clef n'est pas remplis .

Re: Usage de UNION dans une requete

Posté : 19 sept. 2009, 10:46
par stopher
De plus , le tuto que tu utilises , n'est pas exactement adapté , étant donné que c'est pour faire de la pagination d'un liver d'or , il n'y a donc pas de mot clef à gérer !

Voici un autre tuto , http://www.lephpfacile.com/howto/6-comm ... age-en-php

Idem ici il n'y a pas de mot clef , mais tu peux t'en inspirer , il faut passer le mot clef en paramètre GET entre chaque page , de la même façon que la position ( page courante ) est passé en paramétre .

Good luck ,

Ch.

Re: Usage de UNION dans une requete

Posté : 20 sept. 2009, 19:08
par Fredy07
J'ai pas pu le faire :non:

Re: Usage de UNION dans une requete

Posté : 20 sept. 2009, 19:15
par Fredy07
J'ai essaye avec GET mais puisque j'utilise les pseuo frames il m'affiche page par defaut:

index.php?word=test&search=GO