checkbox dans un textarea ...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : checkbox dans un textarea ...

par Invité » 10 févr. 2006, 18:39

bof bof, moi je le fais sur deux page deja vais te les montrer car je suis perdu ...


page tech1.php j'ai suppirmer un peu du debut et de la fin, ca n'intervien pas :)
 <?php    $menu = mysql_query ("select idinter from intervention where statut='In' or statut='En cours' or statut='En attente' or statut='Out'");


          $requette="select clienti.nom,
          		telephone,
          		gsm,
          	intervention.description,
          	intervention.accessoire,
          	intervention.resolution,
               intervention.instal,
          	intervention.motdepasse,
          	intervention.notetech,
          	intervention.dateheure,
          	intervention.reception,
          	intervention.duree,
          	intervention.noteprix,
          	intervention.ligne,
          	idinter,
          	technicien 
          from clienti,intervention,machine 
          			where clienti.idclient=machine.clientid and idmachine=machineid and idinter='".$_GET['var']."'";
          
          
$sql = mysql_query($requette) or die('Erreur SQL');
                   
    echo "<table width=\"100%\" >";
	$maListeDeLignesCochées=0;
	while(list($nom,$telephone,$gsm,$description,$accessoire,$resolution,$instal,$motdepasse,$notetech,$dateheure,$reception,$duree,$noteprix,$laListeCiDessus,$idinter,$tech  ) = mysql_fetch_array($sql)) {
		?><form method="post" name="form" id="form" action="Miseajourinter.php?varia=<?echo $idinter ?>&& var=<?echo $maListeDeLignesCochées?>">
<?php 
$resolution = str_replace('<br />','\r\n',$resolution); 
$instal = str_replace('<br />','\r\n',$instal); 
$description = str_replace('<br />','\r\n',$description); 
$motdepasse = str_replace('<br />','\r\n',$motdepasse);
$accessoire = str_replace('<br />','\r\n',$accessoire);  	
$notetech = str_replace('<br />','\r\n',$notetech); 
//$noteprix = str_replace('<br />','\r\n',$noteprix); 	

		echo"<tr><td bgcolor=\"#EAEAFF\">$idinter</td><td bgcolor=\"#EAEAFF\">$telephone</td><td bgcolor=\"#EAEAFF\">$gsm</td></tr>".
		"<tr><td>Tech :";?> 
		
		
		<select name="technicien" id="select">
            <? echo  " <option>$tech</option>"; ?>
<option value='Gaëtan' >Gaëtan</option><option value='Herve' >Herve</option><option value='Sebastien' >Sebastien</option><option value='Amaury' >Amaury</option><option value='Nicolas' >Nicolas</option><option value='Michael' >Michael</option><option value='Guiseppe' >Guiseppe</option><option value='Daniel' >Daniel</option><option value='Olivier' >Olivier</option> 
  </select>
<?php echo "</td><td>Reçu Par : $reception</td></tr>".
		"<tr><td bgcolor=\"#EAEAFF\">Description</td><td bgcolor=\"#EAEAFF\">Accessoires</td></tr><tr><td>$description</td><td>$accessoire</td></tr>".
		"<tr><td bgcolor=\"#EAEAFF\">Instalation</td><td bgcolor=\"#EAEAFF\">Mot de passe</td></tr>".
		"<tr><td>$motdepasse</td><td>$instal</td></tr>".
		"<tr><td bgcolor=\"#EAEAFF\">Problemes</td></tr><tr><td>";
	
$monTableau=explode("\n", $resolution); // coupure du texte sur chaque ligne 
$maListeDeLignesCochées=explode(",", $lignesCochees); // tableau des numéros de lignes cochées 

for($i=0; $i<count($monTableau); $i++) { 
  echo $monTableau[$i]; 
  $checked = ""; 
  if(in_array($i, $maListeDeLignesCochées)) 
    $checked = "checked"; // si la ligne est dans la liste, la case sera cochée 
  echo '<input type="checkbox" name="Ligne" value="'.$i.'"  '. $checked.'>'; 
  echo '<br>'; // retour à la ligne, c'est plus joli  
} 

et la page miseajourinter.php :
<?php
  
    //include("connect.php");
    // Paramètres de connexion à la base de données
    
    $BD_serveur     = "localhost";
    $BD_utilisateur = "root";
    $BD_motDePasse  = "";
    $BD_base        = "dit";

 
  mysql_connect("localhost", "root", ""); 
 mysql_select_db("dit"); 
 
 $duree     = $_POST["duree"];
 $noteprix     = $_POST["noteprix"];
 $notetech     = $_POST["notetech"];
 $technicien    = $_POST["technicien"];
 $ligne =$_GET['var'];
 
if(isset($_POST['submit'])) 
{ 
   $listeCoche = implode("," , $Ligne);
    $requette="UPDATE intervention SET notetech='$notetech',noteprix='$noteprix',duree='$duree',technicien='$technicien',ligne='$listeCoche'  WHERE idinter='".$_GET['varia']."'";
	$repon = mysql_query($requette) or die('Erreur SQL');
} 

 

?>

<table border="3" width="100%">
 <tr><td bgcolor="#EAEAFF" colspan="80">  <center><?php include "menu.php";?></center></td>
 <td>

 <?php if (!$repon) {
        echo "L'enregistrement de vos données a échoué. Essayez plus tard.";
    } else {
        echo "donnée mise a jour!";
    }
?>
</td></tr></table>

par Ryle » 10 févr. 2006, 18:20

Avec mon formulaire et mon bouton submit :)

