Moteur de recherche

Eldouu
Invité n'ayant pas de compte PHPfrance

01 mai 2010, 16:26

Bonjour,

j'aimerais savoir l'erreur , car je ne le trouve pas dans ce code.

<?php


include 'identification.php';

$connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error());
mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error());

#la requête sql
$requete = 'select * from tp2_php_articles;';
#on fait exécuter la requête
$resultat = mysql_query($requete, $connexion) or die("Une erreur est survenue : " . mysql_error());;
#on fait la boucle qui permet d'extraire chaque ligne d'enregistrement de la bd
// Récupère la variable
$recherche = isset($_POST['texte_articles']) ? $_POST['titre_articles'] : '';
// la requete mysql
$sql = mysql_query(
"SELECT texte_articles, titre_articles FROM tp2_php_articles WHERE texte_articles LIKE \"%$recherche%\".
" OR titre_articles LIKE \"%$recherche%\") or die (mysql_error());


// affichage du résultat
while(list($texte_articles, $titre_articles)=mysql_fetch_array($sql)){
echo 'Resultat de la recherche: '.$texte_articles.', '.$titre_articles.' <br />';
mysql_close($connexion);
}

?>


L'erreur qu'il me donne est arse error: syntax error, unexpected T_STRING in /hsphere/local/home/xxx/moteur.php on line 41


Merci

Eldouu
Invité n'ayant pas de compte PHPfrance

01 mai 2010, 16:27

" OR titre_articles LIKE \"%$recherche%\") or die (mysql_error()); correspond la ligne 41

Mammouth du PHP | 985 Messages

01 mai 2010, 16:40

Bonjour,

Tu te mélanges avec les guillemets ici:
$sql = mysql_query(
"SELECT texte_articles, titre_articles FROM tp2_php_articles WHERE texte_articles LIKE \"%$recherche%\".
" OR titre_articles LIKE \"%$recherche%\") or die (mysql_error());
Après le premier LIKE

Essaye comme ceci:
$sql = mysql_query("SELECT texte_articles, titre_articles FROM tp2_php_articles WHERE texte_articles LIKE '%$recherche%' OR titre_articles LIKE '%$recherche%'") or die (mysql_error());
(Tu peux aussi utiliser les apostrophes pour éviter d'utiliser des anti-slashs)

Je te conseille aussi d'utiliser les doubles slashs pour les commentaires en Php au lieu des #.

Ensuite le:
mysql_close($connexion);
Déplace le en dessous de ta boucle While, au lieu qu'il soit à l'intérieur.
Donc après le dernier: }

Pour info, il n'est en général pas nécessaire de fermer la connexion à la base de donnée avec mysql_close(), car elle se ferme automatiquement à la fin du script.
Donc tu devrais pouvoir le supprimer sans soucis si c'est bien la fin du script :) .

...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eldouu
Invité n'ayant pas de compte PHPfrance

01 mai 2010, 16:58

Merci ça marche! sauf là j'ai un autre petit problème.

Le résultat du moteur est déjà affiché sur la page abonnement.php sans que j'aille tappé quelques choses dans la barre de recherche.

J'ai deux fichier en fait, abonnement.php et moteur.php le fichier identification.php est simplement la connexion a ma BD.


Abonnement.php :

Code : Tout sélectionner

<?php session_start(); $_SESSION['actif']='index.php'; include 'entete.php'; include 'menu.php'; include 'contenu.php'; include 'moteur.php'; echo' <FORM METHOD="POST"> <fieldset id="formulaire1"> <ul> <li>Pseudo : <input type="text" class="input" name="login" size=12></li> <li>Mot de passe : <input type="password" class="input" name="password" size=12></li></ul>'; # CONNEXION DE L'ADMIN include 'identification.php'; $connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error()); mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error()); #la requête sql $requete = 'select * from tp2_php_usagers;'; #on fait exécuter la requête $resultat = mysql_query($requete, $connexion) or die("Une erreur est survenue : " . mysql_error());; #on fait la boucle qui permet d'extraire chaque ligne d'enregistrement de la bd $loginOK = false; // cf Astuce // On n'effectue les traitement qu'à la condition que // les informations aient été effectivement postées if (isset($_POST['login']) && isset($_POST['password']) ) { $login = strtolower($_POST['login']); $pass_admin = strtolower($_POST['password']); // On va chercher le mot de passe afférent à ce login $sql = "SELECT * FROM tp2_php_usagers WHERE pseudo_usagers = '$login';"; $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql); // On vérifie que l'utilisateur existe bien if (mysql_num_rows($req) > 0) { $data = mysql_fetch_assoc($req); // On vérifie que son mot de passe est correct if ($pass_admin == $data['mot_de_passe_usagers']) { $loginOK = true; } } } // Si le login a été validé on met les données en sessions if ($loginOK) { $_SESSION['pseudo_usagers'] = $data['pseudo_usagers']; $_SESSION['mot_de_passe_usagers'] = $data['mot_de_passe_usagers']; echo 'Vous etes bien logué $pseudo_usagers'; } // Envois vers un message d'erreur si le login et password est pas bon else if (isset($_POST['login']) && isset($_POST['password'])) { echo 'Erreur : Données entrées incorrectes'; echo '<br />'; } mysql_close($connexion); echo'<div id="bouton"><input id="connect" type="submit" value="Connexion" name="bouton_connexion"> </fieldset> </FORM></div>'; //include ('accueil.php'); //include ('competence.php'); //include ('objectif.php'); //accueil(); //competence(); //objectif(); echo'<div iv="recherche"<form method="POST" id="recherche" action=""> Rechercher un mot : <input type="text" name="recherche"> <input type="SUBMIT" value="Rechercher"> </form></div> '; recherche(); $_SESSION['patate']="coucou"; if (isset($_POST['valider'])) { echo "<script>document.location = 'https://espacevacant.com/333-101/skelling/PHP/TP2/Pages/page_securisee.php?ses_no_id=".Session_id()."'</script>"; } echo "<div id='texte1'><center>Avant de valider votre achat, vous devez passer dans le mode s&eacute;curis&eacute;.</div>"; echo "<br /><br /><br /><form method=POST>"; echo "<div id='bouton3'><input type=submit name=valider value='Mode s&eacute;curis&eacute;'></div>"; echo "</form></center>"; include 'footer2.php'; ?>

Moteur.php

Code : Tout sélectionner

<?php include 'identification.php'; $connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error()); mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error()); #la requête sql $requete = 'select * from tp2_php_articles;'; #on fait exécuter la requête $resultat = mysql_query($requete, $connexion) or die("Une erreur est survenue : " . mysql_error());; #on fait la boucle qui permet d'extraire chaque ligne d'enregistrement de la bd // Récupère la variable function recherche(){ $recherche = isset($_POST['texte_articles']) ? $_POST['titre_articles'] : ''; // la requete mysql $sql = mysql_query("SELECT texte_articles, titre_articles FROM tp2_php_articles WHERE no_id_articles LIKE '%$recherche%' OR titre_articles LIKE '%$recherche%'") or die (mysql_error()); // affichage du résultat while(list($texte_articles, $titre_articles)=mysql_fetch_array($sql)){ echo 'Resultat de la recherche: '.$texte_articles.', '.$titre_articles.' <br />'; } } ?>

J'aimerais bien qu'il saffiche simplement quand je tappe quelques et non pas tout le temps.


Merci

Mammouth du PHP | 985 Messages

01 mai 2010, 17:11

Je n'ai pas tout regardé mais tu inclus automatiquement le fichier moteur.php qui effectue une recherche sans test d'envoi du formulaire...

Donc remplace ceci:
include 'moteur.php';
Par:
if (isset($_POST['Rechercher'])) {
    include 'moteur.php';
}
Et ensuite pour éviter une erreur de fonction inconnue:

Remplace ceci:
recherche();
Par:
if (isset($_POST['Rechercher'])) {
    recherche();
}
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eldouu
Invité n'ayant pas de compte PHPfrance

01 mai 2010, 17:30

Merci dr@ke c'est très gentil, sauf que là j'ai rien qui s'affiche.




Moteur.php
 <?php
 function recherche(){
include 'identification.php';
	$connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error());
	mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error());

	#la requête sql
	$requete = 'select * from tp2_php_articles;';
	#on fait exécuter la requête
	$resultat = mysql_query($requete, $connexion) or die("Une erreur est survenue : " . mysql_error());;
	#on fait la boucle qui permet d'extraire chaque ligne d'enregistrement de la bd
// Récupère la variable

$recherche = isset($_POST['texte_articles']) ? $_POST['titre_articles'] : '';
// la requete mysql
$sql = mysql_query("SELECT texte_articles, titre_articles FROM tp2_php_articles WHERE no_id_articles LIKE '%$recherche%' OR titre_articles LIKE '%$recherche%'") or die (mysql_error()); 


// affichage du résultat
while(list($texte_articles, $titre_articles)=mysql_fetch_array($sql)){
echo 'Resultat de la recherche: '.$texte_articles.', '.$titre_articles.' <br />';

}
}
?>


