8800 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai délaissé quelques temps php pour un autre langage (VS) et j'ai un soucis pour m'y remettre... Je n'y comprends rien : j'ai un formulaire dont je lis les données, données que j'enregistre dans une table préalablement créée sur MySql.

Si mes données sont toutes vides (formulaire vide), j'enregistre une fiche, mais vide. Cela prouve que la table tient debout et que ma formule : $sql = "INSERT INTO ... est correcte.

Mais si je veux enregistrer des données remplies ($nom = 'Dupont' au lieu de $nom =''), MySql ne les prend pas, la fiche n'est pas créée et aucune erreur n'est générée...

J'ai beau fouiller, je ne trouve pas l'astuce. Tout est en VARCHAR ou en TEXT (sauf l'id en increment) et mes données sont toutes en texte. Si une donnée devait dépasser par la taille le champ MySql prévu, la base la tronquerait il me semble sans pour autant refuser d'enregistrer, non ?

Si vous aviez une idée.. Merci d'avance.

Cordialement,
Donne-nous un peu plus d'informations, notamment les bouts de codes concernés. Sinon on ne va pas beaucoup pouvoir t'éclairer.
Mon code est trop long (je transcris un fichier extérieur dans un formulaire, puis je lis ce formulaire), c'est pour ça que je ne l'avais pas donné. Mais je vais en créer un semblable pour l'exemple.


  // Je prévoie le fichier fonctions.php (pour les fonctions) et le 
  // fichier conf.php pour les couleurs (plus tard)

  require ( "../config/fonctions.php" );
  require ( "../config/conf.php" );

  // Si le formulaire a été rempli

  if(isset($_POST["enreg"]))  {

      $strNom="";
      $strCouleur="";
      $strCaracteristiques="";      

      if(isset($_POST["strNom"])) { $strNom  = $_POST["strNom"]; }
      if(isset($_POST["strCouleur"])) { $strCouleur  = $_POST["strCouleur"]; }
      if(isset($_POST["strCaracteristiques"])) { $strCaracteristiques  = $_POST["strCaracteristiques"]; }

      $sql = "INSERT INTO pierres (id, nom, couleur, caracteristiques) 
      VALUES ('', '$strNom', '$strCouleur', '$strCaracteristiques)";

      GetMyConnection();
      if(!$boolReponse = mysql_query($sql)) die("Cela n'a pas pu être enregistré");
      CleanUpDB();
  }

  // Je lis le numero de page passé en POST à chaque nouvel enregistrement

  if(isset($_POST["intPage"])) { $intPage = $_POST["intPage"]; }

  // J'initialise les variables  

  $strNom="";
  $strCouleur="";
  $strCaracteristiques="";
  ................

  //Je lis le fichier extérieur

  $fichier='../pierres/data/FichierPierres.txt';
  $file1 = @fopen($fichier, "r");

  if ($file1)  {

      while (!feof($file1))  {

          $strLigne1 = fgets($file1, 4096);
          $strLigne = trim($strLigne1);

	  // chaque norceau de mon fichier est séparée par une ligne "Num : " et 
	  // un numéro sur 3 chiffres (en string).
	  // Ca peut être 005 ou 265
	  // il faut donc convertir en chiffre

          if(left($strLigne, 6) == 'Num : ') {

              $laLigne = left($strLigne, 9);
              $laPage = right($laLigne, 3);

              if (left($laPage, 1) == '0')  { $laPage = right($laPage, 2); }
              if (left($laPage, 1) == '0')  { $laPage = right($laPage, 1); }

              $intPage1 = intval($laPage);
              if($intPage1 == $intPage) { $intBon = 1; }
          }

          // Si le morceau de fichier lu correspond à la page à lire

          if($intPage1 == $intPage) {

              $Bon = 1;

	      if(trim($strLigne) != '')  {

                 if(left($strLigne,6) == 'Nom : ') {
                     $strNom = trim($strLigne);
                     $intTaille = strlen($strNom);
                     $strNom = right($strNom, $intTaille-6);
                 }
                 elseif(left($strLigne,10) == 'Couleur : ')  {
                     $strCouleur = trim($strLigne);
                     $intTaille = strlen($strCouleur);
                     $strCouleur = right($strCouleur, $intTaille-10);
                 }
                 elseif(left($strLigne,19) == 'Caracteristiques : ')  {
                     $strCaracteristiques = trim($strLigne);
                     $intTaille = strlen($strCaracteristiques);
                     $strCaracteristiques = right($strCaracteristiques, $intTaille-19);
                 }
              } 
	  }
      }
  }

  fclose($file1);

  // je remplis le formulaire avec les données du fichier

  if ($intBon == 1)  {

      echo "<HTML><BODY bgcolor=$marron>

      <CENTER><TABLE width=90% Border=2 cellpadding=10 cellspacing=5>
      <FORM enctype='multipart/formdata' method='POST' action='#'>
      <TR>
          <TD align='right' bgcolor=$bgtitre>$L2 Nom</TD>
          <TD width=75% align='left' bgcolor=$bgcolor>
          <TEXTAREA name='strNom' cols='60' rows='1'>$strNom</TEXTAREA></TD>
      </TR>
      <TR>
          <TD align='right' bgcolor=$bgtitre>$L2 Couleur</TD>
          <TD width=75% align='left' bgcolor=$bgcolor>
          <TEXTAREA name='strCouleur' cols='60' rows='1'>$strCouleur</TEXTAREA></TD>
      </TR>
      <TR>
          <TD align='right' bgcolor=$bgtitre>$L2 Caracteristiques</TD>
          <TD width=75% align='left' bgcolor=$bgcolor>
          <TEXTAREA name='strCaracteristiques' cols='60' rows='4'>$strCaracteristiques</TEXTAREA></TD>
      </TR>
      <TR>
          <TD align='center' colspan=2 bgcolor=$bgtitre>
          <INPUT type='hidden' name='intPage' value=$intPage>
          <INPUT type='hidden' name='enreg' value='enreg'>
          <INPUT type='submit' name='submit' size='30' value='   Envoyer   '></TD>
      </TR>
      </TABLE>";
  }

  echo "</BODY></HTML>";



Voilà. Et donc, si je clique sur le submit avec un formulaire vide, l'enregistrement dans MySql se fait (avec une fiche vide), mais si le formulaire est rempli des données du fichier lu, l'enregistrement ne se fait pas.
Une précisions à mon sujet précédent :

// Table de MySql

CREATE TABLE IF NOT EXISTS `pierres` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(25) NOT NULL DEFAULT '',
  `couleur` varchar(145) NOT NULL DEFAULT '',
  `caracteristiques` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ;



et cette ligne, en bascule avec un '//' devant, ( if($intBon == 1) { break; } ) et qui sert à enregistrer les fiches, soit vides soit pleines. Pour voir la différence avec MySql . Cette ligne se met entre l'accolade et la ligne // Si le morceau de ...

 
          }

          if($intBon == 1)  {  break;  }

          // Si le morceau de fichier lu correspond à la page à lire

dans la boucle While.
Bonjour,

Suis-je tout seul ?

Voilà le script dans l'ordre :

// le FichierPierres.txt

Num : 001
Nom : AGATE
Couleur : Variétés rouges, vertes, jaunes, bleues ou noires. Attention, celles dont la couleur est éclatante sont artificielles.
Caractéristique : Utilisation : Joaillerie, bijouterie et objets d'art.
Num : 002
Nom : AIGUE MARINE
Couleur : Transparente, de couleur bleu clair évoquant l'eau de mer.
Caractéristique : Utilisation : Joaillerie, bijouterie et objets d'art.
Num : 003
Nom : ALEXANDRITE
Couleur : Verte à la lumière du jour mais rouge pourpre
Caractéristique : Utilisation : Joaillerie, bijouterie et objets d'art.
....



// Table de MySql

CREATE TABLE IF NOT EXISTS `pierres` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(25) NOT NULL DEFAULT '',
  `couleur` varchar(145) NOT NULL DEFAULT '',
  `caracteristiques` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ;

  // Je prévoie le fichier fonctions.php (pour les fonctions) et le 
  // fichier conf.php pour les couleurs (plus tard)

  require ( "../config/fonctions.php" );
  require ( "../config/conf.php" );

  // Si le formulaire a été rempli

  if(isset($_POST["enreg"]))  {

      $strNom="";
      $strCouleur="";
      $strCaracteristiques="";      

      if(isset($_POST["strNom"])) { $strNom  = $_POST["strNom"]; }
      if(isset($_POST["strCouleur"])) { $strCouleur  = $_POST["strCouleur"]; }
      if(isset($_POST["strCaracteristiques"])) { $strCaracteristiques  = $_POST["strCaracteristiques"]; }

      $sql = "INSERT INTO pierres (id, nom, couleur, caracteristiques) 
      VALUES ('', '$strNom', '$strCouleur', '$strCaracteristiques)";

      GetMyConnection();
      if(!$boolReponse = mysql_query($sql)) die("Cela n'a pas pu être enregistré");
      CleanUpDB();
  }

  // Je lis le numero de page passé en POST à chaque nouvel enregistrement

  if(isset($_POST["intPage"])) { $intPage = $_POST["intPage"]; }

  // J'initialise les variables  

  $strNom="";
  $strCouleur="";
  $strCaracteristiques="";
  ................

  //Je lis le fichier extérieur

  $fichier='../pierres/data/FichierPierres.txt';
  $file1 = @fopen($fichier, "r");

  if ($file1)  {

      while (!feof($file1))  {

          $strLigne1 = fgets($file1, 4096);
          $strLigne = trim($strLigne1);

	  // chaque norceau de mon fichier est séparée par une ligne "Num : " et 
	  // un numéro sur 3 chiffres (en string).
	  // Ca peut être 005 ou 265
	  // il faut donc convertir en chiffre

          if(left($strLigne, 6) == 'Num : ') {

              $laLigne = left($strLigne, 9);
              $laPage = right($laLigne, 3);

              if (left($laPage, 1) == '0')  { $laPage = right($laPage, 2); }
              if (left($laPage, 1) == '0')  { $laPage = right($laPage, 1); }

              $intPage1 = intval($laPage);
              if($intPage1 == $intPage) { $intBon = 1; }
          }

	// **************ATTENTION Cette ligne dessous sert (en la mettant en commentaires "//", ou pas,
 	// à enregistrer une fiche vide ou remplie. Cela permet de savoir si la base fonctionne 
	// ainsi que la commande $sql = "INSERT INTO..., ou pas...

            	if($intBon == 1)  {  break;  }

	  // Si le morceau de fichier lu correspond à la page à lire

          if($intPage1 == $intPage) {

              $Bon = 1;

	      if(trim($strLigne) != '')  {

                 if(left($strLigne,6) == 'Nom : ') {
                     $strNom = trim($strLigne);
                     $intTaille = strlen($strNom);
                     $strNom = right($strNom, $intTaille-6);
                 }
                 elseif(left($strLigne,10) == 'Couleur : ')  {
                     $strCouleur = trim($strLigne);
                     $intTaille = strlen($strCouleur);
                     $strCouleur = right($strCouleur, $intTaille-10);
                 }
                 elseif(left($strLigne,19) == 'Caracteristiques : ')  {
                     $strCaracteristiques = trim($strLigne);
                     $intTaille = strlen($strCaracteristiques);
                     $strCaracteristiques = right($strCaracteristiques, $intTaille-19);
                 }
              } 
	  }
      }
  }

  fclose($file1);

  // je remplis le formulaire avec les données du fichier

  if ($intBon == 1)  {

      echo "<HTML><BODY bgcolor=$marron>

      <CENTER><TABLE width=90% Border=2 cellpadding=10 cellspacing=5>
      <FORM enctype='multipart/formdata' method='POST' action='#'>
      <TR>
          <TD align='right' bgcolor=$bgtitre>$L2 Nom</TD>
          <TD width=75% align='left' bgcolor=$bgcolor>
          <TEXTAREA name='strNom' cols='60' rows='1'>$strNom</TEXTAREA></TD>
      </TR>
      <TR>
          <TD align='right' bgcolor=$bgtitre>$L2 Couleur</TD>
          <TD width=75% align='left' bgcolor=$bgcolor>
          <TEXTAREA name='strCouleur' cols='60' rows='1'>$strCouleur</TEXTAREA></TD>
      </TR>
      <TR>
          <TD align='right' bgcolor=$bgtitre>$L2 Caracteristiques</TD>
          <TD width=75% align='left' bgcolor=$bgcolor>
          <TEXTAREA name='strCaracteristiques' cols='60' rows='4'>$strCaracteristiques</TEXTAREA></TD>
      </TR>
      <TR>
          <TD align='center' colspan=2 bgcolor=$bgtitre>
          <INPUT type='hidden' name='intPage' value=$intPage>
          <INPUT type='hidden' name='enreg' value='enreg'>
          <INPUT type='submit' name='submit' size='30' value='   Envoyer   '></TD>
      </TR>
      </TABLE>";
  }

  echo "</BODY></HTML>";



Quelqu'un pour m'aider ?

Merci d'avance,

Cordialement.