Un peu plus détaillé tu aurais ça :

<?
if(isSet($Ligne)) { // mise à jour de la liste lors de l'envoi du formulaire
   $listeCoche = implode("," , $Ligne); // on obtient le 1,2,5,9
   $sql = "UPDATE maTable SET monChamp = '$listeCoche' WHERE idDuTexte = $idDuTexteSurLequelJeTravail";
   ... // A compléter : connexion à la base, exécution du update, etc.
}
?>

<form name="monForm">

<?
$monTexte = ... // A compléter connexion à la base, execution du select récupération du texte enregistré et de la liste des lignes cochées pour ce texte
$lignesCochees = ...

$monTableau=explode("\n", $monTexte); // coupure du texte sur chaque ligne
$maListeDeLignesCochées=explode("," $lignesCochees); // tableau des numéros de lignes cochées

for($i=0; $i<count($monTableau); $i++) { 
  echo $monTableau[$i]; 
  $checked = ""; 
  if(in_array($i, $maListeDeLignesCochées)) 
    $checked = "checked"; // si la ligne est dans la liste, la case sera cochée
  echo '<input type="checkbox" name="Ligne" value="'.$i.'" ... '. $checked.'>'; 
  echo '<br>'; // retour à la ligne, c'est plus joli ;)
} 

<input type="hidden" name="idDuTexteSurLequelJeTravail" value="<?php echo $monIdTexte ?>">

<input type="submit"> 
</form>
La page t'affiche donc ton texte et tes cases. Quand tu clique sur submit, les cases cochées sont envoyée au serveur, ainsi que l'idDuTexteSurLequelTuTravail pour savoir sur quel texte faire la mise à jour.
S'il y a des lignes de cochées, il rentre dans le if et met à jour en base les lignes selectionnées, puis te raffiche texte et cases. Tu peux éventuellement mettre un header() si tu veux rediriger vers une autre page après la mise à jour, au lieu de réafficher le texte :)

ça te semble plus clair ? :)

par Invité » 10 févr. 2006, 17:58

$maListeDeLignesCochées=explode("," $laListeCiDessus); 
$monTableau=explode("\n", $monTexte); 
for($i=0; $i<count($monTableau); $i++) { 
  echo $monTableau[$i]; 
  $checked = ""; 
  if(in_array($i, $maListeDeLignesCochées)) 
    $checked = "checked"; 
  echo '<input type="checkbox" name="Ligne" value="'.$i.'" ... '. $checked.'>'; 
} 
heu laListeCiDEssus, comment tu la met a jours?

oui c'est ca, je veux afficher un texte suive de checkbox, qu'on peut coche ou pas et quand on appuye sur ok ces case la reste coche et les non coche non.

par Ryle » 10 févr. 2006, 17:45

En fait, le soucis, c'est que j'ai un peu de mal à voir concrêtement ce que tu veux faire. J'ai bien compris la partie case à cocher sur chaque ligne, mais c'est ensuite où je suis moins sur.