Abonnement.php
<?php
	session_start();
	$_SESSION['actif']='index.php';
	
	include 'entete.php';
	include 'menu.php';
	include 'contenu.php';
	
	
	echo'
	
	<FORM METHOD="POST">
		<fieldset id="formulaire1">
			<ul> 
			<li>Pseudo : <input type="text" class="input" name="login" size=12></li>
			<li>Mot de passe : <input type="password" class="input" name="password" size=12></li></ul>';

	# CONNEXION DE L'ADMIN
	include 'identification.php';
	$connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error());
	mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error());

	#la requête sql
	$requete = 'select * from tp2_php_usagers;';
	#on fait exécuter la requête
	$resultat = mysql_query($requete, $connexion) or die("Une erreur est survenue : " . mysql_error());;
	#on fait la boucle qui permet d'extraire chaque ligne d'enregistrement de la bd

	$loginOK = false;  // cf Astuce

	// On n'effectue les traitement qu'à la condition que
	// les informations aient été effectivement postées
if (isset($_POST['login']) && isset($_POST['password']) ) {

  $login = strtolower($_POST['login']);
  $pass_admin = strtolower($_POST['password']);

  // On va chercher le mot de passe afférent à ce login
  $sql = "SELECT * FROM tp2_php_usagers WHERE pseudo_usagers = '$login';";
  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
 
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);
   
    // On vérifie que son mot de passe est correct
    if ($pass_admin == $data['mot_de_passe_usagers']) {
      $loginOK = true;
    }
  }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) 
{
  $_SESSION['pseudo_usagers'] = $data['pseudo_usagers'];
  $_SESSION['mot_de_passe_usagers'] = $data['mot_de_passe_usagers']; 
   echo 'Vous etes bien logué $pseudo_usagers';
  
}

// Envois vers un message d'erreur si le login et password est pas bon
else if (isset($_POST['login']) && isset($_POST['password'])) {
	
	echo 'Erreur : Données entrées incorrectes';
	echo '<br />';
}
	mysql_close($connexion);
echo'<div id="bouton"><input id="connect" type="submit" value="Connexion" name="bouton_connexion">		
		</fieldset>
	</FORM></div>';
	
	//include ('accueil.php');
	//include ('competence.php');
	//include ('objectif.php');
	
	//accueil();
	//competence();
	//objectif();

if (isset($_POST['Rechercher'])) {
    include 'moteur.php';
}
echo'
<div iv="recherche"<form method="POST" id="recherche" action=""> 
Rechercher un mot : <input type="text" name="recherche">
<input type="SUBMIT" value="Rechercher"> 
</form></div>
';
	if (isset($_POST['Rechercher'])) {
    recherche();
}
$_SESSION['patate']="coucou";
if (isset($_POST['valider']))
{
echo "<script>document.location = 'https://espacevacant.com/333-101/skelling/PHP/TP2/Pages/page_securisee.php?ses_no_id=".Session_id()."'</script>";
}
echo "<div id='texte1'><center>Avant de valider votre achat, vous devez passer dans le mode s&eacute;curis&eacute;.</div>";
echo "<br /><br /><br /><form method=POST>";
echo "<div id='bouton3'><input type=submit name=valider value='Mode s&eacute;curis&eacute;'></div>";
echo "</form></center>";

	
	include 'footer2.php';
?>



Merci

Mammouth du PHP | 985 Messages

01 mai 2010, 17:43

[EDIT]
Désolé, erreur de ma part:

Remplace ceci, pour les deux isset:
if (isset($_POST['Rechercher'])) {
par:
if (isset($_POST['recherche'])) {
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eldouu
Invité n'ayant pas de compte PHPfrance

01 mai 2010, 18:00

Merci Dr@ke !!! problème résolu.


Bonne Soirée!!

Mammouth du PHP | 985 Messages

01 mai 2010, 18:12

Maintenant que tu as modifié ton fichier moteur.php qui contient dorénavant que la fonction recherche().
Il n'est plus nécessaire de l'inclure qu'au moment de l'envoi du formulaire.

Tu peux donc supprimer le premier isset() sur l'include du fichier moteur.php.
Et donc ne laisser que le deuxième isset() qui exécute la fonction recherche() :wink:

(Pour mettre le Topic résolu, tu peux cliquer sur la petite coche verte au dessus à droite)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eldouu
Invité n'ayant pas de compte PHPfrance

01 mai 2010, 18:54

Ok très bien merci!

Qu'est tu me conseillerais de rajouter pour que si la personne tappe quelques choses qui ne se retrouve pas dans titre_articles et nom_articles de la table tp2_php_articles, marquerais un message Il y aucun résultat trouvé ?

 <?php
 function recherche(){
include 'identification.php';
	$connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error());
	mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error());

	#la requête sql
	$requete = 'select * from tp2_php_articles;';
	#on fait exécuter la requête
	$resultat = mysql_query($requete, $connexion) or die("Une erreur est survenue : " . mysql_error());;
	#on fait la boucle qui permet d'extraire chaque ligne d'enregistrement de la bd
// Récupère la variable

$recherche = isset($_POST['texte_articles']) ? $_POST['titre_articles'] : '';
// la requete mysql
$sql = mysql_query("SELECT texte_articles, titre_articles FROM tp2_php_articles WHERE no_id_articles LIKE '%$recherche%' OR titre_articles LIKE '%$recherche%'") or die (mysql_error()); 


// affichage du résultat
while(list($texte_articles, $titre_articles)=mysql_fetch_array($sql)){
echo 'Resultat de la recherche: '.$texte_articles.', '.$titre_articles.' <br />';

}
}
?>

