Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pb Fatal error: Uncaught PDOException: SQLSTATE[23

6 mai 2021 à 20:39:19

Bonjour,

J'ai cette erreur :

Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'montant_total' cannot be null in /homepages/19/d679698744/htdocs/produits/trait_panier.php:168 Stack trace: #0 /homepages/19/d679698744/htdocs/produits/trait_panier.php(168): PDOStatement->execute(Array) #1 {main} thrown in /homepages/19/d679698744/htdocs/produits/trait_panier.php on line 168


				$statut_commande = "En cours de validation";
				$validation = "1";
				$date_commande = time();
				$req = $bdd->prepare('INSERT INTO commandes(membre_id, date_commande, montant_total, adresse_livraison, mode_paiement, statut_commande, validation) 
												VALUES(:membre_id, :date_commande, :montant_total, :adresse_livraison, :mode_paiement, :statut_commande, :validation)');
                                   
				$req->execute(array(
						'membre_id' => $_SESSION['membre_id'],
						'date_commande' => $date_commande,
						'montant_total' => $_SESSION['montant_total'],
						'adresse_livraison' => $_SESSION['livraison'],
						'mode_paiement' => $_POST['paiement'],
						'statut_commande' => $statut_commande,
						'validation' => $validation
						));

Ligne 168

'validation' => $validation

 Table SQL

-- phpMyAdmin SQL Dump
-- version 4.9.7
-- https://www.phpmyadmin.net/
--
-- Hôte : db679782776.db.1and1.com
-- Généré le : jeu. 06 mai 2021 à 18:37
-- Version du serveur :  5.5.60-0+deb7u1-log
-- Version de PHP : 7.0.33-0+deb9u10

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de données : `db679782776`
--

-- --------------------------------------------------------

--
-- Structure de la table `commandes`
--

CREATE TABLE `commandes` (
  `commande_id` int(11) NOT NULL,
  `membre_id` int(11) NOT NULL,
  `date_commande` bigint(20) NOT NULL,
  `montant_total` varchar(100) NOT NULL,
  `mode_paiement` varchar(100) NOT NULL,
  `adresse_livraison` varchar(100) NOT NULL,
  `statut_commande` varchar(100) NOT NULL,
  `validation` int(11) NOT NULL,
  `valide` int(11) NOT NULL,
  `livraison` int(11) NOT NULL,
  `numero_exp` varchar(100) NOT NULL,
  `terminer` int(11) NOT NULL,
  `code_promo` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Merci pour votre aide

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2021 à 20:46:28

Bonjour,

L'erreur est pourtant clair

Le montant totale ne peut être null.....

donc S_SESSION['montant_total'] doit être non null

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2021 à 21:24:51

Aurélien.C a écrit:

Bonjour,

L'erreur est pourtant clair

Le montant totale ne peut être null.....

donc S_SESSION['montant_total'] doit être non null


j'avais compris l'erreur mais quand le client valide, le montant n'est pas à 0 donc non nul

Pourquoi y a l'erreur alors?

  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2021 à 21:27:29

il y est forcément.

Quand affectes-tu cette variable de session ?

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2021 à 12:55:06

Aurélien.C a écrit:

il y est forcément.

Quand affectes-tu cette variable de session ?


Je ne comprends pas je viens de tester et maintenant cela fonctionne.

Bizarre non?

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2021 à 13:03:01

pas forcément, car la somme a surement été affecté pendant ta navigation et maintenant quand tu fais l'insertion, elle n'est pas null
  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2021 à 13:20:50

Aurélien.C a écrit:

pas forcément, car la somme a surement été affecté pendant ta navigation et maintenant quand tu fais l'insertion, elle n'est pas null


Comment je peux faire pour régler ce problème?

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2021 à 13:23:49

Aurélien.C a écrit:

il y est forcément.

Quand affectes-tu cette variable de session ?

quand fais-tu $_SESSION['montant_total'] = .... ?

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2021 à 13:37:29

Aurélien.C a écrit:

Aurélien.C a écrit:

il y est forcément.

Quand affectes-tu cette variable de session ?

quand fais-tu $_SESSION['montant_total'] = .... ?

Sur la page d'avant

Voici le code

						if($_SESSION['post_livraison']=='adresse_principale')
						{
							
							$cmpt1 = $cmpt - $donnees['tarif'];
							
							$totalg = $cmpt1 + $cmptcadeau + $_SESSION['montant_livraison'];
							echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Lettre suivie) <br />'; 
							if($totalg<=0)
							{
								$totalg = 0;
								echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
								$_SESSION['montant_total'] = $totalg;
							}
							else
							{
								echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT'; 
								$_SESSION['montant_total'] = $totalg;
							}
						}
						elseif($_SESSION['post_livraison']=='adresse_relais')
						{
							$cmpt1 = $cmpt - $donnees['tarif'];
							if($cmpt1 < '35.00')
							{
								$livraison = '5.95';
								$totalg = $cmpt1 + $cmptcadeau + $livraison;
								echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($livraison, 2, '.', '') . ' €HT (Mondial Relais) <br />'; 
								
								if($totalg<=0)
								{
									$totalg = 0;
									echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
									$_SESSION['montant_total'] = $totalg;
								}
								else
								{
									echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT'; 
									$_SESSION['montant_total'] = $totalg;
								}
							}
							else
							{
								$livraison = '0';
								$totalg = $cmpt1 + $cmptcadeau + $livraison;
								echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($livraison, 2, '.', '') . ' €HT (Mondial Relais) <br />';
								
								if($totalg<=0)
								{
									$totalg = 0;
									echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
									$_SESSION['montant_total'] = $totalg;
								}
								else
								{
									echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT'; 
									$_SESSION['montant_total'] = $totalg;
								}
							}
						}
						elseif($_SESSION['post_livraison']=='adresse_mainpropre')
						{
							$cmpt1 = $cmpt - $donnees['tarif'];
							$totalg = $cmpt1 + $cmptcadeau + $_SESSION['montant_livraison'];
							echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Livraison main propore) <br />'; 
							
							if($totalg<=0)
							{
								$totalg = 0;
								echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT'; 
								$_SESSION['montant_total'] = $totalg;
							}
							else
							{
								echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT'; 
								$_SESSION['montant_total'] = $totalg;
							}
						}
					}
					else
					{
						if($_SESSION['post_livraison']=='adresse_principale')
						{
							$totalg = $cmpt + $cmptcadeau + $_SESSION['montant_livraison'];
							echo 'Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Lettre suivie) <br /> Total = ' . $totalg . ' €HT'; 
							$_SESSION['montant_total'] = $totalg;
						}
						elseif($_SESSION['post_livraison']=='adresse_relais')
						{
							if($cmpt < '35.00')
							{
								$livraison = '5.95';
								$totalg = $cmpt + $cmptcadeau + $livraison;
								echo 'Livraison = ' . $livraison . ' €HT (Mondial Relais) <br /> Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
								$_SESSION['montant_total'] = $totalg;
							}
							else
							{
								$livraison = '0';
								$totalg = $cmpt + $cmptcadeau + $livraison;
								echo 'Livraison = ' . $livraison . ' €HT (Mondial Relais) <br /> Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
								$_SESSION['montant_total'] = $totalg;
							}
						}
						elseif($_SESSION['post_livraison']=='adresse_mainpropre')
						{
							$totalg = $cmpt + $cmptcadeau + $_SESSION['montant_livraison'];
							echo 'Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Livraison main propore) <br /> Total = ' . number_format($totalg, 2, '.', '') . ' €HT'; 
							$_SESSION['montant_total'] = $totalg;
						}
					}
					?>




  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2021 à 13:57:40