De ce que j'ai compris, tu veux cocher certaines cases, les enregistrer, et les voir cochées lorsque tu reviens ?
Si c'est bien ça, il te faut dans un premier temps ajouter un formulaire autour de tes cases et un bouton submit pour enregistrer.

Lorsque tu enregistres le formulaire, il te faut un petit bout de code qui va regarder quelles sont les cases qui ont été cochée. Dans mon exemple, comme chaque checkbox porte le même nom, tu vas récuperer un tableau $Ligne qui contient la valeur de chaque case cochée uniquement.

A partir de là, c'est à toi de voir comment tu veux le stocker pour pouvoir le consulter la fois suivante. Le plus simple me semblerait un champ en base, peut être rajouter une colonne dans la table qui contient ton texte(voire ajouter une table si tu as beaucoup de lignes, c'est plus "Merisien")
Supposons que tu partes pour le champ, il te suffit de faire implode("," , $Ligne) pour obtenir une chaine avec chaque numero de ligne séparée par une virgule. Il ne te reste plus qu'à l'enregistrer via un update en base

Pour la lecture, il te faut venir lire la chaine en base (avec un select), et d'appeler la boucle qui va te lire le fichier et te rajouter les cases en cochant celles contenue dans ta chaine :) (pour ça, voir la partie "checked" sur le code précédent)

bon.. chuis pas forcément certain d'être plus clair, donc n'hésite pas à me dire ce qui te gène ou ce qui te parait compliqué :)

par Invité » 10 févr. 2006, 17:38

et j'ai un probleme aussi, y me coche toujours la premiere case quoi qu'il arrive :oops:

par hELLLLLLLPPPPPPPP » 10 févr. 2006, 17:29

heu je vais parraitre super bete, mais suis qu'un petit debutant :oops:

*********************
sinon pour le code, il faudrait que tu enregistres les cases qui sont cochées dans une variable, ou en base ou dans un fichier sous la forme : 1,2,7,12 pour dire que les lignes 1, 2, 7 et 12 ont été cochées
**********************

heuu on fais ca comment :oops:

Merci mille fois deja pour tout cette aide

par Ryle » 10 févr. 2006, 17:19

A bah forcement, si tu tapes deux fois sur entrée, ça fait deux ligne, donc moi je met deux checkbox si on me demande d'en mettre un par ligne ;)
A ce moment là, tu peux utliser ereg_replace et remplacer une suite de \n par un seul \n par exemple :)

sinon pour le code, il faudrait que tu enregistres les cases qui sont cochées dans une variable, ou en base ou dans un fichier sous la forme : 1,2,7,12 pour dire que les lignes 1, 2, 7 et 12 ont été cochées

Ensuite, lors de la génération de ton bloc tu ajoutes le checked sur les case qui doivent l'être :
$maListeDeLignesCochées=explode("," $laListeCiDessus);
$monTableau=explode("\n", $monTexte); 
for($i=0; $i<count($monTableau); $i++) { 
  echo $monTableau[$i]; 
  $checked = "";
  if(in_array($i, $maListeDeLignesCochées))
    $checked = "checked";
  echo '<input type="checkbox" name="Ligne" value="'.$i.'" ... '. $checked.'>'; 
}

par HEEELPPPPPP » 10 févr. 2006, 17:00

heu je vois pas trop la seconde partie :$ a partir de l'enregistrement, tu sais pas montrer avec un exemple :$ si to plai :$

et par contre, pour ton code, si on fait un double enter, on aura deux case checkbox :?

par Ryle » 10 févr. 2006, 16:42

Pour remplacer les retours chariot par une checkbox, je te conseil d'utiliser la fonction explode() sur le caractère de séparation "\n". Tu obtiendras ainsi un tableau contenant chacune de tes lignes.

Tu peux ensuite l'afficher à l'aide d'une boucle sur le tableau et ajouter ton checkbox à chaque ligne :
$monTableau=explode("\n", $monTexte);
for($i=0; $i<count($monTableau); $i++) {
 echo $monTableau[$i];
 echo '<input type="checkbox" name="Ligne" value="'.$i.'" ...>';
}
Tu ajoutes ensuite un bouton submit pour enregistrer les cases qui ont été cochées (tu récupères le tableau $Ligne de ton formulaire) et tu peux ainsi enregistrer le numéro des lignes cochées.

