Cocher automatique checkbox

Répondre
slikus
le 01/05/2009 à 00:19
slikus
Bonjour,

Voici mon petit script qui sert a allumer et éteindre des led via le port paralléle, au reload de ma page j'aimerai que les cases se coche toute seul suivant la valeur d'avant ?
Comment faire ?
<form name="formulaire" method="post" action="fenetre.php">
Coche pour allumer :
<input name="led1" type="checkbox" id="led1" value="1"> Led1
<input name="led2" type="checkbox" id="led2" value="2"> Led2
<input name="led3" type="checkbox" id="led3" value="4"> Led3
<input name="led4" type="checkbox" id="led4" value="8"> Led4
<input name="led5" type="checkbox" id="led5" value="16"> Led5
<input name="led6" type="checkbox" id="led6" value="32"> Led6

<input type="submit" value="Allumer">
</form>

<?php
require_once("class/php_iol.class.php");
$DemoPhpIOL = new php_iol();

$out=(int)$_POST['led1']+ (int)$_POST['led2']+(int)$_POST['led3']+(int)$_POST['led4']+(int)$_POST['led5']+(int)$_POST['led6'];

$DemoPhpIOL->WriteIOOutput(888, $out); // 888dec of 378hex
echo"envoi de". $out.".<br>";


?>


Par avance merci
moogli
le 01/05/2009 à 15:39
moogli
salut,

je ne connais pas du tout ta classe permettant la com avec ton port parallèle mais le principe est la suivant.

Tu fait, si cela est possible, une lecture du registre de ton port
- tu "convertis" l'info lu en quelque chose d'exploitable pur ton script php (masque binaire etc pour savoir si le Bit correspondant a ta led est allumé
- dans le code html utilise l'attribut checked des case a cocher.

Par exemple si les leds un et 6 sont allumées tu auras la valeur 33 (décimal) de la tu peut savoir que 1 et 6 sont allumé donc tu ajout checked="checked" dans le input.

Je n'est pas trouvé de fonction réalisant des masque binaires va falloir te la farcir à la main ;)

(le plus simple est de partir de la pondération binaire je pense ?)

@+
Il en faut peu pour être heureux !!!!!
moogli
le 01/05/2009 à 17:00
moogli
bon en fait en réfléchissant 2 secondes c'est simple.

tu récupère l'état de ton port dans une variable
ensuite
<?php
$port='????';// valeur correspondant a ton port
/*
ne sachant pas si tu récupère du binaire, du décimal ou de l'hexa je te fait une exemple avec tout :)
Dans tout les cas faut convertir en binaire
*/

// si décimal :
$bin = str_pad(decbin($port),6,"0",STR_PAD_LEFT);

// si hexa
$bin = str_pad(decbin(hexdec($port)),6,"0",STR_PAD_LEFT);

// si binaire
$bin = str_pad($port,6,"0",STR_PAD_LEFT); ;
// le str_pad permet de s'assurer que tu aura au moins6 bits (et pas moins)

//ensuite dans chaque input tu ajoute
if ( substr($a,$ponderation,1)==1) echo 'checked="checked"';

// pondération correspond à l'emplacement du bit dans le mot, attention la fonction substr commence a compter la gauche avec 0 (donc le bit de poid fort à le numéro 0 le bit de poids faible 6, dans le cas où tu n'ai que 6 bit).
?>


voila c'est "simple" ;)

@+
Il en faut peu pour être heureux !!!!!
slikus
le 01/05/2009 à 20:06
slikus
Merci,

En fait mon pb est réglé grace à XwZ qui m'a pondu ce code:

<?php
// on test si le formulaire a ete envoye
// s'il l'a ete alors on met dans $tabLED l'array des LED coche
// sinon on met un tableau vide
$tabLED = (isset($_POST['led'])) ? $_POST['led'] : array();
?>
<form name="formulaire" method="post" action="fenetre.php">
Coche pour allumer :<br />
<?php
// On parcours les puissances de deux desire, ici ca va de 2^0 a 2^5
for($i=0; $i < 6; $i++){
// on fait l'operation de 2^$i
$value = pow(2, $i);
// On affiche la checkbox avec la valeur calcule au dessus
// On test si la valeur calcule appartient a $tabLED, si tel est le cas ca signifie que la case a ete coche
// Dans ce cas la on l'indique a l'aide 'checked="true"' sinon on lui dit rien
echo '<input name="led[]" type="checkbox" id="led1" value="'.$value.'" '.((in_array($value, $tabLED)) ? 'checked = "true"' : '').' /> Led'.($i+1).'<br />';
}
?>

<input type="submit" name="submit" value="MAJ">
</form>

<?php
// On test si le formulaire a ete envoye
if(isset($_POST['submit'])){
require_once("class/php_iol.class.php");
$DemoPhpIOL = new php_iol();

$out=0;
// On parcours tout le tableau et on ajoute les valeurs coche dans $out
if(isset($_POST['led']))
foreach($_POST['led'] AS $id => $value)
$out += (int)$value;

$DemoPhpIOL->WriteIOOutput(888, $out); // 888dec of 378hex
//echo"envoi de". $out.".<br>";
}
?>


ça marche super bien,

Encore merci à lui
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours