2010-03-24 5 views
-1

Je me bats pour trouver le chemin syntaxiquement correct dans lequel ajouter plusieurs variables et de lignes à ces déclarations:

/* VEUX AJOUTER SUR CINQ PLUS $ _POST [ « »] */

if(isset($_POST['check_prof']) && $_POST['check_prof'] == 'checked') { 
$check_prof = "checked"; 
}else{ 
$check_prof = "unchecked"; 
} 

/* Pareil, souhaitez ajouter CINQ AUTRES DANS ICI AINSI */

$query = "UPDATE `Users` SET `check_prof` = '" . $check_prof . "' WHERE `id` = '" . $auth->id . "' LIMIT 1"; 
    mysql_query($query,$connection); 
    $auth->refresh(); 
    } 
+0

Pour être sûr que je comprends bien, vous voulez être en mesure de saisir une série de variables $ _POST, puis les mettre toutes dans la même instruction SQL? Ainsi, votre SQL pourrait devenir quelque chose comme, 'UPDATE utilisateurs SET check_prof = 'vérifié', check_student = 'coché' WHERE id = 'quel que soit' LIMIT 1' (les backticks supprimés de SQL pour le formatage SO) – Tarka

+1

[** S'il vous plaît, don n'utilise pas les fonctions 'mysql_ *' dans le nouveau code **] (http://bit.ly/phpmsql). Ils ne sont plus maintenus [et sont officiellement obsolètes] (https://wiki.php.net/rfc/mysql_deprecation). Voir la [** boîte rouge **] (http://j.mp/Te9zIL)? En savoir plus sur [* instructions préparées *] (http://j.mp/T9hLWi) à la place, et utiliser [PDO] (http://php.net/pdo) ou [MySQLi] (http://php.net/ mysqli) - [cet article] (http://j.mp/QEx8IB) vous aidera à décider lequel. Si vous choisissez PDO, [voici un bon tutoriel] (http://j.mp/PoWehJ). –

Répondre

1

Voulez-vous dire comme ça?

$fields = array('check_prof', 'check_this', 'check_that', 'check_whatever'); 

foreach($fields as $field){ 
    isset($_POST[$field] && $_POST[$field] == 'checked')){ 
     $$field='checked'; 
    } else { 
     $$field='unchecked'; 
    } 

    $query = "UPDATE `Users` SET `$field` = '" . $$field . "' WHERE `id` = '" . $auth->id . "' LIMIT 1"; 
    mysql_query($query,$connection); 
    $auth->refresh(); 
}

Par ailleurs, au lieu de stocker « checked » et « sans contrôle » dans votre base de données (comme varchar), vous pouvez le stocker sous forme de type tinyint (1) et il suffit d'utiliser un 0 ou un 1. Il prendre beaucoup moins d'espace.

Une autre chose, cela fera une requête distincte pour chaque champ. Il est plus efficace d'écrire une requête pour faire les changements pour tous les champs si la performance est une préoccupation.

+0

oui exactement! Je vous remercie! –

0

En supposant je comprends ce que vous voulez dire, essayez ceci:

<?php 
$arr = array('check_prof' => 'unchecked', 
      'check_student' => 'unchecked'); 
foreach($arr as $field => $checked) { 
    if (isset($_POST[$field]) && $_POST[$field] == 'checked') { 
     $arr[$field] = 'checked'; 
    } 
    // I don't know where $auth is coming from 
    $query = "UPDATE `Users` SET `$field` = '" . $arr[$field] . "' WHERE `id` = '" . $auth->id . "' LIMIT 1"; 
    mysql_query($query,$connection); 
    $auth->refresh(); 
} 
?> 

Vous auriez simplement besoin d'ajouter des champs si nécessaire à $arr pour qu'il soit bouclé.

+0

Je veux juste ajouter des multiples ... if (isset ($ _ POST ['check_prof']) && $ _POST ['check_prof'] == 'coché') { $ check_prof = "vérifié"; } else { $ check_prof = "non coché"; } f (isset ($ _ POST ['check_blog']) && $ _POST ['check_blog'] == 'cochée') { $ check_blog = "vérifié"; } else { $ check_blog = "non coché"; } mais ne connaissez pas la syntaxe correcte pour les ajouter à la même déclaration, je veux juste ajouter sur plusieurs variables et afficher des valeurs, etc –

+0

d'autres mots, ce que vous voyez dans la question originale est juste pour check_prof, mais veulent ajouter sur check_blog, check_question etc ... à la même déclaration –