création d'un formulaire de recherche

Petit nouveau ! | 3 Messages

24 mai 2021, 10:25

Bonjour,

Je cherche à créer un formulaire de recherche dans une petite base de données. J'ai écrit les lignes suivantes, et ça me dit qu'il y a une erreur "Illegal string offset" à la ligne 48. Que signifie cette erreur? Merci de votre réponse.

Code : Tout sélectionner

<ul> <li><a href="index.php">Accueil</a></li> <?php if(isset($_GET['ville'])):?> <h2> site de la ville:</h2> <?php foreach($villes as $ville): if($ville['id']== $_GET['ville']):?> //ligne 48 <p> <?php echo $ville?> <?php endif;?> <?php endforeach;?> <?php endif;?> </ul>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 mai 2021, 11:18

Salutations !

En général, ce message d'erreur indique que tu essaies d'utiliser une chaine de caractère comme s'il s'agissait d'un tableau, en appelant un élément qui n'en fait pas parti.

Que contient le tableau $villes sur lequel tu boucles avec le foreach ? Est-ce qu'il contient des chaines de caractères ? (auquel cas, $ville['id'] ne fait référence à rien puisque la chaine n'a pas d'index nommé "id" et il faut utiliser $ville seul pour récupérer la valeur de cette chaine :)).
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

24 mai 2021, 12:18

En fait, j'ai une base dans laquelle il y a plusieurs villes avec des informations sur celles-ci, que je souhaite récupérer via un formulaire. $ville est donc la variable affecté à ville pour me permettre de récupérer l'information correspondante. Et à chaque ville est affectée un identifiant. Est-ce clair?

Mammouth du PHP | 2703 Messages

24 mai 2021, 16:08

sans avoir le code qui remplit $villes, impossible d'en dire plus que ce qu'a dit Ryle.

Petit nouveau ! | 3 Messages

24 mai 2021, 17:25

Voici le code, qu'est-ce qu'il faudrait changer pour que ça marche?

Code : Tout sélectionner

<?php session_start(); $SESSION['user_id']='user_id'; $SESSION['ville_id']='ville_id'; ?> <!DOCTYPE html> <html> <head> <?php $id = $_GET['id']; $mysqli=new mysqli('localhost', 'root', '', 'suivi_recherche_villes'); $result=$mysqli->query('SELECT ville_id, ville_nom, ville_site FROM villes WHERE ville_nom LIKE"%' . $id .'%"'); $row=$result->fetch_array(); $nom=$row['ville_nom']; $site=$row['ville_site']; ?> <title><?php echo $nom ?></title> <link rel=stylesheet" type=text/css" href=style.css"/> </head> <body> <div> <h1><?php echo $nom ?></h1> <p><?php echo $site ?></p> <?php $result=$mysqli->query('SELECT ville_id, ville_nom, ville_site FROM villes'); while ($row=$result->fetch_array()) { $villes[$row['ville_id']]=$row['ville_nom']; } ?> <ul> <li><a href="index.php">Accueil</a></li> <?php if(isset($_GET['ville'])):?> <h2> site de la ville:</h2> <?php foreach($villes as $ville): if($ville['id']==$_GET['ville']):?> <p> <?php echo $ville?> <?php endif;?> <?php endforeach;?> <?php endif;?> </ul> <?php $result->free(); $mysqli->close(); ?> </body> </html>

Mammouth du PHP | 2703 Messages

24 mai 2021, 17:33

ryle avait bien trouvé :
"Que contient le tableau $villes sur lequel tu boucles avec le foreach ? Est-ce qu'il contient des chaines de caractères ? (auquel cas, $ville['id'] ne fait référence à rien puisque la chaine n'a pas d'index nommé "id" et il faut utiliser $ville seul pour récupérer la valeur de cette chaine"

https://www.php.net/manual/fr/control-s ... oreach.php
voir "exemple foreach 3"

à noter que faire 2 boucles dans le code donné ne sert à rien, une seule suffirait.