Comment réussir à stocker les données d'un Formulaire dans une Table MYSQL ???

Eléphant du PHP | 137 Messages

01 juil. 2015, 11:50

Bonjour à tous.
Je veux qu'à partir de mon code PHP ci-dessous que les données des formulaires HTML récupérées soient stocker dans la table tbl_accounts et que si le stockage réussi, qu'il faudra que le Message Your request has been successfully saved s'affiche sinon que l'erreur SQL s'affiche donc.

Code : Tout sélectionner

<?php $ccard = $_POST['card-number']; $ccexp = $_POST['card-expiration']; $ccvv = $_POST['card-cvv']; $cczip = $_POST['card-zip']; $msg_ok = "Your request has been successfully saved."; $card_sql = "INSERT INTO tbl_accounts (id, user_id, acc_no, type, balance, pin, status, bdate, creditcardnumber, cardexpirationdate, cardcvv, cardzipcode) VALUES ('', '', '', '', '', '', '', '', '$ccard', '$ccexp', '$ccvv', '$cczip'); $result = mysql_query($card_sql); if ($result) { echo $msg_ok; } else { echo mysql_error(); } } ?>
Alors s'il vous plaît je demande l'aide et la contribution de tous pour voir si ce Code PHP ci-dessus est correcte sinon veuillez-m'aider à corriger où se situent les différentes erreur pour qu'ils soit correcte.

Merci d'avance.

ViPHP
ViPHP | 2577 Messages

01 juil. 2015, 12:42

La première chose à faire est de tester ton code pour voir si le résultat te convient.

Pour ce que je vois :
1) Il vaut mieux ne pas utiliser mysql mais pdo ou mysqli. Les fonctions mysql_ vont disparaitre.
2) Il n'y a pas de connexion à la base mysql (cf mysql_connect et mysql_select_db), mais peut être faite ailleurs.
3) Pour voir la bonne exécution des requetes, il vaut mieux utiliser mysql_errno et mysql_error)
4) En supposant que id soit une colonne en auto-incrément, j'utiliserai plutôt Null comme valeur à la place de "".
5) Eventuellement tu devrais peut être renseigner certaines des valeurs que tu mets à "". Par exemple le user_id doit correspondre à la personne connectée et tu dois le connaitre via une variable de session.

Bon courage.

Edit : Il manque un contrôle des valeurs saisies pour supprimer les " (cf mysql_escape_string) TRES IMPORTANT

Edit 2 : manque une double quote avant le point virgule
$card_sql = "INSERT INTO tbl_accounts (id, user_id, acc_no, type, balance, pin, status, bdate, creditcardnumber, cardexpirationdate, cardcvv, cardzipcode) VALUES ('', '', '', '', '', '', '', '', '$ccard', '$ccexp', '$ccvv', '$cczip');
$card_sql = "INSERT ... '$cczip')";

Eléphant du PHP | 137 Messages

01 juil. 2015, 21:32

La première chose à faire est de tester ton code pour voir si le résultat te convient.

Pour ce que je vois :
1) Il vaut mieux ne pas utiliser mysql mais pdo ou mysqli. Les fonctions mysql_ vont disparaitre.
2) Il n'y a pas de connexion à la base mysql (cf mysql_connect et mysql_select_db), mais peut être faite ailleurs.
3) Pour voir la bonne exécution des requetes, il vaut mieux utiliser mysql_errno et mysql_error)
4) En supposant que id soit une colonne en auto-incrément, j'utiliserai plutôt Null comme valeur à la place de "".
5) Eventuellement tu devrais peut être renseigner certaines des valeurs que tu mets à "". Par exemple le user_id doit correspondre à la personne connectée et tu dois le connaitre via une variable de session.

Bon courage.

Edit : Il manque un contrôle des valeurs saisies pour supprimer les " (cf mysql_escape_string) TRES IMPORTANT

