CodeIgniter: set_value() ou post() - ce qui est plus rapide et quelle est la meilleure pratique pour stocker des données dans la base de données
Fond
À l'aide de Codeigniter
avec form_helper
et form_validation
pour faire une certaine forme de traitement. Formulaire a été validé dans le controller
.
Maintenant, nous avons besoin de mettre ces données dans la base de données à l'aide de la model
classe.
Hypothèses
Permet de supposer notre formulaire en a plusieurs éléments d'entrée (par exemple >20).
Question
Lequel des extraits de code suivants seront plus efficaces? Both snippets are obviously inside the controller method to which the form submits data.
Extrait De Code 1
if ($this->form_validation->run())
{
//validation successful, now collect the values in a variable to pass it to the model.
$form_data['field1'] = $this->form_validation->set_value('field1');
$form_data['field2'] = $this->form_validation->set_value('field2');
//AND SO ON
$form_data['fieldN'] = $this->form_validation->set_value('fieldN');
//Now put this data into database.
$this->corresponding_model->write_to_db($form_data);
}
Extrait De Code 2
if ($this->form_validation->run())
{
//validation successful, now collect the values in a variable to pass it to the model.
$form_data['field1'] = $this->input->post('field1');
$form_data['field2'] = $this->input->post('field2');
//AND SO ON
$form_data['fieldN'] = $this->input->post('fieldN');
//Now put this data into database.
$this->corresponding_model->write_to_db($form_data);
}
Donc, essentiellement, ce que je demande est: Ce qui est mieux pour obtenir les données de postes pour certains arbitraire élément de formulaire? $this->input->post
ou $this->form_validation->set_value()
?
PS: Si l'on regarde le set_value()
et post()
fonctions dans le code (voir ci-dessous), évidemment set_value()
va être plus rapide que post()
parcourt l'ensemble de la $_POST
. Donc dans un sens, c'est aussi sur ce qui est la meilleure pratique?
Form_validation.php, set_value() la méthode
public function set_value($field = '', $default = '')
{
if ( ! isset($this->_field_data[$field]))
{
return $default;
}
//If the data is an array output them one at a time.
// E.g: form_input('name[]', set_value('name[]');
if (is_array($this->_field_data[$field]['postdata']))
{
return array_shift($this->_field_data[$field]['postdata']);
}
return $this->_field_data[$field]['postdata'];
}
Input.php, méthode post ()
function post($index = NULL, $xss_clean = FALSE)
{
//Check if a field has been provided
if ($index === NULL AND ! empty($_POST))
{
$post = array();
//Loop through the full _POST array and return it
foreach (array_keys($_POST) as $key)
{
$post[$key] = $this->_fetch_from_array($_POST, $key, $xss_clean);
}
return $post;
}
return $this->_fetch_from_array($_POST, $index, $xss_clean);
}
Vous devez vous connecter pour publier un commentaire.
Les deux fonctions renvoient la valeur modifiée si les règles ont été exécutés sur l'entrée.
Si vous voulez lire un post de la valeur de la forme, UTILISATION
$this->input->post()
.set_value()
est utilisé pour remplir à nouveau un formulaire de validation a échoué.Il n'y a pas de filtrage supplémentaire sur elle, de sorte qu'il est plus rapide, mais je préfère vous devez utiliser
$this->input->post()
pour la sécurité.set_value()
ne sera jamais modifier la valeur, elle retourne la valeur d'un champ de$_POST
.$_POST[$field]
directement, pas nécessairement$this->input->post()
!set_value()
sera de retour de la valeur même si la validation d'un formulaire s'exécute sans erreur, et en termes de performances, il n'a aucun avantage par rapport à la$this->input->post()
, sauf si vous activez le XSS filtrage surpost()
méthode.Tandis que le
$this->form_validation->set_value()
pourrait être plus rapide dans certains cas, [jetez un oeil à l'indice de référence ci-dessous], la différence la plus importante entre ces deux méthodes est la préparation d'un XSS option de filtrage dans$this->input->post()
méthode.De la Validation du formulaire :: set_value() Fonctionnalité
Dans de la Validation du Formulaire de Classe , tous les champs sont stockés dans
$this->_field_data
propriété, viennent les valeurs de$_POST
directement et$this->form_validation->set_value()
méthode retourne les données à partir de$this->_field_data
.D'entrée :: post() Fonctionnalité
D'entrée de la Classe prépare un XSS option de filtrage, vous pourriez envisager de l'utiliser pour stocker des valeurs dans la base de données.
Remarque:
Veuillez noter que
$this->input->post()
méthode n'a PAS de la boucle à travers l'ensemble du$_POST
par défaut, sauf s'il est appelé sans$index
paramètre.De référence
Système D'Information:
CPU:
Intel Core-i5 760 @ 2.80 GHz
RAM:2.00 GB
.Cas de Test: 30-chaîne de caractères champ de texte.
Conclusion
Si vous devez effectuer un XSS filtrage avant d'enregistrer des valeurs dans la base de données, je recommande d'utiliser CodeIgniter d'Entrée de la classe. aussi, il y a plus de de Filtrage de Sécurité, opérations d'Entrée en Classe sert, a expliqué dans CodeIgniter Guide De L'Utilisateur.
Parfois extrait de code #1, parfois - #2. Dans la plupart des cas, $this->input->post() est beaucoup plus rapide. Mais il peut dépendre de l'environnement, le code et les données. Vous pouvez facilement vérifier ce qui est plus rapide dans votre cas:
Puis d'appeler ces fonctions et de résultats de match.