7566 sujets

Développement web côté serveur, CMS

Pages :
Bonjour a tous , dans ma page de code j'ai deux erreurs d'afficher :

Notice: Undefined index: id in C:\wamp64\www\ville\edition.php on line 41 donc la où il y a $id = $_GET['id']; (à la partie 2 ) pour cette erreur est ce qu'il faut tester si ce champs a été initialisé avec la fonction isset() ou !empty() ?

et Fatal error: Call to a member function fetch_array() on boolean in C:\wamp64\www\ville\edition.php on line 46 (// création du nouvel array
$row = $result->fetch_array(); )



<?php require('inc_connexion.php'); ?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<?php
/*
Partie 1 : gestion de la saisie et enregistrement
-------------------------------------------------*/
// récupération des variables
if(isset($_POST['submit_form']))
{
$capitale_nom = $_POST['capitale_nom'];
$capitale_texte = $_POST['capitale_texte'];
$capitale_id = $_POST['capitale_id'];
// vérification du contenu des variables
if((empty($capitale_nom)) OR empty($capitale_texte))
{
$message = '<p class="error">Vous devez saisir le nom d\’une
capitale et sa présentation.</p>';
}
else
{
// requête UPDATE
if ($mysqli->query('UPDATE capitales SET capitale_nom = "'.$capitale_nom.'", capitale_texte = "'.$capitale_texte.'" WHERE capitale_id = '.
$capitale_id))
{
$message = '<p class="message">La mise à jour de la capitale '.
$capitale_nom .' est effectuée.</p>';
}
else
{
$message = '<p class="error">La mise à jour de la capitale '.
$capitale_nom .' est pas effectuée.</p>';
}
}
}
/*
Partie 2 : récupération des informations de la base
et affichage dans le formulaire
-------------------------------------------------*/
// récupération de la variable externe
$id = $_GET['id'];
// requête.
$result = $mysqli->query('SELECT capitale_id, capitale_nom, capitale_texte
FROM capitales WHERE capitale_id = ' . $id );
// création du nouvel array
$row = $result->fetch_array();
// variables destinées à l’affichage
$nom = $row['capitale_nom'];
$texte = $row['capitale_texte'];
?>
<div>
<h1>Ajouter une capitale</h1>
<?php if(isset($message)) echo $message ?>
<form method="post">
<p>Nom de la capitale : <input type="text" name="capitale_nom"
value="<?php echo $nom ?>"/></p>
<p>Texte de présentation<br>
<textarea name="capitale_texte" cols="32" rows="8"/><?php echo $texte
?></textarea></p>
<input type="hidden" name="capitale_id" value="<?php echo $id ?>" />
<p><input type="submit" name="submit_form" value="valider" /></p>
</form>
</div>
</body>
</html>


Cordialement
Bonjour,

comme on part toujours du même principe "Tu ne feras jamais confiance à l'utilisateur" il faut toujours vérifier (et sécuriser) une variable postée où passée dans l'URL.
Modifié par biduletruck (12 Apr 2018 - 14:58)
Il faut que tu rajoutes un test effectivement de cette sorte
if(is_numeric($_GET['id'])) // id est numerique (donc existe){
$id = $mysqli->real_escape_string($_GET['id']); // echappe en vue de sécurisation de la requête
[....]
}

Modifié par ekael (12 Apr 2018 - 15:12)
Dans plusieurs autres fichier j'ai mis ce genre d'url
<li><a href="ville.php?id=<?php echo $id ?>"><?php echo $ville ?></a></li>


J'ai essayé de rajouter ceci :

 if $id = !empty($_POST['id']) ? $_POST['id'] : NULL;
$id = (int) $_GET['id'];


ça marche presque mais j'ai toujours l'erreur Undefined index qui s'affiche.
Dois-je peut être utiliser PDO ?
Pour répondre à ta question, ce n'est pas une obligation (mais préférable)

cependant, il me semble que la valeur par défaut de "fetch_array()" retourne un index numérique.
$row = $result->fetch_array();


fait un var_dump($row) juste après pour voir.


$row = $result->fetch_array();
echo <pre>; //si xdebug non installé
var_dump($row);
echo </pre>;
die();
J'ai fais comme dans l'exemple j'ai : Parse error: syntax error, unexpected '<'
oups