Il ne te reste plus ensuite lors de la consultation de compléter le code en ajoutant un attribut "checked" dans les cases qui doivent être cochée (si $i qui correspond au numéro de la ligne fait parti des valeurs enregistrées, alors la case est cochée)

Je ne sais pas si c'est très clair, donc n'hésite pas si tu as des questions :)

par HHHEEELLLLLLLLPPPPPPPPPPP » 10 févr. 2006, 16:40

j'oubliai le code pour voir comment je fais et si quelqu'un est interesse il sait deja les rajouter a la fin de chaque ligne :D
$result=MySQL_Query("SELECT resolution FROM intervention Where idinter= '".$_GET['var']."'"); 
$myrow=MySQL_Fetch_Array($result);
$cpt=0;
$myrow['resolution']=trim($myrow['resolution']);
$probleme=split ("\n",$myrow['resolution']);
$max=count($probleme);

echo "<input type=\"hidden\" name=\"maxprob\" value=\"$max\">";

while ($cpt<($max))
{
if (substr_count($probleme[$cpt],' ==>OK'))
  {$checked = " checked ";
  }
 else
  {$checked="";}  
   $probleme[$cpt]=str_replace(' ==>OK', '', $probleme[$cpt] );

   $vertmp=ereg ('[^A-Za-z0-9]',substr($probleme[$cpt],1,-1) );
if ( ($cpt< ($max-1) ) & !(ereg ('[A-Za-z0-9]',substr($probleme[$cpt],1,-1) )) )
  
 {$probleme[$cpt]=substr($probleme[$cpt],0,-1);}
  $probleme[$cpt]=trim($probleme[$cpt]);
if ($probleme[$cpt]!='')
{
 ?>      <tr align="left" valign="top">
        <td colspan="3"> <? echo $probleme[$cpt]; ?><input type="hidden"
          name="<? echo "prob[".$cpt."]";?>"
          value="<? echo $probleme[$cpt]; ?>">
          <input type="checkbox" name="<? echo "prob[".$cpt."]";?>"
          value="<? echo $probleme[$cpt]." ==>OK"; ?>" <? echo $checked; ?>>
          </td>
        </tr>

<?} $cpt=$cpt+1;

}                

par HEEEEEELPPPPPPPPPPPPP » 10 févr. 2006, 16:39

voila, j'arrive a les afficher a la fin de chaque ligne :D partie 1 reussit, mais maintenant voudrai pouvoir les sauve quelque part mais comment faire?

tableau peut etre? j'en ai aucune idee qui peut me venir en aide??

pleassseeeeeeeeeee

par Invité » 10 févr. 2006, 15:48

je me reexplique, donc on a un texte enregistre dans ma base de donnee, je veux pouvoir le reaffiche a l'ecran, et la ou y a des enter on affiche des checkbox

exemple je rentre :ranger ma chnambre (enter)
laver la voiture (enter)
prendre ma douche

je veux qu'il me l'affiche comme ceci : ( [] = checkbox )

ranger ma chnambre[]
laver la voiture []
prendre ma douche []

voila pour la pemiere partie, ensuite, quand ce texte est reaficche donc quand on a ca :

ranger ma chnambre[]
laver la voiture []
prendre ma douche []

je veux pouvoir les coche et sauve ca pour que si je revienne sur cette page, celle que j'avais coche soit encore coché

tu comprends ou j'explique tjrs mal :(

checkbox dans un textarea ...

par Invité » 10 févr. 2006, 13:40

bonjour,

alors je vous explique mon probleme :)

j'ai un formulaire ou on peut rentre du texte pour certain element exemple :

hobbys : <textarea ...>

j'encode ca dans ma base de donnee tout va bien :)

maintenant je voudrai pouvoir resortir ce qui est dans ma base, et a l'endroit ou y a des enter, lors du premier affichage, afficher des checbox vide.

Mais ces pas fini, je veux aussi pouvoir mettre a jour les checkbox, les clique et lors de l'affichage suivant, qu'il m'affiche les checkbox a chaque enter, et si elle sont coche qu'il les coche.

est ce possible quelqu'un vois comment faire????