Requête SQL : Valeur enregistrée dans la table : 0 alors que j'attends : NULL...
Résolu
Recoh
Messages postés
36
Date d'inscription
Statut
Membre
Dernière intervention
-
Recoh Messages postés 36 Date d'inscription Statut Membre Dernière intervention -
Recoh Messages postés 36 Date d'inscription Statut Membre Dernière intervention -
J'ai construit une page de formulaire de mise-à-jour de la base de données. J'essaye d'obtenir une valeur NULL mais à la résolution de ma requête, cela affiche un beau zéro ! J'ai testé la requête SQL, via phpmyadmin, et elle fonctionne bien avec un NULL comme voulu, mais dès que je l'exécute par php, la valeur 0 se substitue à la valeur NULL.
J'ai un retour dans la page de résultat qui affiche bien que sur la variable en question
Donc, je pense que c'est au moment où php remplace la valeur, qu'il comprend et renseigne un 0 dans la requête.
Partie du formulaire concerné :
Script php (avant le html), cela concerne uniquement la valeur
J'ai essayé un
J'ai un retour dans la page de résultat qui affiche bien que sur la variable en question
NULLest décrit.
Donc, je pense que c'est au moment où php remplace la valeur, qu'il comprend et renseigne un 0 dans la requête.
Partie du formulaire concerné :
<select name="menu"> <option value="NULL">aucun</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option>
Script php (avant le html), cela concerne uniquement la valeur
:menude la requête SQL :
<?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); try{ $bdd =new PDO('mysql:host=sql.free.fr; XXXXXXXX); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $sql = 'UPDATE produits SET label = :label, description = :description, prix = :prix, menu = :menu WHERE reference = :ref'; $sql_select = 'SELECT * FROM produits WHERE reference = :ref'; $requete = $bdd->prepare($sql); $requete->bindParam(':label',$aa); $requete->bindParam(':description',$cc); $requete->bindParam(':prix',$bb); $requete->bindParam(':menu',$dd); $requete->bindParam(':ref',$ee); $datas = $aa = htmlspecialchars($_POST['label']); $datas = $bb = htmlspecialchars($_POST['prix']); $datas = $cc = htmlspecialchars($_POST['description']); $datas = $dd = ($_POST['menu']); $datas = $ee = ($_POST['reference']); $requete->execute(); $requete = $bdd->prepare($sql_select); $requete->bindParam(':ref',$ee); $requete->execute(); while ($row = $requete->fetch()) { } $requete = null; $bdd = null; } catch (PDOException $e) { echo 'Erreur : ',$e->getMessage(),'<br />'; die(); } ?>
J'ai essayé un
if, un
do...while, un
whileet essayé un
CASE...THENdans la requête SQL, alors qu'elle fonctionne mais sans trouver la bonne syntaxe... J'ai juste remarqué que la variable
NULLsans les
's'enregistre bien comme NULL dans ma table alors qu'avec
'NULL', elle enregistre un 0. Je n'arrive pas à voir à quel moment les
'sont rajoutés...
A voir également:
- Requête SQL : Valeur enregistrée dans la table : 0 alors que j'attends : NULL...
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
- Jointure sql ✓ - Forum MySQL
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
3 réponses
J'ai modifié la colonne menu de ma table pour passer de INT(1) à TINYTEXT(4) mais le résultat est le même via le script php (j'ai laissé coché "NULL" dans les caractéristiques de la colonne menu) : 0 !
Bonjour,
Ne pas confondre la valeur "NULL" qui est du texte ( et sera remplacé par un 0 si ton champ est de type numerique ( INT, BIGINT .. )
et la valeur NULL qui est bien.. la valeur NULL...
Donc, pour éviter les soucis
Dans ton html
Et côté PHP :
Un peu de lecture au passage :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
.
Ne pas confondre la valeur "NULL" qui est du texte ( et sera remplacé par un 0 si ton champ est de type numerique ( INT, BIGINT .. )
et la valeur NULL qui est bien.. la valeur NULL...
Donc, pour éviter les soucis
Dans ton html
<select name="menu"> <option value="">aucun</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select>
Et côté PHP :
<?php //---------------------------------------------------------------------------------------// //affichage des erreurs PHP //---------------------------------------------------------------------------------------// error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //---------------------------------------------------------------------------------------// //connexion à la bdd // Que je placerai dans un fichier à part et que tu pourrais ensuite // inclure dans tes pages lorsque tu en as besoin //---------------------------------------------------------------------------------------// try{ $bdd =new PDO('mysql:host=sql.free.fr'; XXXXXXXX); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch (PDOException $e) { echo 'Erreur : ',$e->getMessage(),'<br />'; die(); } //---------------------------------------------------------------------------------------// // récupération PROPRE des variables AVANT de les utiliser // et on nomme ses variables intelligemment pour pouvoir les retrouver facilement.. // et la fonction htmlspecialchars ne s'utilise QUE POUR de l'AFFICHAGE .. JAMAIS pour l'enregistrement ! //---------------------------------------------------------------------------------------// $label = !empty($_POST['label']) ? $_POST['label'] : NULL; $prix = !empty($_POST['prix']) ? $_POST['prix'] : NULL; $description = !empty($_POST['description']) ? $_POST['description'] : NULL; $menu = !empty($_POST['menu']) ? $_POST['menu'] : NULL; $reference = !empty($_POST['reference']) ? $_POST['reference'] : NULL; try{ //update produits : $sql = 'UPDATE produits SET label = :label , description = :description , prix = :prix , menu = :menu WHERE reference = :ref'; $requete = $bdd->prepare($sql); $requete->bindParam(':label',$label); $requete->bindParam(':description',$description); $requete->bindParam(':prix',$prix); $requete->bindParam(':menu',$menu); $requete->bindParam(':ref',$ref); $requete->execute(); } catch (PDOException $e) { echo 'Erreur : ',$e->getMessage(),'<br />'; die(); } //select try{ $sql = 'SELECT * FROM produits WHERE reference = :ref'; $requete = $bdd->prepare($sql); $requete->bindParam(':ref',$ref); $requete->execute(); $row = $requete->fetchAll(); // on stocke le resultat dans un array } catch (PDOException $e) { echo 'Erreur : ',$e->getMessage(),'<br />'; die(); }
Un peu de lecture au passage :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
.
C'est parfait ! J'ai pas pensé au "!" ...
Merci beaucoup, j'ai plusieurs livres sur php, mysql, etc., dommage qu'ils ne traitent pas du PDO en profondeur mais je vais m'en trouver un.
Je peaufine déjà ce que j'ai prévu avec ce petit site et je fais le point sur la sécurisation y des échanges avec sql.
Merci encore, tu vois qu'on peut faire un bond de 10 ans en avant !!
Bientôt php 7, 8...
:)
PS : J'hésite vraiment à utiliser mysqli_ puisque j'ai déjà commencé à utiliser PDO. Peut-être aurais-je dû commencer par mysqli_ ?
Merci beaucoup, j'ai plusieurs livres sur php, mysql, etc., dommage qu'ils ne traitent pas du PDO en profondeur mais je vais m'en trouver un.
Je peaufine déjà ce que j'ai prévu avec ce petit site et je fais le point sur la sécurisation y des échanges avec sql.
Merci encore, tu vois qu'on peut faire un bond de 10 ans en avant !!
Bientôt php 7, 8...
:)
PS : J'hésite vraiment à utiliser mysqli_ puisque j'ai déjà commencé à utiliser PDO. Peut-être aurais-je dû commencer par mysqli_ ?