Récupératio de données

Eléphant du PHP | 64 Messages

17 sept. 2010, 17:30

Bonjour,

J'ai .cris, voila assez longtemps, un script pour faire une liste de recherche et après, choisir un item dans la liste.
Voici le fichier résultat ou la liste s'affiche correctement
<?php
	  
		echo "<h1>R&eacute;sultat de la recheche</h1>"; 
		// connexion à la base de données
		include_once("connexion.php"); 
 		// Création des variables  
  		$searchterm= $_POST['searchterm'];
		$searchtype= $_POST['searchtype'];
		
		
  		if (!$searchtype || !$searchterm)
  		{
     	echo "Vous n'avez pas entrer les &eacute;l&eacute;ments de rehcrches.  S.V.P. essayer de nouveau";
     	exit;
  		}
		$sql = "SELECT * FROM nds_bib_
		WHERE $searchtype like '%".$searchterm."%'ORDER by  titre"  ;
		$resultat = mysql_query($sql );
		$num_rows = mysql_num_rows($resultat);
		if ($num_rows == 0) 
		{
		echo "Votre recherche  pour l'expression « $searchterm » n'a rien donnée. Recommencer la recherche.";
		} else { 
		if ($num_rows == 1) { 
		echo "Vous avez $num_rows réponse pour l'expression « $searchterm »";
			} else {
			echo "Vous avez $num_rows réponses pour l'expression « $searchterm ». <br> Voici la liste: ";
			}
		}
		// Récupération des valeurs
		while ($row = mysql_fetch_assoc( $resultat)) {
		$n°=$row['n°'];
		$titre=$row['titre'];
		//$titre=htmlentities($titre);
		$auteurs=$row['auteurs'];
		$auteurs=htmlentities($auteurs);
		echo "<blockquote><a href=voir.php?titre=$titre> $titre &nbsp Auteur: $auteurs </a></blockquote>";
		echo "<h5>_________________________________________________</h5>";
		}
		?>
Voici maintenant le fichier voir.ph dans lequel devrait s'afficher les infos ( ce qui fonctionnait en php4
<?php 
				// Connexion à la base de donn&eacute;es
		include_once("connexion.php");
		// Création de la requète
		$sql = "SELECT *FROM nds_bib_ WHERE titre=$titre " ;
		// Exécution de la requète SQL
		$resultat = mysql_query($sql ) ;
		echo "titre: $titre";
		// Récupération des valeurs
		while ($row = mysql_fetch_assoc( $resultat)) {
		$n°=$row['n°'];
		$titre=$row['titre'];
		$titre=htmlentities($titre);
		$auteurs=$row['auteurs'];
		$auteurs=htmlentities($auteurs);
		// Affichage
		echo"<center><h1>$titre</h1></center></p>";
		echo "<strong>par :  $auteurs </p></strong>";
		
		}
	?>
J'obtiens une erreur :
Notice: Undefined variable: titre in C:\wamp\www\biblio\voir.php on line 7

Notice: Undefined variable: titre in C:\wamp\www\biblio\voir.php on line 10
titre:
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\biblio\voir.php on line 12
, ce qui est normal étant donné que la variable $titre est vide.

J'aimerais savoir comment faire pour récupérer ma variable.

Je travail avec php5.3.0 et MySQL5.1.36

Merci de votre aide
p.s. Cela fait 2 jours que je cherche partout, mais je n'ai pas trouvé.

Alain
Modifié en dernier par damours111 le 17 sept. 2010, 17:56, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

17 sept. 2010, 17:34

$titre n'existe pas c'est tout :wink:

Eléphant du PHP | 64 Messages

17 sept. 2010, 17:57

$titre n'existe pas c'est tout :wink:
C'est justement cela ma question, pourquoi titre n'existe pas?
Alain

ViPHP
ViPHP | 5462 Messages

17 sept. 2010, 18:05

$titre n'existe pas c'est tout :wink:
C'est justement cela ma question, pourquoi titre n'existe pas?
Alain
il viens d'où le titre ?

Eléphant du PHP | 64 Messages

17 sept. 2010, 18:34

$titre n'existe pas c'est tout :wink:
C'est justement cela ma question, pourquoi titre n'existe pas?
Alain
il viens d'où le titre ?
De la la variable $searchterm dans la requête :
// Création des variables  
  		$searchterm= $_POST['searchterm'];
		$searchtype= $_POST['searchtype'];
		
		
  		if (!$searchtype || !$searchterm)
  		{
     	echo "Vous n'avez pas entrer les &eacute;l&eacute;ments de rehcrches.  S.V.P. essayer de nouveau";
     	exit;
  		}
		$sql = "SELECT * FROM nds_bib_
		WHERE $searchtype like '%".$searchterm."%'ORDER by  titre"  ;
		$resultat = mysql_query($sql );
		$num_rows = mysql_num_rows($resultat);
