8768 sujets

Développement web côté serveur, CMS

Bonjour à vous tous en ce long week end de la toussaint,

J'ai un souci que je n'arrive pas à résoudre. Je dois réaliser un devoir dans lequel un descriptif d'une ville s'affiche après avoir cliqué sur une ville. Ce devoir se compose d'un fichier d'accueil index.php et d'un fichier ville.php de traitement.

Le navigateur m'envoi un message d'erreur que je ne comprends pas :

upload/1653626436-62242-messageerreur.png

Voici une capture écran du code incriminé avec la ligne en question d'où est provoquée l'erreur :

upload/1653626520-62242-codephp.jpg

Voici le code du fichier index.php :


<!doctype html>
<html lang="fr">
<head>
	<meta charset="UTF-8">
	<link href="styles.css" type="text/css" rel="stylesheet">
	<title>Accueil</title>
</head>
<body>
	<div>
		<h1>Accueil</h1>
		<p>Mini site consacré aux villes</p>
		<p>Cette page utilise PHP et MySQL</p>
		<p>Utiliser le menu de navigation pour consulter les pages</p>
		
		<?php
			$mysqli = new mysqli('localhost', 'root', '', 'projet_modeles');
			$result = $mysqli->query('SELECT ville_id, ville_nom FROM projet_villes_site');
			while($row = $result->fetch_array()){
				$villes[$row['ville_id']] = $row['ville_nom'];
			}
		?>
	</div>
	<ul>
		<li><a href="index.php">Accueil</a></li>
		<?php foreach($villes as $id => $ville) : ?>
		<li><a href="ville.php?id=<?php echo $id ?>"><?php echo $ville ?></a></li>
		<?php endforeach ?>
	</ul>
	<?php
		$result->free();
		$mysqli->close();
	?>
</body>
</html>

Voici le code du fichier de traitement ville.php :


<!doctype html>
<html lang="fr">
<head>
	<meta charset="UTF-8">
	<?php
		$id = $_GET['id'];
		$mysqli = new mysqli('localhost', 'root', '', 'projet_modeles');
		$result = $mysqli->query('SELECT ville_id, ville_nom, ville_texte FROM projet_villes_site =' . $id);
		$row = $result->fetch_array();
		$nom = $row['ville_nom'];
		$texte = $row['ville_texte'];
	?>
	<title><?php echo $nom ?></title>
	<link href="styles.css" type="text/css" rel="stylesheet">
</head>
<body>
	<div>
		<h1><?php $nom ?></h1>
		<p><?php $texte ?></p>
		<?php
			$result = $mysqli->query('SELECT ville_id, ville_nom FROM projet_villes_site');
			while($row = $result->fetch_array()){
				$villes[$row['ville_id']] = $row['ville_nom'];
			}
		?>
	</div>
	<ul>
		<li><a href="index.php">Accueil</a></li>
		<?php foreach($villes as $id => $ville) : ?>
		<li><a href="ville.php?id=<?php echo $id ?>"><?php echo $ville ?></a></li>
		<?php endforeach ?>
	</ul>
	<?php
		$resul->free();
		$mysqli->close();
	?>
</body>
</html>

Vous arrivez à d'abord comprendre cette erreur pour ensuite tenter de la résoudre ?

Merci pour votre aide.
Modifié par ObiJuanKenobi (27 May 2022 - 06:52)
Modérateur
Hello,

ObiJuanKenobi a écrit :

Vous arrivez à d'abord comprendre cette erreur pour ensuite tenter de la résoudre ?

J'ai compris d'où vient ton erreur. C'est flagrant. Mais ==>

Dans un terminal et en te connectant à ta base de données*, qu'est-ce que ça te retourne** ? Smiley cligne

SELECT 
    ville_id, 
    ville_nom, 
    ville_texte 
FROM 
    projet_villes_site =<un_id>


*Si tu ne sais pas le faire, apprends. Parce que tu n'auras pas toujours accès à un phpmyadmin ou autres UI pour gérer ta DB.

**Il serait intéressant que tu postes sur le forum, la structure de ta table "projet_villes_site":

DESC projet_villes_site;

Modifié par niuxe (27 May 2022 - 10:40)
Ce qui me semble clair d'après le message d'erreur c'est que
$result = $mysqli->query('SELECT ville_id, ville_nom FROM projet_villes_site');

te rend un booléen, c'est à dire dans ce cas la valeur FALSE
Très vraisemblablement

    SELECT ville_id, ville_nom 
    FROM projet_villes_site

n'est pas correct et ne correspond pas à la définition de ta BDD.
Remarque : compte tenu que simple quote (') est utilisé en SQL pour désigner les valeurs, par exemple

    SELECT ...
    FROM ...
    WHERE ville_nom = 'Marseille'
   ;

Il est préférable d'exprimer les requêtes SQL entre double quotes(") ou, si la requête est longue, en heredoc, du genre

$req = <<<SQL
    .........
SQL;
Modérateur
PapyJP a écrit :
Il est préférable d'exprimer les requêtes SQL entre double quotes(") ou, si la requête est longue, en heredoc, du genre

$req = <<<SQL
    .........
SQL;


du heredoc pour du sql, bin non..... ça n'a pas de sens Smiley biggol
Modifié par niuxe (27 May 2022 - 10:42)
ObiJuanKenobi
a écrit :
Bonjour à vous tous en ce long week end de la toussaint,

Joyeux Noël à toi !
Sinon on ne fait pas le pont de la Toussaint mais celui de l'Ascension...
Oui oui je sors Smiley cligne

PS : j'avais pas vu limipl
Modifié par Olivier C (27 May 2022 - 11:23)
Modérateur
Olivier C a écrit :
Sinon on ne fait pas le pont de la Toussaint mais celui de l'Ascension...
Oui oui je sors Smiley cligne

PS : j'avais pas vu limipl


moi non plus Smiley lol

Ah bah dans ce cas : joyeuses pâques ^^
Modifié par niuxe (27 May 2022 - 13:12)
Pour que ce que l'ai dit plus haut soit plus clair :

$req = <<<SQL
    .........
SQL;
$result = $mysqli->query($req);
Modérateur
PapyJP a écrit :
Pour que ce que l'ai dit plus haut soit plus clair :

$req = <<<SQL
    .........
SQL;
$result = $mysqli->query($req);


Tu n'as pas besoin de créer un template et d'interpréter des variables :
- Une chaîne de caractères délimitée par des doubles quotes
- indentation de la query
- créer une requête préparée
Modifié par niuxe (28 May 2022 - 15:40)