Bonjour,

Je suis en train de créer un formulaire avec une checkbox j'arrive bien a envoyer a la base de données le fait que la checkbox est été cochée j'envoie 1 quand c'est "checked" et 0 sinon , mais je n'arrive pas a afficher l’état "checked" quand j'affiche mon enregistrement.

pourriez vous m'éclairer sur ce soucis?

function checkbox($id){
    $value = isset($_POST->$id) ? $_POST->$id : '';
    return "<input type='checkbox' id='$id' name='$id' value='$value' >";
}

Je souhaiterai que ce soit un peu sur le même principe que le code ci-dessous:

function select($id, $options = array()){
    $return = "<select id='$id' name='$id' class='form-control'>";
    foreach($options as $k => $v){
        $selected ='';
        if(isset($_POST->$id) && $k == $_POST->$id){
            $selected = ' selected="selected"';
        }
        $return .= "<option value='$k' $selected>$v</option>";
    }
    $return .= '</select>';
    return $return;
}

mais je m'y perd un peu!!!!

merci par avance de votre aide.

Gilles

14 réponses


Vallyan
Réponse acceptée

Essaye ceci:

$('#double_clef').prop('checked', parseInt(ui.item.double_clef));

Ben pour afficher l'etat checked il suffit de rajouter 'checked' dans ta balise ...

return "<input type='checkbox' id='$id' name='$id' value='$value' checked >";
gilles40
Auteur

Bonjour Vallyan,

Ca ne fonctionne pas je ne vois pas comment passer au checkbox le fait que je recupere "1" de la base de donnees

Je ne sais pas exactement comment tu récupères tes valeurs depuis ta bdd (le format de ta variable qui le stocke), mais dans l'idée si la valeur 1 (ou 0) est stockée dans la variable $kiki, alors tu fais simplement :

$checked = $kiki ? ' checked' : '';
return "<input type='checkbox' id='$id' name='$id' value='$value' $checked >";

non ?

gilles40
Auteur

Re,

bon ben ca fonctionne pas grrrr.

je mets tout le code que j'utilise ci-dessous:

<?php
function input($id){
    $value = isset($_POST->$id) ? $_POST->$id : '';
    return "<input type='text' id='$id' name='$id' value='$value' class='form-control'>";
    //<!--<input class="form-control" type="text" name="name" />-->
}
function input_read($id){
    $value = isset($_POST->$id) ? $_POST->$id : '';
    return "<input type='text' id='$id' name='$id' value='$value' class='form-control' readonly>";
    //<!--<input class="form-control" type="text" name="name" />-->
}
function input_hidden($id){
    $value = isset($_POST->$id) ? $_POST->$id : '';
    return "<input type='hidden' id='$id' name='$id' value='$value'>";
    //<!--<input class="form-control" type="text" name="name" />-->
}
function checkbox($id){
    $value = isset($_POST->$id) ? $_POST->$id : '';
    return "<input type='checkbox' 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 password($id){
    $value = isset($_POST->$id) ? $_POST->$id : '';
    return "<input type='password' id='$id' name='$id'>";
}
function select($id, $options = array()){
    $return = "<select id='$id' name='$id' class='form-control'>";
    foreach($options as $k => $v){
        $selected ='';
        if(isset($_POST->$id) && $k == $_POST->$id){
            $selected = ' selected="selected"';
        }
        $return .= "<option value='$k' $selected>$v</option>";
    }
    $return .= '</select>';
    return $return;
}

<?php
include '../lib/includes.php';
$Auth->allow('agence');
/**
 * Recherche des agences
 */
$select = $db->query("SELECT * FROM agences");
$agences = $select->fetchAll();
$agences_list = array();
foreach($agences as $agence){
    $agences_list$agence->id] = $agence->name;
}
/**
 * Recherche des vehicules pas arrivés
 */
if (isset($_GET'q']))
{
  $select = $db->query("SELECT vehicules.id, vehicules.immat, vehicules.chassis, vehicules.mva, vehicules.date_arrivee, vehicules.double_clef, typesmines.marque, typesmines.modele
    FROM typesmines
    LEFT JOIN vehicules
    ON typesmines.id = vehicules.typesmine_id
    WHERE date_arrivee IS NULL AND immat LIKE '".$_GET'q']."%'
    ");
  $results = $select->fetchAll();
  $datas = array();
  foreach($results as $result){
    $datas] = array(
        'id' => $result->id,
        'immat' => $result->immat,
        'mva' => $result->mva,
        'chassis' => $result->chassis,
        'marque' => $result->marque,
        'modele' => $result->modele,
        'double_clef' => $result->double_clef,
        'label' => $result->immat,
        'value' => $result->immat
        );
}
}
if (!empty($_GET'q'])) {
    ob_get_clean();
    die(json_encode($datas));
}
/**()
 * La sauvegarde
 */
if(isset($_POST'date_arrivee'])){
    checkCsrf();
    $agence_id = $db->quote($_POST'agence_id']);
    $date_arrivee = $db->quote($_POST'date_arrivee']);
    if (isset($_POST'double_clef'])) {
        $double_clef = 1;
    }else{
        $double_clef = 0;
    }
    if (isset($_POST'carnet_garantie'])) {
        $carnet_garantie = 1;
    }else{
        $carnet_garantie = 0;
    }
    if (isset($_POST'carte_sd'])) {
        $carte_sd = 1;
    }else{
        $carte_sd = 0;
    }
    if (isset($_POST'telecommande'])) {
        $telecommande = 1;
    }else{
        $telecommande = 0;
    }
    $comment = $db->quote($_POST'comments']);
        /**
         * Sauvegarde de l'agence et de la date d'arrivee
         */
        if(isset($_POST'id'])){
            $id = $db->quote($_POST'id']);
            $db->query("UPDATE vehicules SET agence_id=$agence_id, comments=$comment, date_arrivee=$date_arrivee, double_clef = $double_clef, updated=NOW() WHERE id=$id");
        }
        setFlash("La date d'arrivée a bien été mise à jour");
        header('Location:arrivees.php');
        die();
    }
    include '../partials/header.php';
    ?>
        <h1>Saisie date arrivée en agence</h1>
    <hr>
    <form method="post" action="" class="form-horizontal">
        <?= input_hidden('id'); ?>
            <div class="form-group">
            <label class="control-label col-md-2" for="immat">Immatriculation :</label>
                <div class="col-md-2">
                    <?= input('immat'); ?>
                </div>
            <label class="control-label col-md-2" for="mva">Mva :</label>
                <div class="col-md-2">
                    <?= input_read('mva'); ?>
                </div>
            </div>
            <div class="form-group">
            <label class="control-label col-md-2" for="marque">Marque :</label>
                <div class="col-md-2">
                    <?= input_read('marque'); ?>
                </div>
                            <label class="control-label col-md-2" for="double_clef">Double clef :</label>
                <div class="col-md-2">
                    <?= input_read('double_clef'); ?>
                </div>
            <label class="control-label col-md-2" for="modele">Modèle :</label>
                <div class="col-md-2">
                    <?= input_read('modele'); ?>
                </div>
            </div>
            <div class="form-group">
            <label class="control-label col-md-2" for="agence_id">Agence :</label>
                <div class="col-md-2">
                    <?php if($Auth->user('level') > 1): ?>
                        <?= select('agence_id', $agences_list); ?>
                    <?php else: ?>
                        <input type="hidden" class="form-control" name="agence_id" value=<?= $Auth->user("idstation"); ?>>
                        <input type="text" value=<?= $Auth->user("agence"); ?> class="form-control" readonly />
                    <?php endif;?>
                </div>
            <label class="control-label col-md-2" for="date_arrivee">Date Arrivée :</label>
                <div class="col-md-2">
                    <input type="text" name="date_arrivee" id="datepicker" value="" class="form-control" />
                </div>
            </div>
            <div class="form-group">
                <div class="checkbox ">
                    <label class="col-md-3 col-md-offset-2" for="double_clef">
                    <?= checkbox('double_clef'); ?>Double clefs
                    </label>
                    <label class="col-md-3">
                        <input type="checkbox" name="carnet_garantie"/>Carnet de Garantie
                    </label>
                </div>
                <div class="checkbox">
                    <label class="col-md-3 col-md-offset-2">
                        <input type="checkbox" name="carte_sd"/>Carte SD
                    </label>
                    <label class="col-md-3">
                        <input type="checkbox" name="telecommande"/>Télécommande
                    </label>
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2" for="comments">Commentaires :</label>
                    <div class="col-sm-6">
                        <?= textarea('comments'); ?>
                    </div>
            </div>
        <?= csrfInput(); ?>
        <div class="col-md-8">
            <button type="submit" class="btn btn-primary right">Valider</button>
        </div>
    </form>

    </div>
