foreach et base de données

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 : foreach et base de données

Re: foreach et base de données

par xTG » 30 janv. 2013, 16:39

Je rajouterai que la protection des données ne doit pas être une tâche mais un réflexe. ;)

Re: foreach et base de données

par Perine » 30 janv. 2013, 16:21

Se protéger contre des injections SQL n'est pas une chose à faire par la suite. Il suffit d'une requête non protégée pour que tout le système soit potentiellement compromis (à cause d'un oubli par exemple).
PDO (ou mysqli) avec des Prepared Statements te protège automatiquement contre les injections SQL. Je te conseille donc vivement de t'intéresser à ce sujet aussi vite que possible :)

Re: foreach et base de données

par tiomil » 30 janv. 2013, 16:11

Re,

@ Perine,

j'ai l'intention de protéger des injections sql une fois que je serais sur que ce que je veut faire fonctionne, et je l'utilise en local,pour ce qui est de mysqli et PDO, malheureusement je n'en ai jamais entendu parler lors de la "formation" que j'ai suivi récemment :(.
Je vais me renseigner pour l'utiliser et faire autrement qu'en dynamique pour l'instant,

merci pour ton aide

Re: foreach et base de données

par Perine » 30 janv. 2013, 13:34

Ce que tu fais est extrêmement dangereux et permet de faire des injections SQL. De plus, tu utilises l'extensions MySQL qui est dépréciée à partir de PHP5.5 et ne va sans doute plus exister dans PHP5.6 ou PHP6. Tu devrais donc changer pour PDO ou mysqli.


Pour ce qui est de ton problème, il faut tout d'abord que tu mettes une liste de blanche de champs qui doivent être définis :
$allowed_fields = array("username", "email", "autre_champ");
Ensuite, tu dois récupérer les champs que le formulaire envoie :
$added = array();
foreach ($allowed_fields as $field) {
    if (!isset($_POST[$field])) {
        throw new \Exception(sprintf("Il manque le champ %s", $field));
    }
    $added[$field] = $_POST[$field];
}
Une fois que tu as récupéré ces champs, tu dois construire la requête et de l'envoyer à la base de données :
$sql = "insert into NOM_de_la_table (%s) values (%s)";
foreach ($added as $field => $value) {
    $input[":" . $field] = $value;
}
$PDO->prepare(sprintf($sql, "`" . implode("`,`", array_keys($added)) . "`", implode(",", array_keys($input))));
$PDO->execute($input);

Re: foreach et base de données

par moogli » 30 janv. 2013, 13:15

salut,

ton code fait bien ce que tu décris c'est normal ;)

il faut simplement que tu utilise la concaténation pour réaliser une requête du style :
insert into latable (les,champs,que,tu,veux) values(les,valeurs,que,tu,veux);
.

@+

foreach et base de données

par tiomil » 30 janv. 2013, 12:36

bonjour,

je voudrais entrer les données récupérées d'un formulaire dynamique dans une table

voici mon code:
foreach($_POST as $name => $value)
{
	$req_insert = "INSERT INTO Nom_de_la_table($name) values ('$value');";
	$req2 = mysql_query($req_insert) or die(mysql_error());
}
je récupére bien toutes les valeurs de mon formulaire, le souci c'est que chaque valeur s'enregistre sur une nouvelle ligne dans la table et pas sur une seule et même ligne

quelqu'un peut il m'aiguiller pour enregistrer sur une seule ligne?

merci de votre aide