0 votes

Affichage du nom au lieu de l'ID PHP MySQL

J'ai besoin de quelque chose de simple; J'ai une page où un utilisateur clique sur un auteur pour voir les livres associés à cet auteur. Sur ma page affichant la liste des livres de l'auteur, je veux un simple titre HTML disant: 'Les livres pour: NOMDELAUTEUR'

Je peux obtenir la page pour afficher l'ID de l'auteur mais pas le nom. Lorsque l'utilisateur clique sur le lien dans la page précédente de l'auteur, cela ressemble à ceci:

Et ensuite sur la 'viewauthorbooks.php?author_id=23' j'ai déclaré ceci au début:

 

$author_id = $_GET['author_id'];   $authorname = $_GET['authorname'];

Et enfin, 'Les livres pour: NOMDELAUTEUR, où il est écrit NOMDELAUTEUR, j'ai ceci:

 

echo $authorname

(Avec des balises PHP, mais il ne me laisse pas les mettre!) Et cela ne montre rien, cependant si je le change en auteur_id, il affiche le bon ID d'auteur qui a été cliqué, mais ce n'est pas exactement convivial! Quelqu'un peut-il m'aider!

0voto

Vous ne l'envoyez pas dans la chaîne de requête, donc vous ne pouvez pas l'obtenir à partir du tableau $_GET.
Il vous suffit de le demander à la base de données en utilisant l'identifiant.

Une note importante : Utilisez toujours htmlspacialchars() lorsque vous affichez les données provenant du côté client.

0voto

Daniel Bingham Points 4900

Le nom de l'auteur ne sera pas dans $_GET. Tel que votre code est actuellement, vous l'utilisez uniquement comme titre de lien. Il n'apparaît nulle part dans l'adresse. Essayez ceci à la place:

Il serait préférable de le récupérer à nouveau de la base de données en utilisant l'author_id cependant.

ÉDITER:

Pour expliquer le problème plus en détail. Vous avez deux pages, la page new.php et la page viewauthorbooks.php. Vous envoyez les utilisateurs de la page new à la page view en utilisant le lien que vous avez posté, n'est-ce pas?

Le problème avec cela est que votre lien assigne une seule variable en get. Voici la chaîne de requête qu'il générerait:

viewauthorbooks.php?author_id=13

Ce que cela fera c'est envoyer l'utilisateur à viewauthorbooks et placer la valeur '13' dans la variable $_GET: $_GET['author_id']. C'est pourquoi l'author_id est là et s'affiche sur viewauthorbooks. Cependant, authorname n'est jamais transmis à viewauthorbooks, il n'est pas dans $_GET['authorname'] parce que vous n'avez jamais défini $_GET['authorname']. Si vous voulez qu'il soit dans $_GET, alors vous devez faire en sorte que votre chaîne de requête ressemble à ceci:

viewauthorbooks.php?author_id=13&authorname=bob

Vous pouvez y parvenir en utilisant le nouveau code HTML pour le lien que j'ai posté ci-dessus. Regardez-le attentivement, il y a une différence clé par rapport à celui que vous avez actuellement.

Cependant, il est généralement déconseillé de transmettre des données via GET, car la chaîne de requête est affichée à l'utilisateur et vous expose aux attaques par injection. Une meilleure façon de faire cela serait d'utiliser l'author_id que vous transmettez déjà à viewauthorbooks.php pour récupérer à nouveau le nom de l'auteur de la base de données. Vous pouvez utiliser le même code que celui que vous avez utilisé sur la page new.php.

0voto

Nur Points 1150

Cela est dû au fait que vous ne définissez pas le nom de l'auteur dans votre requête.

Vous devriez utiliser le lien suivant :

Ou bien sélectionnez à nouveau les données depuis la base de données, sur la nouvelle page, en utilisant l'ID que vous avez récupéré de l'URI.

0voto

Anthony Forloney Points 30083

Vous pourriez extraire le author_id de la chaîne de requête comme vous l'avez fait en utilisant $_GET, mais attention, vous devrez valider ce qui est transmis par la requête. J'espère que vous pouvez voir qu'à défaut de validation, quel énorme trou de sécurité cela constitue.

Je suis au travail pour le moment, mais voici un exemple rapide qui devrait vous donner ce dont vous avez besoin sans désinfecter votre requête.

$id = intval($_GET['author_id']); 
// bien sûr, effectuez davantage de validations
// ne présumez pas que c'est sûr.
$sql = "SELECT authorname FROM authors_tb WHERE author_id=" . $id;
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)) {
   echo "Les livres de : " . $row['authorname'];
 }

La raison pour laquelle votre approche ne fonctionnait pas était que vous utilisiez le passage des paramètres d'URL $_GET pour author_name alors que vous ne fournissiez pas les paramètres dans l'URL, juste le author_id.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X