$row = $result->fetch_array();
echo "<pre>"; //si xdebug non installé
var_dump($row);
echo "</pre>";
die();
Cela marche moins bien j'ai mes éléments qui ont disparurent mon titre, l'endroit ou taper la ville et le descriptif ainsi que le bouton valider ne sont plus là c'est remplacer par :
C:\wamp64\www\ville\edition.php:51:null

et au-dessus j'ai le message Undefined index: id in .
OK alors enlève le "die() à la fin.

Mais,

et au-dessus j'ai le message Undefined index: id in .


Indique que ton $_GET['id'] ne semble pas défini ...

peut-être devrais-tu faire aussi un var_dump($_GET) juste avant ça pour voir :


var_dump($_GET);
// récupération de la variable externe
$id = $_GET['id'];

Modifié par biduletruck (12 Apr 2018 - 16:12)
ça s'affiche de nouveau bien mais toujours les memes erreurs j'ai :

C:\wamp64\www\ville\edition.php:44:array (size=0) empty (alors que j'ai enlever $id = !empty($_POST['id']) ? $_POST['id'] : null;) et même en essayant de remettre ça affiche ça aussi.

et j 'ai Notice: Undefined index: id in avec C:\wamp64\www\ville\edition.php:52:null
Cela vient de ça:
$_GET['id'];



Le (size=0) indique qu'il n'y a rien dans la variable $_GET, peut-être un problème de passage de variable.

essai directement de taper l'url "127.0.0.1/ville/ville.php?id=1" (remplace 1 par un id existant dans ta base).

et dis nous
Modifié par biduletruck (12 Apr 2018 - 16:53)
J'ai pris cette exemple la "127.0.0.1/ville/ville.php?id=4"

et j'obtiens ça:

C:\wamp64\www\ville\ville.php:7:
array (size=1)
'id' => string '4' (length=1)

C:\wamp64\www\ville\ville.php:18:
array (size=6)
0 => string '4' (length=1)
'ville_id' => string '4' (length=1)
1 => string 'Berlin' (length=6)
'ville_nom' => string 'Berlin' (length=6)
2 => string 'nbvfegr' (length=7)
'ville_texte' => string 'nbvfegr' (length=7)

et apres j'ai bien la ville qui correspond avec avec son descriptif.
Donc ton passage de variable dans ton lien (url) n'est pas bon.

regarde de ce côté là.
Modifié par biduletruck (12 Apr 2018 - 17:17)
J'ai essayé de chercher des solutions sur google mais j'en ai vu tellement que je suis complètement perdue Smiley sweatdrop .

Il faut que j’établisse un lien entre $_get=['id'] et l'url <a href="ville.php?id=<?php echo $id ?>"><?php echo $ville ?></a>

Peut être il faut que je fasse quelque chose comme $id= ['$capitale_nom'],[capitale_id']
Du coup on regarde probablement la mauvaise page.

Sur ton lien d'où vient le $id et le $ville qui servent à construire ton lien.
Le problème ne vient il pas de là ?

Lorsque tu passes ta souris sur le lien en bas de ton navigateur tu vois le lien, est-ce que justement dans ce lien le numéro de l id apparaît bien ?
J'ai créer plusieurs page de code pour ce petit site : index.php, capitale.php, ajout.php, edition.php, inc_connexion.php, inc_menu.php, inc_footer.php, suppression.php et edition.php
Il faut surement que je regarde si il y a un problème dans l'index ça vient peut être d'abord de là.

Et oui quand je passe la souris le numéro de l'id apparaît bien .
Ok,

alors fais un copier l'adresse du lien et copie le sur le forum afin que je regarde stp.

Et peux-tu me mettre le bout de code qui génère le lien aussi Smiley smile
Voici un exemple du lien http://localhost/capitale/capitale.php?id=2

et le code est celui çi : que j'ai mis dans index.php, capitale.php et édition.php :


<ul>
<li><a href="index.php">Accueil</a></li>
<?php foreach($villes as $id => $ville) : ?>
<li><a href="capitale.php?id=<?php echo $id ?>"><?php echo $ville ?></a></li>
<?php endforeach ?>
</ul>