je vois beaucoup de répétition dans ton code.

<?php
if($_SESSION['post_livraison']=='adresse_principale')
    {
         
        $cmpt1 = $cmpt - $donnees['tarif'];
         
        $totalg = $cmpt1 + $cmptcadeau + $_SESSION['montant_livraison'];
        echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Lettre suivie) <br />';
        if($totalg<=0)
        {
            $totalg = 0;
        }
        echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
        $_SESSION['montant_total'] = $totalg;
    }
    elseif($_SESSION['post_livraison']=='adresse_relais')
    {
        $cmpt1 = $cmpt - $donnees['tarif'];
        if($cmpt1 < '35.00')
        {
            $livraison = '5.95';
            $totalg = $cmpt1 + $cmptcadeau + $livraison;
            echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($livraison, 2, '.', '') . ' €HT (Mondial Relais) <br />';
             
            if($totalg<=0)
            {
                $totalg = 0;
            }
            echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
            $_SESSION['montant_total'] = $totalg;
        }
        else
        {
            $livraison = '0';
            $totalg = $cmpt1 + $cmptcadeau + $livraison;
            echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($livraison, 2, '.', '') . ' €HT (Mondial Relais) <br />';
             
            if($totalg<=0)
            {
                $totalg = 0;
            }
            echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
            $_SESSION['montant_total'] = $totalg;
        }
    }
    elseif($_SESSION['post_livraison']=='adresse_mainpropre')
    {
        $cmpt1 = $cmpt - $donnees['tarif'];
        $totalg = $cmpt1 + $cmptcadeau + $_SESSION['montant_livraison'];
        echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Livraison main propore) <br />';
         
        if($totalg<=0)
        {
            $totalg = 0;
        }
        echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
        $_SESSION['montant_total'] = $totalg;
    }
}
else
{
    if($_SESSION['post_livraison']=='adresse_principale')
    {
        $totalg = $cmpt + $cmptcadeau + $_SESSION['montant_livraison'];
        echo 'Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Lettre suivie) <br /> Total = ' . $totalg . ' €HT';
        $_SESSION['montant_total'] = $totalg;
    }
    elseif($_SESSION['post_livraison']=='adresse_relais')
    {
        if($cmpt < '35.00')
        {
            $livraison = '5.95';
        }
        else {
            $livraison = '0';
        }
        $totalg = $cmpt + $cmptcadeau + $livraison;
        echo 'Livraison = ' . $livraison . ' €HT (Mondial Relais) <br /> Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
        $_SESSION['montant_total'] = $totalg;
    }
    elseif($_SESSION['post_livraison']=='adresse_mainpropre')
    {
        $totalg = $cmpt + $cmptcadeau + $_SESSION['montant_livraison'];
        echo 'Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Livraison main propore) <br /> Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
        $_SESSION['montant_total'] = $totalg;
    }
}
?>

