1366 Incorrect integer value

Résolu/Fermé
LaChaux78 Messages postés 583 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 14 janvier 2025 - 20 mars 2023 à 07:53
LaChaux78 Messages postés 583 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 14 janvier 2025 - 22 mars 2023 à 19:53

Bonjour, je souhaiterai comprendre pourquoi j'ai cette erreur lorsque je veux faire une modification d'un adhérent.

Erreur ! SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'idpers' at row 1

Je crois comprendre que ça concerne le type d'une colonne de ma BDD mais je ne vois vraiment pas.

Merci de vos réponses voici la table concernée.

DROP TABLE IF EXISTS `cdc_adherer`;
CREATE TABLE IF NOT EXISTS `cdc_adherer` (
  `idpers` int NOT NULL COMMENT 'ID de la personne',
  `idpaie` int NOT NULL COMMENT 'ID du paiement',
  `idclas` int NOT NULL COMMENT 'ID de la classe',
  `idpup` int NOT NULL COMMENT 'ID du pupitre',
  `annee` int NOT NULL COMMENT 'Année de cotisation',
  `ddebut` date NOT NULL COMMENT 'Date de début d''adhésion de l''adhérent',
  `dfin` date NOT NULL COMMENT 'Date de démission de l''adhérent',
  `montant` decimal(6,2) NOT NULL COMMENT 'Montant annuel payé',
  `facture` tinyint(1) NOT NULL COMMENT 'Mets à 1 facture à dispo pour les membres',
  PRIMARY KEY (`idpers`,`idpaie`,`idclas`,`idpup`,`annee`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Table de relation : adhérents - adhérer';

7 réponses

yg_be Messages postés 23440 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 24 janvier 2025 Ambassadeur 1 559
20 mars 2023 à 08:21

bonjour,

le message d'erreur n'est-il pas provoqué par une commande "INSERT"?

0
LaChaux78 Messages postés 583 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 14 janvier 2025 32
20 mars 2023 à 08:43

Bonjour hé oui tu as raison je n'avais pas essayé de faire un INSERT je m'étais axé pour faire un UPDATE sur un membre existant j'ai la même erreur je vais regarder si je trouve la faille.

0
yg_be Messages postés 23440 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 24 janvier 2025 1 559
20 mars 2023 à 10:23

Montre-nous ta commande UPDATE.  Tu essaies probablement erronément de modifier la colonne idpers.

0
jordane45 Messages postés 38392 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 janvier 2025 4 731
20 mars 2023 à 09:18

Bonjour,

J'ai l'impression que tu as oublié de mettre en auto-incrément ta variable idpers


0
LaChaux78 Messages postés 583 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 14 janvier 2025 32
20 mars 2023 à 13:52

Bonjour, non en fait il n'y a pas d'auto incrémente car c'est une table qui me permet d'enregistrer éventuellement un membre qui a déjà été enregistré dans le passé afin d'éviter les doublons. Pour les tous nouveaux adhérent il y a une table dédié à eux "cdc_personnes" avec id_pers en auto_incrément.

Voici la partie du code qui me permet de faire les INSERT et les UPDATE je n'ai pas mis le formulaire afin d'éviter de d'alourdir la page.

<?php
$index = 2;                           
require("libs/init.php");              
require("libs/class.liste.php");      
$debug = 0;

// Création des listes déroulantes à utiliser
// variable = new liste("nom de la liste", "nom du controle", "style"); ici, controle = "" => on laisse le nom par défaut (ex: idpers)
$LDpers = new liste("libs/personnes","","oblig");  	// Liste des personnes
$LDpaie = new liste("libs/paiements","","oblig");  	// Liste des paiements possibles
$LDclas = new liste("libs/classes","","oblig");    	// Liste des classes de musiciens
$LDpup 	= new liste("libs/pupitres","","");    		// Liste des pupitres par musiciens

$LDpaie->onchange = "payer()";	// Lors du choix d'une cotisation indiquer le prix dans la zone de saisie

$action 	= 'new'; 										// Action par défaut: nouvelle adhésion
$a 			= !empty($_GET['a']) ? $_GET['a'] : NULL; 		// Récupérer dans $a la valeur du paramètre s'il y en a un
$submit 	= !empty($_POST['submit']) ? $_POST['submit'] : NULL;
$haction 	= !empty($_POST['haction']) ? $_POST['haction'] : NULL;

$idpers 	= !empty($_POST['idpers']) ? $_POST['idpers'] : '';
$idpaie 	= !empty($_POST['idpaie']) ? $_POST['idpaie'] : '';
$idclas 	= !empty($_POST['idclas']) ? $_POST['idclas'] : '';
$idpup 		= !empty($_POST['idpup']) ? $_POST['idpup'] : '';
$annee 		= !empty($_POST['annee']) ? $_POST['annee'] : '';
$ddebut 	= !empty($_POST['ddebut']) ? dw2m($_POST['ddebut']) : '';
$dfin 		= !empty($_POST['dfin']) ? dw2m($_POST['dfin']) : '';
$montant 	= !empty($_POST['montant']) ? $_POST['montant'] : '';
$facture 	= !empty($_POST['facture']) ? $_POST['facture'] : '';
$oldid 		= !empty($_POST['oldid']) ? $_POST['oldid'] : '';

switch($a) {
	case 'new': $action = 'new';  break;  // Si sais_adherer.php?a=new il faut ajouter
	case 'ls' : $action = 'list'; break;  // Si sais_adherer.php?a=ls il faut lister les adhésions
	case 'mod': $action = 'mod';  break;  // Si sais_adherer.php?a=mod il faut modifier une adhésion
	default   : $action = 'new';  break;  // Si sais_adherer.php sans paramètre, il faut ajouter par défaut
}

// Initialisation de variables diverses
$today = date("d/m/Y"); // Date du jour (proposée par défaut)
$quant = date("z"); // Quantième du jour dans l'année. NB: le 01/09/AAAAA est le 245è jour de l'année
// Si l'on est avant le 01/09, l'année d'adhésion ($aadh) est l'année précédente, sinon c'est l'année courante
//if($quant < 245) { $aadh = date("Y")-1; } else { $aadh = date("Y"); }
$aadh = $quant < 245 ? date("Y")-1 : date("Y");

// Instructions à réaliser s'il faut ajouter un enregistrement
if($submit) {

	switch($haction) {
		case 'new':
			// Construction de la requete d'ajout
			$sql = "INSERT INTO cdc_adherer (idpers, idpaie, idclas, idpup, annee, ddebut, dfin, montant, facture)
						VALUES(:idpers, :idpaie, :idclas, :idpup, :annee, :ddebut, :dfin, :montant, :facture)";
			$datas = array('idpers' => $idpers, 'idpaie' => $idpaie, 'idclas' => $idclas, 'idpup' => $idpup, 'annee' => $annee, 'ddebut' => $ddebut, 'dfin' => $dfin, 'montant' => $montant, 'facture' => $facture);
			$result = executeQuery($sql,$datas);
			$typenr = "enregistrée";
			$reqaj = $sql; 
			
			$sql = "SELECT idpers,nom,prenom FROM cdc_personnes WHERE idpers = :idpers";
			$datas = array('idpers' => $idpers);
			$result = executeQuery($sql,$datas);
			$donnees = $result->fetch();
			$success = "<span class='success'>L'adhésion de - ".trim("$donnees->nom $donnees->prenom")." - pour l'année $annee a été $typenr.</span>";
			break;

		case 'mod':
			// Constrution de la condition de modification ($oi = old ID)
			$oi = explode(",", $oldid); // Tableau des identifiants
			$condition = "WHERE (idpers='".$oi[0]."' AND idpaie='".$oi[1]."' AND idclas='".$oi[2]."' AND idpup='".$oi[3]."' AND annee='".$oi[4]."')";
			// Construction de la requete de modification
			$sql = "UPDATE cdc_adherer SET idpers = :idpers, idpaie = :idpaie, idclas = :idclas, idpup = :idpup, annee = :annee, ddebut = :ddebut, dfin = :dfin, montant = :montant, facture = :facture $condition";
			$datas = array('idpers' => $idpers, 'idpaie' => $idpaie, 'idclas' => $idclas, 'idpup' => $idpup, 'annee' => $annee, 'ddebut' => $ddebut, 'dfin' => $dfin, 'montant' => $montant, 'facture' => $facture);
			$result = executeQuery($sql,$datas);
			$typenr = "modififiée";
			$reqmod = $sql;
			$idpers = $oi[0];  // Personne initiale modifiée
			
			$sql = "SELECT idpers,nom,prenom FROM cdc_personnes WHERE idpers = :idpers";
			$datas = array('idpers' => $idpers);
			$result = executeQuery($sql,$datas);
			$donnees = $result->fetch();
			$success = "<span class='success'>L'adhésion de - ".trim("$donnees->nom $donnees->prenom")." - pour l'année $annee a été $typenr.</span>";
			break;
	}
}

// Diverses initialisation selon l'action à accomplir
switch($action) {
	case 'new':    // Si appel avec sais_adherer.php?a=new
		$title   	= "Saisie d'une Adhésion";       // Mot à écrire dans le titre
		$btsub   	= "Enregistrer";                 // Mot à écrire sur le bouton submit
		$idpers  	= "";                            // Personne à choisir
		$idpaie  	= "";                            // Paiement à choisir
		$idclas  	= "";                            // Classe à choisir
		$idpup  	= "";                            // Pupitre à choisir
		$annee   	= $aadh;                         // Année d'adhésion par défaut (calculée plus haut)
		$ddebut  	= $today;                        // Date du jour (calculée plus haut)
		$dfin    	= "31/08/".($aadh+1);            // Date de fin d'adhésion (calculée au 31/08/AAAA)
		$montant 	= "";
		$facture 	= "";
		break;

	case 'list':  // Si appel avec sais_adherer.php?a=ls
		$title  	= "Liste des Adhésions";
		break;

	case 'mod':   // Si appel avec sais_adherer.php?a=mod&idpers=57&idpaie=1&idclas=1&idpup=7
		$title  	= "Modification d'une Adhésion";
		$btsub  	= "Modifier";
		// Récupérer l'identifiant de la relation
		$idpers 	= $_GET['idpers'];               // Récupérer l'identifiant de la personne
		$idpaie 	= $_GET['idpaie'];               // Récupérer l'identifiant du paiement
		$idclas 	= $_GET['idclas'];               // Récupérer l'identifiant de la classe
		$idpup 		= $_GET['idpup'];                // Récupérer l'identifiant du pupitre
		$annee  	= $_GET['annee'];                // Récupérer l'année d'adhésion
		$oldid  	= $_GET['oldid'];                // Récupérer l'ancien identifiant (l'identifiant original)
		// requete pour aller chercher l'enregistrement dans cdc_Adherer
		$sql  		= "SELECT * FROM cdc_adherer
						WHERE idpers = :idpers
						AND idpaie = :idpaie
						AND idclas = :idclas
						AND idpup = :idpup
						AND annee = :annee";
		$datas 		= array('idpers' => $idpers, 'idpaie' => $idpaie, 'idclas' => $idclas, 'idpup' => $idpup, 'annee' => $annee);
		$result 	= executeQuery($sql,$datas);
		$donnees 	= $result->fetch();
		// Récupérer les autres valeurs
		$aadh    	= $annee;
		$ddebut  	= dm2w($donnees->ddebut);
		$dfin    	= dm2w($donnees->dfin);
		$montant 	= $donnees->montant;
		$facture 	= $donnees->facture;
		break;
}
?>

et donc lors d'un INSERT

Erreur ! SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'idpers' at row 1

Je vous remercie

0
jordane45 Messages postés 38392 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 janvier 2025 4 731
20 mars 2023 à 15:24

Le message d'erreur t'indique que tu essais d'envoyer une valeur "vide" dans le champ idpers d'une de tes requêtes ( ou les deux...)

A toi de regarder les valeurs transmises dans tes requêtes et de trouver pourquoi cette valeur est vide alors qu'elle ne devrait pas visiblement,

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LaChaux78 Messages postés 583 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 14 janvier 2025 32
20 mars 2023 à 18:16

Oui j'ai vu ou cela ne tourne pas rond je vais essayé de voir si j'arrive à résoudre ce problème. Il y a bien une valeur qui reste vide alors qu'elle ne devrait pas. C'est une valeur qui devrait être pré remplie.

0
LaChaux78 Messages postés 583 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 14 janvier 2025 32
21 mars 2023 à 22:56

Bonjour, malheureusement je n'ai pas trouvé la solution à mon problème. En effet j'ai un code PHP pour écrire un tableau javascript qui contiendra les tarifs des cotisations pour présaisies. Lorsque je sélectionne une valeur d'une liste la valeur des cotisations devrait être pré saisie malheureusement elle reste vide. Je vous remercie de votre aide.

<script language="javascript" type="text/javascript">
<?php
$instr = "var cotis = new Array('0'"; // Début de l'initialisation de la variable tableau javascript

// requete pour aller chercher les autres valeurs et finir le tableau
$sql  = "SELECT montant FROM cdc_paiements ORDER BY idpaie";
$result = executeQuery($sql);

	while ($donnees = $result->fetch()) { $instr .= ", '".$result->montant."'"; }
	$instr .= ")";
	echo $instr; // donne => var cotis = new Array('0', '5.00', '150.00', '0.00');
?>
</script>

Mais je pense que mon problème vient du fichier "class.liste.php" notamment de la fonction write mais j'en suis pas certain non plus. Cette fonction dont tu m'a résolu d'autres soucis concernant mes listes déroulantes et peut-être que c'est lié?

    function write($indice="",$text=0) {
        $champs = explode(",",$this->champs); $idctrl = $champs[0];
        if($this->ctrlname) { $idctrl = $this->ctrlname; }
        $style = !empty($this->style) ? " class='".$this->style."'": "";
        $onchange = !empty($this->onchange) ? " onchange='javascript:".$this->onchange."' ": "";
            
        if(!empty($this->sql)) {
            $req = executeQuery($this->sql);
            $resultat = $req->fetchAll();
            //var_dump(debug_backtrace());
        } else {
            echo "Erreur ! La requête est vide !";
            $this->debug();
		}
            
        $this->nbrecs = !empty($resultat) ? count($resultat) : 0;
        $textonly = $text && $indice ?  1 : 0; 

        if(!$textonly) {
            echo "<select name=\"".$idctrl."\"$this->option".$style.$onchange.">";
            if(!$this->option) {
                if($this->texte) { 
                    echo "<option value=\"null\">$this->texte"; 
                }
            }
        }
		
        if(!empty($resultat)) {
            foreach($resultat as $donnees) {
				if (empty($indice)) {
                    $idnum = 1;
                    $thisrec = 0;
                } else {
                    $indice = !empty($indice) ? intVal($indice)  : 0 ; //Convertir une chaîne en un entier.
                    $idnum = ($indice/1) ? 0 : 1;
                    $thisrec = $indice == $donnees->{$champs[$idnum]} ? 1 : 0 ;
                }
                if (count($champs) > 2) {
                    $c1 = !empty($champs[1]) ? ($champs[1]) : NULL;
                    $texte = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; $n = 2;
                    if($textonly && $thisrec) { $buffer = $texte; }
                    
                    while(count($champs) > $n) {
                        $cn = !empty($champs[$n]) ? ($champs[$n]) : NULL;
                        if($textonly && $thisrec)   { $buffer .= !empty($cn) && !empty($donnees->$cn) ? $donnees->$cn  : ""; $n++; }
                        else                        { $texte  .= !empty($cn) && !empty($donnees->$cn) ? " ". $donnees->$cn  : ""; $n++; }
                    }
                    
                } else {
                    $c1 = !empty($champs[1]) ? ($champs[1]) : NULL;
                    if($textonly && $thisrec)   { $buffer   = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; }
                    else                        { $texte    = !empty($c1) && !empty($donnees->$c1) ? $donnees->$c1 : ""; }
                }
                if($this->tronque) {
                    $lg = $this->tronque-9;     // 9 = longueur de "... / ..."
                    if(($lg % 2) != 0) { $lg++; }
                    if(strlen($texte) > $lg)    { $texte = substr($texte,0,$lg/2) . "... / ..." . substr($texte,strlen($texte)-($lg/2),$lg/2); }
                    if(strlen($buffer) > $lg)   { $buffer = substr($buffer,0,$lg/2) . "... / ..." . substr($buffer,strlen($buffer)-($lg/2),$lg/2); }
                }
               if(!$textonly) {
                    echo "<option value=\"".$donnees->{$champs[0]}."\"";
                    if($thisrec) { echo " selected"; }
                    echo ">".$texte;
               }
			}
        }
          if($textonly) { echo $buffer;        }
          else          { echo "</select>\n";  }
     }
0
jordane45 Messages postés 38392 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 janvier 2025 4 731
21 mars 2023 à 23:44

Là comme ça, je ne vois pas le rapport avec le souci initial de cette question...

Avant tout, il faudrait déterminer si le message d'erreur apparaît lorsque tu es dans le car d'un insert ou dans le cas d'un update (ou les deux ?) ?

Ensuite, il faut essayer de comprendre pourquoi cette variable est vide (idpers).

Pour ça, il faudrait regarder le code source généré de ta page afin de voir si la variable en question est bien présente dans le formulaire que tu submit.

(N'hésite pas à nous partager le code dource du formulaire (code source de la page générée)

0
LaChaux78 Messages postés 583 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 14 janvier 2025 32
22 mars 2023 à 19:53

Bonjour je vais clore cette discution et recréer un autre sujet car il y a du nouveau de ce fait le rapport initial et maintenant a changé.

Je vous remercie.

0