Insert vide

voici mon code :
$ill='';
if(isset($_GET['ill']){
$ill=$_GET['ill'];
}
echo $ill;
$mysqli->query("insert into malade(nom,code,maladie) values ('$nom','$code','$ill'))or die($mysqli->error());
le insert fonctionne mais dans la case maladie c'est vide meme si echo affiche la maladie

8 réponses

Résumé de la discussion

Problème d'insertion PHP/MySQL : la valeur de la colonne maladie reste vide alors que l'écho affiche la maladie, ce qui pointe vers un problème de récupération ou de transmission de la variable ill. Des échanges répétés soulignent des erreurs liées à l'utilisation de GET ou POST, à la soumission du formulaire et à la lisibilité du code, avec des conseils sur l'échappement et les bonnes pratiques. Plusieurs réponses recommandent d'envoyer les données via POST, de vérifier l'existence et la sécurité de la variable ill (real_escape_string), puis de vérifier l'encodage et l'inclusion correcte du formulaire pour éviter les valeurs vides.

Bobot (l’IA à votre service)
  1. Modérateur
    Merci, dès tes prochains messages, d'utiliser les balises de code CORRECTEMENT.... histoire qu'on puisse avoir la coloration syntaxique et l'indentation.
    Cela fait plusieurs fois qu'on te le dit : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Ensuite.. quand on te demande le code COMPLET .. ben.. c"est COMPLET.
    Là, il manque des lignes dans ta premières pages...
    - d'où viennent les variables comme, par exemple $num_dossier; ?
    - Où se trouve le bouton submit de ton formulaire et la balise </form> ?

    Enfin bon.. ça nous permet de voir les premières erreurs que tu as commis dans ton code ...

    Dans ta première page, Tu as mis :
    require_once 'pro2.php';
    

    Et
    <form action="pro2.php" method="POST" oninput="">
    


    C'est ... ou l'un .. ou l'autre.. mais pas les deux en même temps !!
    Soit tu rediriges vers la page pro2 ( avec le "action" de ton form ) , soit tu inclus le code du fichier pro2 dans ta page (ce que fait le require ).

    PS: le "oninput" n'a rien à faire là... surtout dans une balise form.. tu peux le retirer.

    Pour résoudre ton souci,
    Je te conseille donc de conserver le require, et de remplacer ton form par
    <form action="" method="POST">
    

    1
    1. merci pour ton aide cher ami je suis débutant
      0
  2. Modérateur
    Il ne manque pas une " ?
    0
    1. il m'affiche pas d'erreur du genre
      0
  3. Modérateur
    Bonjour,

    A l'avenir, merci d'utiliser les balises de code pour poster ton code sur le forum.
    Explications disponibles ici :
    https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Ensuite, il faut récupérer "proprement" les variables avant de les utiliser.

    et enfin en mysqli .. on n'utilise plus le OR DIE ..
    A la place on écrit sous cette forme.

    
    //récupération de la variable via la forme ternaire (sorte de if/else)
    // il faut également protéger contre les caractères spéciaux qui pourraient se trouver dans la variable
    // pour ça : https://www.w3schools.com/php/func_mysqli_real_escape_string.asp
    $ill=!empty($_GET['ill']) ? $mysqli -> real_escape_string($_GET['ill']) : "";
    echo $ill;
    
    
    $sql = "insert into malade(nom,code,maladie) values ('$nom','$code','$ill')";
    if (!$mysqli -> query($sql)) {
      echo("Error : " . $mysqli -> error);
    }
    


    Je t'invite également à lire ceci ::
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
    et ça : https://www.w3schools.com/php/func_mysqli_real_escape_string.asp

    0
    1. Modérateur
      Si ça ne fonctionne toujours pas, fais nous un echo de la variable $sql et montre nous également la structure de ta table (noms et types de champs des colonnes de ta table )
      0
    2. @jordane45
      $ill='';
      if(isset($_GET['ill']){
      $ill=$_GET['ill'];
      }
      echo $ill;
      $mysqli->query("insert into malade(nom,code,maladie) values ('$nom','$code','$ill'))or die($mysqli->error());
      

      maladie reste toujours vide et echo $ill m'affiche angine
      0
    3. Modérateur
      @jawadov11Heu.. oui... sauf que tu n'as pas appliqué ce que je t'ai indiqué.....
      Donc commence par LIRE et APPLIQUER ce que je t'ai donné... et reviens nous voir seulement après avoir apporté ces corrections....
      0
    4. @jawadov11voici ce que j'ai
      0
    5. Modérateur
      @jawadov11on ne voit rien....;
      0
  4. Modérateur
    Tu sais lire ou tu as du mal ???

    montre-nous ton code corrigé ainsi que la structure de ta table ce n'est pourtant pas compliqué à comprendre.
    0
    1. pas besoin de tout expliquer je croi la table est claire sur le insert tout est varchar et le code et sur pc pas lié à internet mais le problème et just dans ce que j'ai envoyé
      0
  5. Modérateur
    si tu as pris le code que je t'ai donné et que ton écho et bon si tu ne veux pas faire l'effort de suivre les conseils qu'on te donne débrouille-toi on ne pourra rien pour toi
    0
    1. j'ai fait ton code à la lettre mais toujours le même problème
      0
    2. Modérateur
      @jawadov11Montre ton code modifié et un show create de ta table...
      Verifie également si ton fichier php est bien encode en utf8 sans bom
      Et pour finir montre nous ce qu'affiche exactement ton echo
      0
  6. $ill=!empty($_GET['ill']) ? $mysqli->real_escape_string($_GET['ill']):"";
    $mal=$ill;
    echo $mal;
    if(isset($_POST['save'])){
    if (isset($_POST['nom'])){
     $nom=$_POST['nom'];}
     if (isset($_POST['prenom'])){
     $prenom=$_POST['prenom'];}
     if (isset($_POST['date_n'])){
     $date_n=$_POST['date_n'];}
    $req="INSERT INTO autre (nom,prenom,date_n,ill) VALUES ('$nom',
    '$prenom','$date_n','$mal')";
    echo $req;}

    le premier echo affiche angine le second mal est vide

    EDIT : Ajout des balises de code (la coloration syntaxique).
    Explications disponibles ici : ICI

    Merci d'y penser dans tes prochains messages.
    0
    1. Modérateur
      Bon...
      Déjà.. merci d'utiliser les BALISES DE CODE pour poster ton code sur le forum.

      Mais.. on avance...
      Désormais on peut voir que tu envois les autres données en POST.

      Je suppose donc, que le "premier" echo dont tu parles est celui qui apparait lorsque tu affiches ta page.... et que le "second" echo c'est celui qui apparait une fois que tu as submit le formulaire...
      Il est donc à parier que tu n'envois pas la variable iil dans l'url du formulaire.....

      On en revient donc à mes premières questions..... MONTRE NOUS LE CODE COMPLET DE TA PAGE !!!!

      C'est pas possible d'être aussi têtu ! ....
      Si on te demande ce genre d'informations c'est justement qu'on a un doute sur l'origine de ton problème.....

      Et puis.. il serait bien que tu commences à appliquer les exemples qu'on te donne.
      Typiquement, ton code actuel devrait ressembler à ça
      $mal=!empty($_GET['ill']) ? $mysqli->real_escape_string($_GET['ill']):"";
      echo $mal;
      if(isset($_POST['save'])){
        $nom=!empty($_POST['nom']) ? $mysqli->real_escape_string($_POST['nom']):"";
        $prenom=!empty($_POST['prenom']) ? $mysqli->real_escape_string($_POST['prenom']):"";
        $date_n=!empty($_POST['date_n']) ? $mysqli->real_escape_string($_POST['date_n']):"";
      
        $req="INSERT INTO autre (nom,prenom,date_n,ill) VALUES ('$nom','$prenom','$date_n','$mal')";
        echo $req;
      } 
      

      ça ne résolvera pas ton souci qui n'est en aucun cas lié à ce code... mais à la façon dont tu enovois ton formulaire (et tes variables ).
      0
    2. @jordane45le problème est dans la variable ill mon ami a part ça tout fonctionne
      0
    3. Modérateur
      @jawadov11Tu es en train de me troller ou vraiment tu ne comprends pas ce qu' on te dit ???
      j'ai bien vu où était ton problème mais toi as-tu lu les réponses que je t'ai donné et ce que je t'ai demandé de nous fournir ?
      ne reviens pas nous voir tant que tu ne seras pas décidé à nous donner les éléments qu'on te demande.
      0
  7. le problème est dans la variable ill mon ami a part ça tout fonctionne insert passe bien mais avec ill vide
    0
    1. Modérateur
      Tu ne sais pas lire... avoue....
      e problème est dans la variable ill mon ami

      ON LE SAIT que c'est ta variable ill qui te pose problème !!! ça fait 15 fois que tu nous le dis... on a compris !

      Mais ton souci... ne vient pas du code que tu nous montres

      Le souci vient de la façon dont tu transmets tes variables entre ton formulaire ( en POST ) et ta satanée variable que tu essaies de récupérer en GET ...

      Donc, (c'est ta dernière chance avant que je ne ferme cette discussion une bonne fois pour toutes.... )
      MONTRE NOUS LE CODE COMPLET et surtout.... ton FORMULAIRE !!!!

      J'espère que j'ai été assez clair cette fois !
      0
  8. premiere page:
     <?php

    require_once 'pro2.php';

    ?>

    <div class="row justify-content-center">
    <form action="pro2.php" method="POST" oninput="">
    <input type="hidden" name="id" value="<?php echo $id; ?>">

    <table > <td colspan=10 align="left" style="margine:10px;padding:5px" >
    <div class="form_group">
    <label>Numero dossier :         </label>
    <input type="text" name="num_dossier" value="<?php echo $num_dossier; ?>" class="form_control" placeholder=" ">
    </div>
    <div class="form_group">
    <label>Nom :                          </label>
    <input type="text" name="nom" class="form_control" value="<?php echo $nom; ?>" placeholder="" >
    </div>
    <div class="form_group">
    <label>Prenom :                     </label>
    <input type="text" name="prenom" class="form_control" value="<?php echo $prenom; ?>" placeholder="" >
    </div>

    <div class="form_group">
    <label>Date naissance</label>
    :          
    <input type="date" name="date_n" value="<?php echo $date_n; ?>" class="form_control" placeholder="">
    </div>


    2 eme page pro2.php:

    $ill=!empty($_GET['ill']) ? $mysqli->real_escape_string($_GET['ill']):"";
    $mal=$ill;
    echo $mal;
    if(isset($_POST['save'])){
    if (isset($_POST['nom'])){
    $nom=$_POST['nom'];}
    if (isset($_POST['prenom'])){
    $prenom=$_POST['prenom'];}
    if (isset($_POST['date_n'])){
    $date_n=$_POST['date_n'];}
    $req="INSERT INTO autre (nom,prenom,date_n,ill) VALUES ('$nom',
    '$prenom','$date_n','$mal')";
    echo $req;}
    0
    1. et dans mon index j'ai un lien qui va vers patient.php?ill=angine qui est la première page
      0
    2. Modérateur
      @jawadov11Soit tu n'as pas tout mis, soit c'est clairement pas bon.
      En essayant sur mon serveur,
      il me crache une erreur sur "$mysqli->real_escape_string" (normal $mysqli n'est pas initialisé)
      Si je retire cet appel, il manque le "</form>" de ton formulaire ainsi que le bouton de validation de celui-ci.
      Il manque aussi le champ "save".

      Après modification, le code semble fonctionner :
      <?php 
      
      $ill=!empty($_GET['ill']) ? $_GET['ill']:"";
      $mal=$ill;
      echo $mal;
      if(isset($_POST['save']))
      {
      	if (isset($_POST['nom']))
      	{
      		$nom=$_POST['nom'];
      	}
      	if (isset($_POST['prenom']))
      	{
      		$prenom=$_POST['prenom'];
      	}
      	if (isset($_POST['date_n']))
      		{
      		$date_n=$_POST['date_n'];
      	}
      	$req="INSERT INTO autre (nom,prenom,date_n,ill) VALUES ('$nom',
      	'$prenom','$date_n','$mal')";
      	echo $req;
      } ?>
      
      <div class="row justify-content-center">
      <form action="#" method="POST" oninput="">
      <input type="hidden" name="id" value="<?php echo $id; ?>">
      
      <div class="form_group">
      <label>Numero dossier :         </label>
      <input type="text" name="num_dossier" value="<?php echo $num_dossier; ?>" class="form_control" placeholder=" ">
      </div>
      <div class="form_group">
      <label>Nom :                          </label>
      <input type="text" name="nom" class="form_control" value="<?php echo $nom; ?>" placeholder="" >
      </div>
      <div class="form_group">
      <label>Prenom :                     </label>
      <input type="text" name="prenom" class="form_control" value="<?php echo $prenom; ?>" placeholder="" >
      </div>
      
      <div class="form_group">
      <label>Date naissance</label>
      :          
      <input type="date" name="date_n" value="<?php echo $date_n; ?>" class="form_control" placeholder="">
      </div>
      
      <input type="hidden" name="save" value="123" />
      
      <input type="submit" />
      </form>
      0
    3. Modérateur
      @NHenryIl manquera quand même l'insertion au final...
      Donc il faut laisser le real escape et inclure la connexion à la bdd.
      0