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 - 22 mars 2023 à 19:53
7 réponses
20 mars 2023 à 08:21
bonjour,
le message d'erreur n'est-il pas provoqué par une commande "INSERT"?
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.
20 mars 2023 à 10:23
Montre-nous ta commande UPDATE. Tu essaies probablement erronément de modifier la colonne idpers.
20 mars 2023 à 09:18
Bonjour,
J'ai l'impression que tu as oublié de mettre en auto-incrément ta variable idpers
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
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,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question20 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.
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"; } }
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)
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.