Celle-ci provenant d'un formulaire de rehecherche qui a donné le $searchterm.
Donc de la base de données.

J'espère que je suis claire dans mes explications.

Merci pour l'aide
Alain

ViPHP
ViPHP | 5462 Messages

17 sept. 2010, 18:37

oui mais ici y'a qu'un fichier
$sql = "SELECT *FROM nds_bib_ WHERE titre=$titre " ;
dans ce cas,
$titre = $_GET['titre']

Eléphant du PHP | 64 Messages

17 sept. 2010, 18:46

Je ne comprend pas ce que tu veux dire par
Il n'y a qu'un fichier
. Si c'est ce que je pense, il y a plusieurs ficher dans la liste.

J'ai fait l'essai avec ce que tu m'as suggéré et voici la réponse obtenue :
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\wamp\www\biblio\voir.php on line 7
Merci
Alain

ViPHP
ViPHP | 5462 Messages

17 sept. 2010, 18:48

Je ne comprend pas ce que tu veux dire par
Il n'y a qu'un fichier
. Si c'est ce que je pense, il y a plusieurs ficher dans la liste.
tu fais pas d'include a part la connexion, donc $titre n'existe pas (saiuf si il existerai dans connexion.php mais c'est pas le cas)
J'ai fait l'essai avec ce que tu m'as suggéré et voici la réponse obtenue :
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\wamp\www\biblio\voir.php on line 7
Merci
Alain
un ; la fin des lignes :wink:

EDIT : les données exterieur (forumlaire, adresse) c'est sois $_GET sois $_POST, la recuperé directement via le nom de variable ca se fais pu :wink:
http://fr.php.net/manual/fr/security.globals.php

Eléphant du PHP | 64 Messages

17 sept. 2010, 23:26

J'ai trouvé la solution.

Ce n'est pas u formulaire qui envoi les donnée mais, un url. Donc j'ai mis register global a on et j'ai corrigé mon code.
Voici les corrections:

results.php
<?php
	  
		echo "<h1>R&eacute;sultat de la recheche</h1>"; 
		// connexion à la base de données
		include_once("connexion.php"); 
 		// Création des variables  
  		$searchterm= $_POST['searchterm'];
		$searchtype= $_POST['searchtype'];
		
		
  		if (!$searchtype || !$searchterm)
  		{
     	echo "Vous n'avez pas entrer les &eacute;l&eacute;ments de rehcrches.  S.V.P. essayer de nouveau";
     	exit;
  		}
		$sql = "SELECT * FROM nds_bib_
		WHERE $searchtype like '%".$searchterm."%'ORDER by  titre"  ;
		$resultat = mysql_query($sql );
		$num_rows = mysql_num_rows($resultat);
		if ($num_rows == 0) 
		{
		echo "Votre recherche  pour l'expression « $searchterm » n'a rien donnée. Recommencer la recherche.";
		} else { 
		if ($num_rows == 1) { 
		echo "Vous avez $num_rows réponse pour l'expression « $searchterm »";
			} else {
			echo "Vous avez $num_rows réponses pour l'expression « $searchterm ». <br> Voici la liste: ";
			}
		}
		// Récupération des valeurs
		while ($row = mysql_fetch_assoc( $resultat)) {
		$id_numero=$row['id_numero'];
		$titre=$row['titre'];
		$auteurs=$row['auteurs'];
		echo "<blockquote><a href=voir.php?id_numero=$id_numero> $titre &nbsp Auteur: $auteurs </a></blockquote>";
		echo "<h5>_________________________________________________</h5>";
		}
		?>
 



voir.php
<?php 
				// Connexion à la base de donn&eacute;es
		include_once("connexion.php");
		// Création de la requète
		$sql = "SELECT *FROM nds_bib_ WHERE id_numero =$id_numero";
		// Exécution de la requète SQL
		$result = mysql_query($sql ) ;
		if (!$result) {
		echo 'Impossible d\'exécuter la requête : ' . mysql_error();
		exit;
		}
		// Récupération des valeurs pour photo
		$row = mysql_fetch_assoc( $result);
		
		$auteurs = $row['auteurs'] ;
		$titre = $row['titre'];
		
		echo "<blockquote> $titre &nbsp Auteur: $auteurs </blockquote>";
		echo "<h5>_________________________________________________</h5>";
		
	?>
  
Merci pour l'aide
Alain

Mammouth du PHP | 19672 Messages

17 sept. 2010, 23:52

Donc j'ai mis register global a on
Très mauvaise solution : cette directive doit à l'avenir disparaitre de PHP et rester à OFF par défaut. Ça veut dire que lorsque tu feras une mise à jour de la configuration de PHP, tu vas avoir un jour une vilaine surprises, très désagréable je dirais même...

Je signale au passage pour ceux qui l'ignoreraient : pourquoi cette directive doit-elle disparaitre de PHP ? parce que ça ouvre une faille de sécurité sur les sites programmés avec un peu de laxisme sous le fallacieux prétexte d'écrire moins de code, et malheureusement pas pour optimiser ledit code. Si un appel vers la page envoit des données (en GET, POST, COOKIE, ou en général REQUEST) avec des valeurs contenant des codes malicieux, la surprise ne sera pas bonne du tout pour le responsable du site qui risque de voir dans le meilleur des cas sa page d'accueil revue en profondeur avec des messages d'un got plus ou moins douteux, au pire sa base de données piratée, pillée ou simplement détruite.

Enfin bon, c'est vous qui voyez, il y en a qui on essayé,... ils ont eu des problèmes. :mrgreen:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 64 Messages

18 sept. 2010, 01:36

Donc j'ai mis register global a on
Très mauvaise solution : cette directive doit à l'avenir disparaitre de PHP et rester à OFF par défaut. Ça veut dire que lorsque tu feras une mise à jour de la configuration de PHP, tu vas avoir un jour une vilaine surprises, très désagréable je dirais même...

Je signale au passage pour ceux qui l'ignoreraient : pourquoi cette directive doit-elle disparaitre de PHP ? parce que ça ouvre une faille de sécurité sur les sites programmés avec un peu de laxisme sous le fallacieux prétexte d'écrire moins de code, et malheureusement pas pour optimiser ledit code. Si un appel vers la page envoit des données (en GET, POST, COOKIE, ou en général REQUEST) avec des valeurs contenant des codes malicieux, la surprise ne sera pas bonne du tout pour le responsable du site qui risque de voir dans le meilleur des cas sa page d'accueil revue en profondeur avec des messages d'un got plus ou moins douteux, au pire sa base de données piratée, pillée ou simplement détruite.

Enfin bon, c'est vous qui voyez, il y en a qui on essayé,... ils ont eu des problèmes. :mrgreen:
Bonjour Cyrano,

La dessus, je te fais entièrement confiance. Tu m'as souvent aider avant. Mais cela ne règle pas mon problème, au contraire. en effet, je dois faire sortir une liste de livre partir d'un formulaire ou la personne a fait un choix selon l'auteur. Ce formulaire à été envoyer par la méthode POST . Cette liste servira pour que la personne choisisse un livre et puisse avoir accès au données tel que: Résume et autre données.

C'est à cela que servait mon srcipt.

Je sais que l'on peut faire remplir un champs liste déroulante à d'un choix fais dans un autre formulaire (su moins je pense), mais je ne me souvient plus comment.
Alors, si tu peux, ou quelqu'un d'autre, me donner une piste, j'apprécierais vraiment.

Merci
Alain

Mammouth du PHP | 19672 Messages

18 sept. 2010, 08:22

J'ai pas tout suivi depuis le début : tu penses à quelque chose comme ceci ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 64 Messages

18 sept. 2010, 13:46

J'ai pas tout suivi depuis le début : tu penses à quelque chose comme ceci ?
Merci Cyrano,

je vais regarder tester et voir si cela correspond. Je vais te laisser savoir la suite.

Alain

Eléphant du PHP | 64 Messages

18 sept. 2010, 14:49

Salut

Pour être plus simple, ce que je veux c'est comme le forum qu'on utilise présentement. Une première étape est de choisir le sujet, ensuite choisir le message, et accéder à celui-ci.

Est-ce que l'exemple correspond un peu à cela?

Merci
Alain

Mammouth du PHP | 19672 Messages

18 sept. 2010, 22:44

Non, le tuto en question explique comment lier des listes et comment à partir du choix dans une première liste mettre à jour les choix de la suivante.

Ceci dit c'est similaire d'une certaine manière : à partir du choix dans une liste de thèmes, on met à jour la liste suivante qui compose ce thème. Là, pose toi la question de la structure des données : comment structurer les données pour lier tout ça : si tu arrives à définir cette structure, ce sera bien plus facile de programmer le fonctionnement. Si tu tentes l'inverse, ça va être à mon avis beaucoup plus laborieux.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: