Forum Linux.débutant Probleme php, form méthode POST

Posté par  (site web personnel) .
Étiquettes : aucune
0
10
oct.
2004
Bonjour à tous.

J'ai un problème avec mon serveur web.
J'ai installé apache, php, mysql et je commence gentiement à faire un site web sur ma machine.
J'arrive bien à me connecter à mes bases, mais le soucis c'est lors de la création de formulaire; enfin j'ai testé un peu tout et par élimination ca doit venir de là.
Tous mes formulaires de type -> form method="POST" ont l'air de mouliner dans le vide... rien ne se passe et rien n'est écris dans la base concernée.
j'ai testé mes pages chez free, et chez eux tout passe bien.. J'en conclue donc que le problème vient de chez moi...
Faut il activer qqch qqpart pour faire fonctionner les form POST???

Merci par avance, Uld
  • # Des précisions ?

    Posté par  . Évalué à 2.

    Bonsoir à toi,
    Il serait peut-être plus facile de t'aider si tu donnais quelques infos sur ta distrib ...
    Ton serveur mouline t-il réellement sans te répondre ou bien ne fait-il à première vue simplement rien ?
    De quelle manière traites-tu les donnees postées ? $madonnee, $_POST['madonnee'] ?
    Sans rentrer dans les détails, si tu utilises $madonnee, il y a des chances qu'elle soit vide selon la config de php. Il vaut mieux utiliser le tableau $_POST
  • # print_r()

    Posté par  . Évalué à 1.

    La fonction magique pour le debug.

    un petit print_r($GLOBALS); dans script t'affiche la totalité des variables en cours à cet instant de l'execution ... tu devrais voir apparaitre tes variables de formulaire dans le tableau $_POST[]


    Dam
    • [^] # Re: print_r()

      Posté par  (site web personnel) . Évalué à 0.

      Ma distrib est un red hat9,
      j'utilise :
      ->httpd 2.0.40-21.5
      ->php 4.2.2
      ->mysql-3.23.58-1.73
      ->php-mysql4.2.2-17.2

      Pour mieux exposer mon problème voici un exemple typique de script qui foire:
      ex: du fichier listeriviere.php (typiquement: verification d'argument passé, affichage des données en base, formulaire de saisie)


      <head>
      <title>Rivieres</title>
      </head>

      >?
      // ---------- connexion à la base de données ----------------------------------
      include("admin/dbconnect.inc.php");

      // ---------- on teste d'abord si on a un paramètre $i_nom qui a été passé -----
      if (! empty($i_nom)) {
      // ---- dans ce cas, on crée une rivière portant ce nom ------------------
      $sql = "INSERT INTO fish_riviere (nom) VALUES ('$i_nom')";
      if ($res = mysql_query($sql)) {
      echo"<p>La rivière ".$i_nom." a été créée.";
      }
      else {
      echo "<p>Problème lors de l'exécution de l'ordre ".$sql;
      }
      }

      // ------------ liste des rivières ----------------
      // entete du tableau
      ?>
      <h1>Liste des rivières</h1>
      <table border="1" cellspacing="1" width="100%">
      <tr>
      <th align="left">ID</th>
      <th align="left">Nom</th>
      </tr>
      <?php
      // requete à la base de données = l'ordre SQL
      $req = mysql_query("SELECT id, nom FROM fish_riviere order by id");

      // boucle de lecture des enregistrements reçus
      while ($myrow = mysql_fetch_array($req)) {
      // affichage de la ligne dans le tableau
      echo "<tr><td>".$myrow["id"]."</td>";
      echo "<td>".$myrow["nom"]."</td></tr>";
      // fin de la ligne
      }
      // fin de la boucle
      ?>
      </table>

      <!-- --------------création d'une nouvelle rivière ------------- -->

      <!-- formulaire HTML -->
      <form method="POST" action="listeriviere.php" name="saisie" onSubmit="return CheckForm()">
      <p>Nom <font size="4" color="#FF0000"><b>*</b></font> <input type="text" name="i_nom" size="30"
      maxlength="30">
      <input type="submit" value="Créer" name="go"></p>
      </form>



      lorsque l'user clique sur go, la page mouline, se rafraichit, mais rien ne s'inscrit dans la base, nada que d'pouic.... (la connection à la base marche, j'arrive à en extraire les données)
      Alors que si je teste ca sur une autre serveur (type free comme j'expliquais), tout passe bien...

      J'commence à me cogner la tete contre les murs là...
      • [^] # Re: print_r()

        Posté par  (site web personnel) . Évalué à 0.

        Faites pas attention au premier ">?" ca vient de moi qui ai mal copié mon code... ca vient pas de là evidement (ah oui aussi j'ai pas mis les balise fermantes de body et de html mais elles y sont aussi hein ;) )
        • [^] # Re: print_r()

          Posté par  . Évalué à 1.

          préférer la fonction isset() à empty()

          ensuite ton i_nom doit etre dans la variable $_POST['i_nom']

          et donc

          if (isset($_POST['i_nom'])) {
          ...faire ton insert ...
          }


          Dam
          • [^] # Re: print_r()

            Posté par  (site web personnel) . Évalué à 0.

            Ok je ne connaissait pas cette syntaxe, j'ai donc rempli mes variables dès le debut du script avec
            $i_nom=$_POST['i_nom'];
            etc... pour chaque variable et tout baigne maintenant.

            Merci pour ton aide Damien.

            Mais iol reste une question que je ne m'explique pas... Pourquoi ai je besoin de passer par cette syntaxe du style $_POST['variable'] alors qu'ailleurs $variable marchait tres bien...???
            • [^] # Re: print_r()

              Posté par  (site web personnel) . Évalué à 2.

              Dans ton fichier php.ini (/etc/php.ini ou quelque chose du genre) tu as une option "register_global" qui doit être à On pour que ca fonctionne. PHP la met par défaut à Off.

              Modifies la ligne, redémarre apache et enjoy !!!
            • [^] # Re: print_r()

              Posté par  . Évalué à 1.

              Parce que dans le php.ini par default register globals est à off pour des raisons de sécurité ... et c'est bien comme ça :)

              Dam
              • [^] # Re: print_r()

                Posté par  (site web personnel) . Évalué à 0.

                Ok j'vais faire joujou avec ca.
                Mais si le-monsieur-qui-m'a-aidé-et-qui-a-l'air-de-toucher dis que c'est mieux à off, j'vais surtout essayer de changer ma méthode pour coder ;)
                • [^] # Re: print_r()

                  Posté par  (site web personnel) . Évalué à 2.

                  Pour des raisons de sécurité c'est mieux, en effet. Mais le nombre de scripts qui ne fonctionnent pas si cette option est à Off, grand dilemme. Sur ton C perso tu peux l'activer sans trop de risques (sauf si il est accessible). En plus, selon ton commentaire, chez Free, il est aussi à On, donc de toute façon, la sécurité......
            • [^] # Re: print_r()

              Posté par  . Évalué à 1.

              En fait $variable pour recuperer la variable d'un formulaire était la config par defaut avec php3, en passant a php4 la conf par defaut est passé a $_POST['variable']

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.