2009-08-28 8 views
1

Je suis en train d'écrire un script dans lequel un tableau de cases à cocher sont affichées en utilisant:Le stockage des données de cases à cocher

<? 
    while($i = mysqli_fetch_array($get_perms)){ 

    $pname = $i[pname]; 
    $id = $i[id]; 
?> 
    <div> 
    <input type="checkbox" tabindex="1" name="<? echo("$id");?>" value="1" <? if($permissionid[$id] == '1') {echo ' checked="checked" ';}?> /><?echo(" $pname");?> 
    </div> 
<? } ?>  

Cependant, j'ai aussi une autre partie faire une chose semblable, mais pour Sget_perms est un autre sql pour obtenir différents Les données. Maintenant, évidemment, quand il s'agit de publier les données dans le formulaire/script, il va y avoir un problème entre distinguer les deux bases de données dans le formulaire.

Ceci est le SQL pour mettre à jour les données fournies de la forme:

$insert = mysql_query("UPDATE `perms` SET 
    `title`='$_POST[title]', 
    `1` ='$_POST[1]', 
    `2` ='$_POST[2]', 
    `3` ='$_POST[3]', 
    `4` ='$_POST[4]', 
    `5` ='$_POST[5]', 
    `user` ='$_POST[username]' 
    WHERE `userid` = '$valued_user_show[id]' 
") 

Alors comment diable puis-je distinguer correctement entre les deux, et il pouvoir entrer correctement le SQL?

Le schéma de la table est essentiellement:

7 colonnes, userid, utilisateur, 1, 2, 3, 4, 6 userid est l'ID utilisateur de l'utilisateur qui a été écrit au script avant formulaire. l'utilisateur est le nom. Les numéros sont les numéros de permission.

$ get_perm est le SQL pour charger les informations actuelles sur l'utilisateur de la table dans un tableau.

+0

Pouvez-vous ajouter dans le schéma de la table et ce que vous essayez de faire avec la fonction Sget_perms? Cela aidera à trouver une solution. –

Répondre

2

Premier: jamais inclure des données soumises par l'utilisateur dans une instruction SQL sans l'échapper! Un utilisateur mal intentionné pourrait exploiter cela pour écraser vos données, récupérer des données sans autorisation, et causer toutes sortes de dommages. Utilisez toujours mysql_real_escape_string() pour échapper les valeurs soumises dans une requête.

Sur votre question actuelle: pour distinguer vos deux ensembles de champs similaires, donnez-leur simplement des noms différents. Peut-être que le premier serait appelé permsA et le second permsB. Vous auriez alors obtenir HTML comme ceci:

<input type="checkbox" tabindex="1" name="permsA_<? echo $id;?>" value="1" <? if($permissionid[$id] == '1') {echo ' checked="checked" ';}?> /><?echo htmlspecialchars($pname);?> 

Notez que j'ai aussi inclus un appel à htmlspecialchars() pour échapper correctement la valeur $pname pour une utilisation en HTML, et je les citations inutiles omettez autour "$id" (mettre une variable entre guillemets comme cela fait juste PHP faire un traitement supplémentaire pour analyser la chaîne, vous pouvez juste répercuter la variable elle-même sans guillemets).

Ensuite, dans votre déclaration sql:

$insert = mysql_query("UPDATE `perms` SET 
    `title`='" . mysql_real_escape_string($_POST[title]) . "', 
    `1` ='" . mysql_real_escape_string($_POST['permsA_1'] . "', 
    `2` ='" . mysql_real_escape_string($_POST['permsA_2'] . "', 
    `3` ='" . mysql_real_escape_string($_POST['permsA_3'] . "', 
    `4` ='" . mysql_real_escape_string($_POST['permsA_4'] . "', 
    `5` ='" . mysql_real_escape_string($_POST['permsA_5'] . "', 
    `user` ='" . mysql_real_escape_string($_POST['username']) . "' 
    WHERE `userid` = '$valued_user_show[id]' 
") 

Ici, le seul changement est d'ajouter le préfixe permsA_ et pour échapper correctement toutes les valeurs soumises par l'utilisateur.

+0

woops désolé, tous les autres scripts en direct ont les chaînes d'échappement avant les données, je ne comprends habituellement pas échapper jusqu'à ce que le développement du script primaire est terminé :) – bear

+0

aussi, nous utilisons mysqli :) – bear

+0

intéressant ... la forme de soumettre à Array/useredit.php (le script s'appelle useredit.php ...et ce n'est pas dans un dossier "Array". – bear

1

Créer un tableau avec vos cases à cocher:

<input type="checkbox" name="mycheckbox[]"/> 

Et « myCheckBox » sera disponible en tant que tableau dans vos données _POST.

+0

comment puis-je alors forumulate le $ _POST? – bear

Questions connexes