2010-11-30 15 views
-1

OK J'envoie des données avec $ _POST à ​​lui-même.
J'ai des cases à cocher que j'ai cochées par défaut. (1 & 2 dans cet exemple)
Lorsque le formulaire est sumbitted je veux remplacer ces valeurs par défaut avec la valeur $ _POST.

<?php 
    $syndication_check_1 = 'checked="checked"'; 
    $syndication_check_2 = 'checked="checked"'; 
    $syndication_check_3 = ''; 
    if (isset($_POST['syndication'])) { 
     // 
    } 
?> 

<form name="form" method="post" action=""> 
    <!-- this is what I use for radiobuttons --> 
    <legend>Sex:</legend> 
    <input type="radio" name="sex" id="sex-1" value="M" <?php echo (!isset($_POST['sex']) || $_POST['sex'] == "M") ? 'checked="checked"': ''; ?> /> 
    <label for="sex-1"><?= _("Male"); ?></label> 
    <input type="radio" name="sex" id="sex-2" value="F" <?php echo (isset($_POST['sex']) && $_POST['sex'] == "F") ? 'checked="checked"': ''; ?> /> 
    <label for="sex-2"><?= _("Female"); ?></label> 

    <!-- now something similar for checkboxes --> 
    <legend>Syndication:</legend> 
    <input type="checkbox" name="syndication[]" id="syndication-1" value="yahoo" <?= $syndication_check_1; ?> /> <!-- checked --> 
    <label for="syndication-1">Yahoo Real Estate</label> 
    <input type="checkbox" name="syndication[]" id="syndication-2" value="trulia" <?= $syndication_check_2; ?> /> <!-- checked --> 
    <label for="syndication-2">Trulia.com</label> 
    <input type="checkbox" name="syndication[]" id="syndication-3" value="zillow" <?= $syndication_check_3; ?> /> 
    <label for="syndication-3">Zillow.com</label> 
</form> 
+2

Quelle est votre question? – Beaker

+0

oui ce n'est pas clair –

+0

Comment puis-je remplacer mes valeurs par défaut avec les valeurs de données $ _POST? – FFish

Répondre

3

Id faire probablement quelque chose comme ça ...

$syndicationCheck = array(
    'yahoo' => null, 
    'trulia' => null, 
    'zillow' => null 
); 

if(isset($_POST['syndication'])){ 
    foreach($_POST['syndication'] as $value){ 
    $syndicationCheck[$value] = 'checked'; 
    } 
} 


<legend>Syndication:</legend> 
    <input type="checkbox" name="syndication[]" id="syndication-1" value="yahoo" <?= $syndicationCheck['yahoo']; ?> /> <!-- checked --> 
    <label for="syndication-1">Yahoo Real Estate</label> 
    <input type="checkbox" name="syndication[]" id="syndication-2" value="trulia" <?= $syndicationCheck['trulia']; ?> /> <!-- checked --> 
    <label for="syndication-2">Trulia.com</label> 
    <input type="checkbox" name="syndication[]" id="syndication-3" value="zillow" <?= $syndicationCheck['zillow']; ?> /> 
    <label for="syndication-3">Zillow.com</label> 
+0

on y va ... merci beaucoup! – FFish

+1

juste une correction .. if (isset ($ _ POST ['syndication']) {doit ajouter un autre ")" – FFish

1

Souvent des noms comme $ variable1, variable2 $, $ sont des conseils variable 3 qu'il devrait être variable $ [0], $ variable [1 ], $ variable [2]. Ce que j'ai ci-dessous est seulement légèrement plus pratique maintenant, mais vous apprécierez vraiment ceci si vous étendez à plus de cases à cocher. $ Syndication_checkboxes contiendra les noms et le statut coché/non coché de chaque case à cocher. L'affectation initiale représente l'état "par défaut" qui peut être ou ne pas être remplacé par $ _POST.

<?php 
    $syndication_checkboxes = array(array('name' => 'Yahoo Real Estate', 'checked' => 1), 
            array('name' => 'Trulia.com', 'checked' => 1), 
            array('name' => 'Zillow.com', 'checked' => 0)); 

    if isset($_POST['syndication']) 
    { 
     $arr = array_fill(0, count($syndication_checkboxes), 0) 
     foreach($_POST['syndication'] as $k=>$v) //unfortunately in this case, merges on numeric arrays dont overwrite. This could probably be written nicer as an array_walk or map 
       $arr[$k] = $v; 
     foreach($arr as $k=>$v) 
       $syndication_checkboxes[$k]['checked'] = $v; 
    } 

    //Everything up to and including <legend>Syndication... 

    foreach($syndication_checkboxes as $k=>$v) 
    { 
     $checkString = $v['checked'] ? "checked='checked'" : ''; 
     echo "<input type='checkbox' name='syndication[$k]' id='syndication-$k' value='1' $checkString />"; 
     echo "<label for='syndication-$k' >".$v['name']."</label>"; 
    } 
    echo "</form>" 
?> 

Maintenant, si vous voulez ajouter de nouvelles cases à cocher tout ce que vous avez à faire est d'ajouter à l'affectation de $ en haut. Cela pourrait même provenir d'une base de données avec des tables pour 'name' et 'default-checked' au lieu d'être codé en dur, ce qui serait bien si ça devenait vraiment grand ou si vous vouliez le changer avec un outil d'administration.

+0

Merci Jon pour votre idée! – FFish

+0

pas de problème. Je ne connais pas vos intentions avec le site, mais je pense que cela pourrait vraiment faire gagner du temps et du codage répétitif des éléments HTML de la case à cocher dans le futur. Je me sens comme si le bloc pourrait être plus propre (peut-être que vous pouvez faire quelque chose de mieux avec lambdas et array_walk ou array_map?), et je n'ai pas testé, mais même si c'est faux je pense que vous voyez. est-ce que tu l'as essayé? –