que donne un "var_dump($_SESSION['montant_total']); (die('montant avant insert');" juste avant l'insertion

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2021 à 14:34:39

Aurélien.C a écrit:

je vois beaucoup de répétition dans ton code.

<?php
if($_SESSION['post_livraison']=='adresse_principale')
    {
         
        $cmpt1 = $cmpt - $donnees['tarif'];
         
        $totalg = $cmpt1 + $cmptcadeau + $_SESSION['montant_livraison'];
        echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Lettre suivie) <br />';
        if($totalg<=0)
        {
            $totalg = 0;
        }
        echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
        $_SESSION['montant_total'] = $totalg;
    }
    elseif($_SESSION['post_livraison']=='adresse_relais')
    {
        $cmpt1 = $cmpt - $donnees['tarif'];
        if($cmpt1 < '35.00')
        {
            $livraison = '5.95';
            $totalg = $cmpt1 + $cmptcadeau + $livraison;
            echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($livraison, 2, '.', '') . ' €HT (Mondial Relais) <br />';
             
            if($totalg<=0)
            {
                $totalg = 0;
            }
            echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
            $_SESSION['montant_total'] = $totalg;
        }
        else
        {
            $livraison = '0';
            $totalg = $cmpt1 + $cmptcadeau + $livraison;
            echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($livraison, 2, '.', '') . ' €HT (Mondial Relais) <br />';
             
            if($totalg<=0)
            {
                $totalg = 0;
            }
            echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
            $_SESSION['montant_total'] = $totalg;
        }
    }
    elseif($_SESSION['post_livraison']=='adresse_mainpropre')
    {
        $cmpt1 = $cmpt - $donnees['tarif'];
        $totalg = $cmpt1 + $cmptcadeau + $_SESSION['montant_livraison'];
        echo 'Promotion = -' . number_format($donnees['tarif'], 2, '.', '') . ' €HT <br />Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Livraison main propore) <br />';
         
        if($totalg<=0)
        {
            $totalg = 0;
        }
        echo 'Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
        $_SESSION['montant_total'] = $totalg;
    }
}
else
{
    if($_SESSION['post_livraison']=='adresse_principale')
    {
        $totalg = $cmpt + $cmptcadeau + $_SESSION['montant_livraison'];
        echo 'Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Lettre suivie) <br /> Total = ' . $totalg . ' €HT';
        $_SESSION['montant_total'] = $totalg;
    }
    elseif($_SESSION['post_livraison']=='adresse_relais')
    {
        if($cmpt < '35.00')
        {
            $livraison = '5.95';
        }
        else {
            $livraison = '0';
        }
        $totalg = $cmpt + $cmptcadeau + $livraison;
        echo 'Livraison = ' . $livraison . ' €HT (Mondial Relais) <br /> Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
        $_SESSION['montant_total'] = $totalg;
    }
    elseif($_SESSION['post_livraison']=='adresse_mainpropre')
    {
        $totalg = $cmpt + $cmptcadeau + $_SESSION['montant_livraison'];
        echo 'Livraison = ' . number_format($_SESSION['montant_livraison'], 2, '.', '') . ' €HT (Livraison main propore) <br /> Total = ' . number_format($totalg, 2, '.', '') . ' €HT';
        $_SESSION['montant_total'] = $totalg;
    }
}
?>

que donne un "var_dump($_SESSION['montant_total']); (die('montant avant insert');" juste avant l'insertion

Voici

float(14.75) montant avant insert

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2021 à 14:38:11

la c'est bon le montant n'est pas null

il faut investiguer pour savoir quand ton erreur apparaît

  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2021 à 14:47:56

Aurélien.C a écrit:

la c'est bon le montant n'est pas null

il faut investiguer pour savoir quand ton erreur apparaît


D'accord je vais surveiller mais si avant l'insertion je regarde si la variable n'est pas null sinon je renvoi à l'accueil cela serait utile?
  • Partager sur Facebook
  • Partager sur Twitter
8 mai 2021 à 19:30:36

Oui ou autorisé le null pour l'instant
  • Partager sur Facebook
  • Partager sur Twitter