Merci

Mammouth du PHP | 985 Messages

01 mai 2010, 19:05

Bien, il y a plusieurs possibilités, tu peux utiliser la fonction mysql_num_rows() juste avant ta boucle While.

http://fr.php.net/manual/fr/function.mysql-num-rows.php

Un test if sur le résultat de cette fonction -> si le résultat est égale à 0 -> afficher ton message...

Regarde les exemples et les commentaires...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eldouu
Invité n'ayant pas de compte PHPfrance

03 mai 2010, 17:28

Code : Tout sélectionner

<?php function recherche(){ include 'identification.php'; $connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error()); mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error()); #la requête sql $requete = 'select * from tp2_php_articles;'; #on fait exécuter la requête $resultat = mysql_query($requete, $connexion) or die("Une erreur est survenue : " . mysql_error());; #on fait la boucle qui permet d'extraire chaque ligne d'enregistrement de la bd // Récupère la variable $recherche = isset($_POST['texte_articles']) ? $_POST['titre_articles'] : ''; // la requete mysql $sql = mysql_query("SELECT texte_articles, titre_articles FROM tp2_php_articles WHERE no_id_articles LIKE '%$recherche%' OR titre_articles LIKE '%$recherche%'") or die (mysql_error()); $num_rows = mysql_num_rows($result); // affichage du résultat while(list($texte_articles, $titre_articles)=mysql_fetch_array($sql)){ echo 'Resultat de la recherche: '.$texte_articles.', '.$titre_articles.' <br />'; } } ------------------- je sais vraiment pas comment le coder. Pour que si title_articles et textes_articles correspondent à 0. Il y a un echo ' Aucun Résultat' ? ?>

Mammouth du PHP | 985 Messages

03 mai 2010, 17:52

$nombre_resultat = mysql_num_rows($result);

if ($nombre_resultat) {
    // affichage du résultat
    while(list($texte_articles, $titre_articles)=mysql_fetch_array($sql)){
            echo 'Resultat de la recherche: ' . $texte_articles . ', ' . $titre_articles;
    }
} else if ($nombre_resultat === false) {
    echo 'Erreur';
} else {
    echo 'Aucun résultat pour votre recherche.';
}
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eldouu
Invité n'ayant pas de compte PHPfrance

04 mai 2010, 00:39

Très bien merci dr@rake.
 <?php
 function recherche(){
include 'identification.php';
	$connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error());
	mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error());

	#la requête sql
	$requete = 'select * from tp2_php_articles;';
	#on fait exécuter la requête
	$resultat = mysql_query($requete, $connexion) or die("Une erreur est survenue : " . mysql_error());;
	
	#on fait la boucle qui permet d'extraire chaque ligne d'enregistrement de la bd
// Récupère la variable

$recherche = isset($_POST['texte_articles']) ? $_POST['titre_articles'] : '';
// la requete mysql
$sql = mysql_query("SELECT texte_articles, titre_articles FROM tp2_php_articles WHERE no_id_articles LIKE '%$recherche%' OR titre_articles LIKE '%$recherche%'") or die (mysql_error()); 
$nombre_resultat = mysql_num_rows($result);
// affichage du résultat
if ($nombre_resultat) {
    // affichage du résultat
    while(list($texte_articles, $titre_articles)=mysql_fetch_array($sql)){
            echo 'Resultat de la recherche: ' . $texte_articles . ', ' . $titre_articles;
    }
} else if ($nombre_resultat === false) {
    echo 'Erreur';
} else {
    echo 'Aucun résultat pour votre recherche.';
}
?>
Il me sort comme erreur Parse error: syntax error, unexpected $end in /hsphere/local/home/timmatane/espacevacant.com/333-101/skelling/PHP/TP2/Pages/moteur.php on line 30

Merci

Mammouth du PHP | 985 Messages

04 mai 2010, 00:46

Il y a un ; de trop ici:
$resultat = mysql_query($requete, $connexion) or die("Une erreur est survenue : " . mysql_error());;
________________

Et aussi, tu as oublié le dernier } qui ferme ta fonction recherche().

________________

Et encore, vue que ta requête est $sql et non $result, il faut modifier ceci:
$nombre_resultat = mysql_num_rows($result);
Par:
$nombre_resultat = mysql_num_rows($sql);
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.