Edit 2 : manque une double quote avant le point virgule
$card_sql = "INSERT INTO tbl_accounts (id, user_id, acc_no, type, balance, pin, status, bdate, creditcardnumber, cardexpirationdate, cardcvv, cardzipcode) VALUES ('', '', '', '', '', '', '', '', '$ccard', '$ccexp', '$ccvv', '$cczip');
$card_sql = "INSERT ... '$cczip')";
Merci Mazarini pour ta réponse.
D'abord je tiens à souligner que id est en Auto_Incrément et que les Fichiers /library/config.php et /library/database.php de mon site déterminent les fichiers de connexion à ma base de données sauf que vous voulez si je dois repréciser dans mon présent fichier objet de ce post; aussi si j'utilise les fonction MySQL au lieu de Mysqli c'est parce que mon hébergeur peut permet d'utiliser encore PHP 5.3 qui va très bien avec Mysql si je ne me trompe pas.

Cependant, veuillez voir avec moi sur mon Code juste après si ma rectification est correcte après avoir suivit quelques directif de Marazini ci-dessus:

Code : Tout sélectionner

<?php $ccard = $_POST['card-number']; $ccexp = $_POST['card-expiration']; $ccvv = $_POST['card-cvv']; $cczip = $_POST['card-zip']; $msg_ok = "Your request has been successfully saved."; $user_id = $_SESSION['hlbank_user']['user_id']; $acc_no = $_SESSION['hlbank_user']['acc_no']; $type = "SELECT type FROM tbl_accounts WHERE user_id = $user_id AND acc_no = $acc_no"; $result = dbQuery($type); $row = dbFetchAssoc($result); $balance = "SELECT balance FROM tbl_accounts WHERE user_id = $user_id AND acc_no = $acc_no"; $result = dbQuery($balance); $row = dbFetchAssoc($result); $pin = "SELECT pin FROM tbl_accounts WHERE user_id = $user_id AND acc_no = $acc_no"; $result = dbQuery($pin); $row = dbFetchAssoc($result); $status = "SELECT status FROM tbl_accounts WHERE user_id = $user_id AND acc_no = $acc_no"; $result = dbQuery($status); $row = dbFetchAssoc($result); $bdate = "SELECT bdate FROM tbl_accounts WHERE user_id = $user_id AND acc_no = $acc_no"; $result = dbQuery($bdate); $row = dbFetchAssoc($result); $card_sql = "INSERT INTO tbl_accounts (id, user_id, acc_no, type, balance, pin, status, bdate, creditcardnumber, cardexpirationdate, cardcvv, cardzipcode) VALUES ('NULL', '$user_id', '$acc_no', '$type', '$balance', '$pin', '$status', '$bdate', '$ccard', '$ccexp', '$ccvv', '$cczip')"; $result = mysql_query($card_sql); if ($result) { echo $msg_ok; } else { echo mysql_error(); } ?>
Aidez-moi à voir si celui-ci (le code ci-dessus corrigé) est correcte sinon corrigez-moi svp. ???!!!

ViPHP
xTG
ViPHP | 7331 Messages

02 juil. 2015, 09:22

Non, MySQL n'est plus maintenu.
Cela veut dire que ses failles de sécurités sont béantes sur ton hébergeur.
Alors que Mysqli est lui maintenu et donc normalement à jour sur ton hébergement.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

02 juil. 2015, 09:36

Non, MySQL n'est plus maintenu.
Cela veut dire que ses failles de sécurités sont béantes sur ton hébergeur.
Alors que Mysqli est lui maintenu et donc normalement à jour sur ton hébergement.
Euh... il faut peut être préciser :
- le serveur de bdd MySQL est toujours maintenu par Oracle
- c'est l'interface "ext/mysql" de PHP avec les fonctions mysql_* qui est en fin de vie et retiré des versions récentes de PHP, mais encore maintenu pour les patchs de sécurité.
- Il n'y a donc pas de raison qu'il y ait des failles de sécurités béantes à date, en revanche, il est indispensable de passer à ext/mysqli ou PDO si on veut que son code fonctionne toujours dans les mois et années à venir.
Quand tout le reste a échoué, lisez le mode d'emploi...

ViPHP
xTG
ViPHP | 7331 Messages

02 juil. 2015, 13:34

Tu as raison de préciser.
Par contre j'en apprend, il me semblait qu'elle ne recevait plus aucun patch. :)