</div>
<?php include '../lib/debug.php'; ?>
<script>
    $("#immat").autocomplete({
        minLength: 1,
        source: function(request, response) {
                    $.ajax({// call AJAX
                        //url: 'immat.php',
                        type: "GET",
                        dataType: 'json',
                        data: 'q=' + request.term, // défini le terme à rechercher
                        async: true,
                        cache: true,
                        success: function(ac_data) {
                            response(ac_data); // On va ajouter le résultat au tableau des résultats d'Autocomplete
                        },
                        error: function(msg) {
                            alert('Une erreur est survenue.');
                        }
                    });
                },
                select: function(event, ui) { // Assigniation de la valeur des champs au select
                    $('#immat').val(ui.item.immat);
                    $('#mva').val(ui.item.mva);
                    $('#marque').val(ui.item.marque);
                    $('#modele').val(ui.item.modele);
                    $('#double_clef').val(ui.item.double_clef);
                    $('#id').val(ui.item.id);
                }
            });
</script>

si quelqu'un peux y jeter un oeil.

SI je comprends bien, en prenant l'exemple double clé, depuis ta bdd, tu stockes la valeur 1 ou 0 dans la variable $datas'double_clef'].

dans ce cas tu peux faire la fonction suivante:

function checkbox($id, $checked){
    $value = isset($_POST->$id) ? $_POST->$id : '';
    $inputChecked = $checked ? ' checked' : '';
    return "<input type='checkbox' id='$id' name='$id' value='$value' $inputChecked>";
}

Et l'appeler comme cela:

<?= checkbox('double_clef', $datas'double_clef']); ?>

Et puis bon ben pour info, data ne prend jamais de s a la fin puisque c'est déjà la forme au pluriel. La forme au singulier est datum, qui n'est pratiquement jamais utilisée d'ailleurs.

gilles40
Auteur

Re Vallyan,

J'ai utiliser ton code et j'ai ce message d'erreur:
Undefined variable: data in /var/www/local.dev/basevl/flotte/arrivees.php on line 134

en fait ce que je fait c est que j'utilise autocomplete sur le champ "immat" et ensuite je rempli automatiquement les differents champs de mon formulaire (voir en bas du fichier la partie Js) avec les donnees deja rentrees dans la base ensuite je n ai plus qu'a ajouter la "date d'arrivee" et ensuite je valide pour mettre a jour ma table avec le champ "date", quand je passe un input text sur le champ "double_clef" cela me met bien 1 ou 0 en fonction des donnees de la base mais dès qu'il s'agit de le passer en checkbox là rien ne fonctionne.

voila merci de ton aide.

Gilles

Ah, donc c'est en JS que tu veux cocher automatiquement ta checkbox, c'est pas en php.

ta variable ui.item.double_clef contient 1 ou 0?
dans ce cas, dans le JS:

$('#double_clef').prop('checked', ui.item.double_clef);
// a la place de :
$('#double_clef').val(ui.item.double_clef);
gilles40
Auteur

Bonjour Vallyan,

impec ca fonctionne maintenant j ai plus qu'a faite une petite condition pour que lors que c est 0 la coche ne s'affiche pas et qu'elle s'affiche quand c est 1.

merci pour l'aide que tu m'a apporter

Gilles

Ben normalement il n'y a pas besoin avec le bout de code que je t'ai donné.

$('#double_clef').prop('checked', true); // -> coche
$('#double_clef').prop('checked', false); // -> décoche

or 0 = false et 1 = true, donc normalement pas besoin de condition

gilles40
Auteur

Re,

moi que ce soit a 1 ou a 0 ca reste coché tout le temps pourtant dans la base c est soit 1 ou 0

gilles40
Auteur

Là ma coche disparait

gilles40
Auteur

en plus le pire c est que cela ne fonctionne pas sur double_clef mais sur toutes mes autre checkbox ca marche!!!!
la je ne pige pas

gilles40
Auteur

Re Vallyan,

j ai passer en revue le code et j'ai trouver mon erreur je mettais 2 fois checked dans le premier checkbox maintenant cela fonctionne parfaitement.

encore un grand merci pour ton aide.

Bonne journée

Gilles