IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requête UPDATE depuis un formulaire


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    retraité de l'informatique de gestion
    Inscrit en
    Mars 2018
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité de l'informatique de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2018
    Messages : 225
    Par défaut Requête UPDATE depuis un formulaire
    Bonjour à tous et bonnes fêtes de fin d'année

    j'ai un probleme quand je lance une requete UPDATE depuis mon formulaire. Voila le texte qui s'affiche :

    "problème avec la requète UPDATE inscr SET inscr_nomprenom='PALISSON ALAIN', inscr_adresse='13 rue isabey', inscr_codepostal='54425', inscr_ville='NANCY',inscr_naissance='28/06/1947',inscr_mail='alain@gmail.com',inscr_mp='474875' WHERE inscr_num=73;"

    Tous les champs sont au format texte dans ma table MYSQL ainsi que dans mon formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if(isset($_POST["nomprenom"]))
    	{
    		$le_nomprenom = addslashes($_POST["nomprenom"]);
    		$l_adresse = addslashes($_POST["adresse"]);
    		$le_codepostal = addslashes($_POST["codepostal"]);
    		$la_ville = addslashes($_POST["ville"]);
    		$la_naissance = $_POST["date_n"];
    		$le_mail = $_POST["mail_inscr"];
    		$le_mp = addslashes($_POST["mp_inscr"]);
     
    		$requete = "UPDATE inscr SET inscr_nomprenom='".$le_nomprenom."', inscr_adresse='".$l_adresse."', inscr_codepostal='".$le_codepostal."', 
    		inscr_ville='".$la_ville."',inscr_naissance='".$la_naissance."',inscr_mail='".$le_mail."',inscr_mp='".$le_mp."' WHERE inscr_num=".$_SESSION["utilisateur"].";";
     
    		$retours = mysqli_query($liaison, $requete) or die ("problème avec la requète ".$requete);
    		$modif = mysqli_affected_rows($liaison);
     
    	}
    et mon formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <div id="message" style="width: 620px; height: 36px;"></div>
    				<form id="compte" name="compte" method="post" action="compte.php">
    					<table id="compte" name="compte" method="post" action="compte.php" style="width: 120%;margin-left:20px;" text-align="center">
    						<tr>
    							<td style="width: 350px; height: 5px;"><strong>Nom et prénom de l'adhérent</strong></td>
    							<td class="input" style="height: 5px">
    								<input type="text" name="nomprenom" id="nomprenom" maxlength="50" class="input_form" value='<?php echo $le_nomprenom; ?>' onClick="saisie('Nom et prénom de l'adhérent',this.id)" 
    								onMouseOut="retablir('Nom et prénom de l'adhérent',this.id)" onblur="mev('Nom et prénom de l adhérent',this.id)"  onChange="javascript:this.value=this.value.toUpperCase();etat();" style="height: 25px" />
    							</td>
    						</tr>
    						<tr>
    							<td style="width: 350px; height: 5px;"><strong>Adresse</strong></td>
    							<td class="input" style="height: 5px">
    								<input type="text" name="adresse" id="adresse" maxlength="100" class="input_form" value='<?php echo $l_adresse; ?>' onClick="saisie('Votre adresse',this.id)" 
    								onMouseOut="retablir('Votre adresse',this.id)" onblur="mev('Votre adresse',this.id)" onChange="etat();" style="height: 25px" />
    							</td>
    						</tr>
    						<tr>
    							<td style="width: 350px; height: 5px;"><strong>Code postal</strong></td>
    							<td class="input" style="height: 5px">
    								<input type="text" name="codepostal" id="codepostal" maxlength="5" class="input_form" value='<?php echo $le_codepostal; ?>' onClick="saisie('Votre code postal',this.id)" 
    								onMouseOut="retablir('Votre code postal',this.id)" onblur="mev('Votre code postal',this.id)" onChange="etat();" style="height: 25px" />
    							</td>
    						</tr>
    						<tr>
    							<td style="width: 350px; height: 5px;"><strong>Ville<strong></td>
    							<td class="input" style="height: 5px">
    								<input type="text" name="ville" id="ville" maxlength="50" class="input_form" value='<?php echo $la_ville; ?>' onClick="saisie('Votre ville',this.id)" 
    								onMouseOut="retablir('Votre ville',this.id)" onblur="mev('Votre ville',this.id)"  onChange="javascript:this.value=this.value.toUpperCase(); etat();" style="height: 25px" />
    							</td>
    						</tr>
    						<tr>
    							<td style="width: 350px; height: 5px;"><strong>Date naissance (Ex: 28/01/2000)</strong></td>
    							<td class="input" style="height: 5px">
    								<input type="text" name="date_n" id="date_n" maxlength="10" class="input_form" value='<?php echo $la_naissance; ?>' onClick="saisie('date de naissance',this.id)" 
    								onMouseOut="retablir('date de naissance',this.id)" onblur="mev('date de naissance',this.id)" onChange="etat();" style="height: 25px" />
    							</td>
    						</tr>
    						<tr>
    							<td style="width: 350px; height: 5px;"><strong>L'Email</strong></td>
    							<td class="input" style="height: 5px">
    								<input type="text" name="mail_inscr" id="mail" maxlength="50" class="input_form" value='<?php echo $le_mail; ?>' onClick="saisie('Votre mail',this.id)" 
    								onMouseOut="retablir('Votre mail',this.id)" onblur="mev('Votre mail',this.id)" onChange="etat();" style="height: 25px" />
    							</td>
    						</tr>
     
    						<tr>
    							<td style="width: 350px; height: 5px;"><strong>Nouveau mot de passe si besoin</strong></td>
    							<td class="input" style="height: 5px">
    								<input type="password" name="mp_inscr" id="mp_inscr" maxlength="10" class="input_form" value="<?php echo $le_mp; ?>" onClick="saisie('Nouveau MP',this.id)" onChange="etat();"
    								onMouseOut="retablir('Nouveau MP',this.id)" onblur="mev('Nouveaur MP',this.id)" style="height: 25px" />
    							</td>
    						</tr>
     
    					</table>
    voila ma table MYSQL

    Nom : Snap 2022-12-24 at 14.30.04.jpg
Affichages : 223
Taille : 64,4 Ko
    Nom : Snap 2022-12-24 at 14.34.01.jpg
Affichages : 221
Taille : 9,8 Ko

    merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 343
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 343
    Billets dans le blog
    17
    Par défaut
    Il faut utiliser mysqli_error() pour connaître le motif de l'erreur => https://www.php.net/manual/en/mysqli.error.php
    Tu ne montres pas la définition de toute ta table, notamment la colonne inscr_naissance pour laquelle tu envoies du JJ/MM/AAAA et qui attend peut-être du AAAA-MM-JJ
    Il faut échapper les valeurs avec mysqli_real_escape_string() et non addslashes()

    Pourquoi utiliser mysqli ? PDO est la référence d'accès aux BdD => https://www.php.net/pdo

  3. #3
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 696
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 696
    Par défaut
    regarder le message d'erreur complet avec cela :
    https://www.php.net/manual/fr/mysqli.error.php

  4. #4
    Membre éclairé
    Homme Profil pro
    retraité de l'informatique de gestion
    Inscrit en
    Mars 2018
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité de l'informatique de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2018
    Messages : 225
    Par défaut
    merci pour la reponse

    c'est effectivement la date qui bloque car si je la retire, la requete passe bien: Je te mets ci-dessous la structure de ma table entière


    1 inscr_num Primaire int Non Aucun(e) AUTO_INCREMENT Modifier Modifier Supprimer Supprimer
    2 inscr_nomprenom varchar(25) utf8mb4_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    3 inscr_adresse varchar(28) utf8mb4_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    4 inscr_codepostal varchar(5) utf8mb4_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    5 inscr_ville varchar(22) utf8mb4_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    6 inscr_mail varchar(33) utf8mb4_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    7 inscr_section varchar(6) utf8mb4_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    8 inscr_sexe varchar(6) utf8mb4_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    9 inscr_date varchar(10) utf8mb4_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    10 inscr_tel_adh varchar(14) utf8mb3_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    11 inscr_repres_legal varchar(4) utf8mb3_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    12 inscr_nom_repres varchar(22) utf8mb3_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    13 inscr_tel_repres varchar(14) utf8mb3_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    14 inscr_ceinture varchar(13) utf8mb3_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    15 inscr_mp varchar(10) utf8mb4_general_ci Oui NULL Modifier Modifier Supprimer Supprimer
    16 inscr_passeport varchar(3) utf8mb3_general_ci Oui NULL Modifier Modifier Supprimer Supprimer

    la date est en varchar(10) est ce bon ? car au format 'date' j'ai le format anglais qui ne facilite pas la saisie . Il faudra alors transformer le format à la sasie mais là je ne sais pas faire

    Joyeux noël à tous

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 343
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 343
    Billets dans le blog
    17
    Par défaut
    la date est en varchar(10) est ce bon ?
    En base une date devrait être dans une colonne de type DATE, sinon tu te prives de toutes les fonctions de manipulation de dates, et ta base sera potentiellement incorrecte (ex. 29/02/2023 une année non bissextile).

    car au format 'date' j'ai le format anglais qui ne facilite pas la saisie .
    Le format anglais est aussi JJ/MM/AAAA, le format US est MM/JJ/AAAA
    Le format AAAA-MM-JJ est un format informatique bien utile puisqu'il permet de trier facilement des lignes selon une relation d'ordre basique.

    Il faudra alors transformer le format à la sasie mais là je ne sais pas faire
    Un <input type="date"> devrait t'aider => https://developer.mozilla.org/fr/doc...ent/input/date

    Et attention, tu mixes les charsets/interclassements (utf8mb3_general_ci et utf8mb4_general_ci)
    Harmonise tout autrement tu auras des problèmes => utf8mb4 / utf8mb4_0900_ai_ci

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par défaut Pour en finir avec le varchar systématique...
    Je ne sais pas si la faute en incombe aux écoles d'informatique, mais je constate que de plus en plus souvent, les développeurs utilisent systématiquement du varchar, là ou du char fixe serait requis.

    Par exemple, le code postal, en France c'est toujours 5 caractères.
    Donc utiliser du caractère variable a non seulement aucun intérêt, mais en plus il présente les inconvénients inhérents au varchar
    • octets supplémentaires (1 à 3 selon le SGBD et la longueur maximale de la donnée)
    • nécessité d'alignement des données sur une longueur fixe avant certaines opérations (order by, distinct, group by, partition by)
    • déplacement des lignes dans les pages data et index en cas de modification de la longueur effective (ce qui ne sera pas le cas ici, puisque c'est toujours 5 caractères). Ce déplacement prend du temps et provoque une fragmentation des pages au détriment des performances bien sûr


    Bref, ce n'est pas pour rien qu'il existe deux types, le char fixe et le varchar.
    Il ne faut pas choisir le varchar systématiquement, mais le type adapté au contenu.
    D'une façon générale, du varchar sur une donnée très courte (10 ou 20 caractères) n'a guère d'intérêt.

    Par ailleurs, le sexe en varchar(6) serait avantageusement remplacé soit par un char(1) associé à une contrainte CHECK avec une liste de valeurs, soit par une FK faisant référence à une table des codes sexes.
    Egalement, une ville en varchar(28) c'est insuffisant, certaines villes nécessitent une longueur plus grande. La norme de la poste prévoit 38 caractères.
    Bien évidemment, j'abonde dans le sens de ce qui précède concernant les dates : toute date doit être stockée dans un type date !

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 343
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 343
    Billets dans le blog
    17
    Par défaut
    C'est vrai qu'avec 28 caractères il y a quelques noms de communes qui ne rentrent pas, avec 38 non plus d'ailleurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SAINT-GERMAIN-DE-TALLEVENDE-LA-LANDE-VAUMONT
    BEAUJEU-SAINT-VALLIER-PIERREJUX-ET-QUITTEUR
    MONTIGNY-MORNAY-VILLENEUVE-SUR-VINGEANNE
    ROCHE-SUR-LINOTTE-ET-SORANS-LES-CORDIERS
    SAINT-REMY-EN-BOUZEMONT-SAINT-GENEST-ET-ISSON
    SAINT-MARTIN-DE-BIENFAITE-LA-CRESSONNIÈRE
    LA VACQUERIE-ET-SAINT-MARTIN-DE-CASTRIES
    VILLERS-CHEMIN-ET-MONT-LÈS-ÉTRELLES
    SAINT-LAURENT-LES-BAINS-LAVAL-D'AURELLE
    BONNEVILLE-ET-SAINT-AVIT-DE-FUMADIÈRES
    ESCUEILLENS-ET-SAINT-JUST-DE-BÉLENGARD

Discussions similaires

  1. Enregistrement avec requête SQL depuis un formulaire.
    Par TeoJyx dans le forum VBA Access
    Réponses: 21
    Dernier message: 19/10/2012, 17h26
  2. Actualisation requête depuis code formulaire
    Par Marcopololo dans le forum IHM
    Réponses: 2
    Dernier message: 21/07/2008, 18h53
  3. lancer requête SQL depuis formulaire access
    Par Zavonen dans le forum VBA Access
    Réponses: 8
    Dernier message: 16/10/2007, 19h43
  4. [MySQL] Aide pour requete UPDATE depuis un formulaire checkbox
    Par craac dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/09/2007, 15h27
  5. Réponses: 4
    Dernier message: 24/04/2007, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo