Bonjour
je suis en train de créer une interface d'administration en suivant un tuto et j'obtiens des erreurs "Notice: Undefined offset: 6in C:\wamp64\www\portfolio\lib\form.php on line 16" "Notice: Undefined offset: 7in C:\wamp64\www\portfolio\lib\form.php on line 16" "Notice: Undefined offset: 8in C:\wamp64\www\portfolio\lib\form.php on line 16".
Alors en gros je suis sur une page appelé work.php qui m'affiche tout les travaux publié sous forme d'un tableau. Lorsque je clique sur nouvelle réalisation je suis redirigé vers work_edit.php et tout fonctionne bien, je peux ajouter de nouveaux travaux sans problème. Sur la page work.php, lorsque je clique sur éditer, je suis également redirigé vers work_edit.php mais avec en plus l'id de mon travail (par exemple work_edit.php?id=2) et cette fois-ci j'obtiens les erreurs notées plus haut.
voici le work_edit :
<?php
include '../lib/includes.php';
if(isset($_POST['name']) && isset($_POST['slug'])){
$slug = $_POST['slug'];
if(preg_match('/^[a-z\-0-9]+$/', $slug)){
$name = $db->quote($_POST['name']);
$slug = $db->quote($_POST['slug']);
$category_id = $db->quote($_POST['category_id']);
$content = $db->quote($_POST['content']);
if(isset($_GET['id'])){
$id = $db->quote($_GET['id']);
$db->query("UPDATE works SET name=$name, slug=$slug, content=$content, category_id=$category_id WHERE id=$id");
}else{
$db->query("INSERT INTO works SET name=$name, slug=$slug, content=$content, category_id=$category_id");
}
// setFlass('La catégorie a bien été ajoutée');
header('Location:work.php');
die();
}
else{
// setFlash('Le slug n\'est pas valide', 'danger');
echo "Le slug n'est pas valide";
}
}
if (isset($_GET['id'])) {
$id = $db->quote($_GET['id']);
$select = $db->query("SELECT * FROM works WHERE id=$id");
if($select->rowCount() == 0){
// setFlash("Il n'y a pas de catégorie avec cet ID");
echo "Il n'y a pas de catégories avec cet ID";
header('Location: work.php');
die();
}
$_POST = $select->fetch();
}
$select=$db->query('SELECT id, name FROM categories ORDER BY name ASC');
$categories = $select->fetchAll();
$categories_list = array();
foreach ($categories as $category ) {
$categories_list[$category['id']]= $category['name'];
}
include '../partials/admin_header.php';
?>
<h1>Editer une réalisation</h1>
<form class="" action="#" method="post">
<div class="form-group">
<label for="name">Nom de la réalisation</label>
<?php echo input('name'); ?>
</div>
<div class="form-group">
<label for="slug">URL de la réalisation</label>
<?php echo input('slug'); ?>
</div>
<div class="form-group">
<label for="content">Contenu de la réalisation</label>
<?php echo textarea('content'); ?>
</div>
<div class="form-group">
<label for="category_id">Catégorie de la réalisation</label>
<?php echo select('category_id', $categories_list); ?>
</div>
<button type="submit" class="btn btn-default">Enregistrer</button>
</form>
<?php include '../partials/footer.php'; ?>
et le form.php (là où se situe les erreurs) :
<?php
function input($id){
$value = isset($_POST['$id']) ? $_POST['$id'] : '';
return "<input type='text' class='form-control' id='$id' name='$id' value='$value'>";
}
function textarea($id){
$value = isset($_POST['$id']) ? $_POST['$id'] : '';
return "<textarea type='text' class='form-control' id='$id' name='$id' '>$value</textarea>";
}
function select($id, $options = array()){
$return = "<select class='form-control' id='$id' name='$id'>";
foreach($options as $id =>$value){
$selected = '';
if(isset ($_POST['id']) && $id == $_POST[$id]){
$selected = ' selected="selected"';
}
$return .= "<option value='$id' >$value</option>";
}
$return .= '</select>';
return $return;
}
?>
Je ne comprends pas pourquoi j'ai une erreur lors de l'édition mais pas lors de l'ajout alors que c'est le même fichier. Avez vous une explication svp ?
Bonjour,
J'ai pas tout regardé, mais à priori :
if(isset ($_POST['id']) && $id == $_POST[$id]){
devrait être
if(isset ($_POST[$id]) && $id == $_POST[$id]){
Attention aussi au $_POST['$id'] qui devrait être $_POST[$id]
Attention, dans ta fonction 'select' la variable $id représente 2 choses différentes !!!!
je te conseille de la réécrire comme ceci
function select($id, $options = array()){
$ret = "<select class='form-control' id='$id' name='$id'>";
foreach($options as $value =>$lib_option){
$selected = '';
if(isset ($_POST[$id]) && $value == $_POST[$id]){
$selected = ' selected="selected"';
}
$ret .= "<option value='$value' $selected>$lib_option</option>";
}
$ret .= '</select>';
return $ret;
}