Insérer et modifier en php

Résolu
Bonjour,
Voilà j'ai un projet de fin d'année dont le but est de faire un site pour une entreprise ou autre

Ma partie de projet est d'insérer et de modifier des réservations de gîtes mais lorsque je veux le faire, soit il me dit que la réservation est déjà insérer ou qu'il est impossible de la modifier donc je commence à m'énerver sur les scripts
Voilà celui pour insérer
body bgcolor="#000080" text="#FFFFFF" link="#FFFF00" vlink="#00FFFF">
<?php

$serveur = mysql_connect ('localhost','root') or die ('Erreur : .mysql_error()' );
mysql_select_db('gdv',$serveur);

// ISSET : teste si les zones à saisir sont bien renseignées
if (isset($_POST['nugite']))
{
$numero=$_POST['nugite'];
}
if (isset($_POST['datedeb']))
{
$datedeb=$_POST['datedeb'];
}
if (isset($_POST['datefin']))
{
$datefin=$_POST['datefin'];
}
$verif = "select * from reservation where NoGite=$numero and DateResDeb=$datedeb";
if (!$verif)
{
$sql="insert into RESERVATION (NoGite, DateResDeb, DateResFin) ";
$sql=$sql."values ($numero,'$datedeb','$datefin')";
mysql_query($sql) or die ("erreur !");
echo "reservation enregistrée";
}
else
echo "reservation deja existante"; (<---- là il me marque toujours se echo)

// on ferme la connexion à la base
mysql_close();

?>

Et là c'est la modif

<html>

<head>
</head>

<body bgcolor="#000080" text="#FFFFFF" link="#FFFF00" vlink="#00FFFF">

<?php

$NoRes=$_POST['NoRes'];
$DateResDeb=$_POST['DateResDeb'];
$DateResFin=$_POST['DateResFin'];
$NoGite=$_POST['NoGite'];

$maconnexion =mysql_connect("localhost","root","password")
or die("Connexion au serveur impossible");
$db=mysql_select_db("gdv",$maconnexion)
or die("Sélection de la base de données impossible");

$req = UPDATE SET `NoRes` = '$NoRes',`DateResDeb` = '$DateResDeb',`DateResFin` = '$DateResFin',`NoGite` = '$NoGite';

$ok=mysql_query($req);
if ($ok)

{
echo 'Requête exécutée<BR><BR> <a href="update_gite.php"> Cliquez ici pour revenir à la page précédente.';
}
else

{
echo 'Impossible d\'exécuter cette requête...';
}

mysql_close ();

?>

</body>

</html>

Donc si quelqu'un peut m'aider (sans forcer les cerveau) je doit le rendre pour jeudi!!

Merci de votre aide

12 réponses

  1. Tu fais un if(!$verif) ce qui signifie que tu veux que $verif soit égal à false. $verif contient une chaîne de caractère (ta requête), donc aucun rapport ! Normal que ça ne fonctionne pas.
    $verif = "select * from reservation where NoGite=$numero and DateResDeb=$datedeb";
    $req = mysql_query($verif);
    if (mysql_num_rows($req)==0)
    {
    $sql="insert into RESERVATION (NoGite, DateResDeb, DateResFin) ";
    $sql=$sql."values ($numero,'$datedeb','$datefin')";
    mysql_query($sql) or die ("erreur !");
    echo "reservation enregistrée";
    }
    else
    echo "reservation deja existante"; (<---- là il me marque toujours se echo) 

    Ceci devrait mieux fonctionner. Tu avais oublié de faire mysql_query pour exécuter la requête. Ensuite à présent dans le if tu testes si la requête renvoie 0 résultats ou pas.

    Même problème pour la seconde page. Tu as pensé au mysql_query mais tu testes son résultat comme un booléen. A remplacer par mysql_num_rowst().
    0
    1. juste avant que je test les dates pour du php à MySql c bien YYYYMMDD??? (année mois jour)
      0
    2. Sinon je viens te tester avec YYYYMMDD et il me marque toujours réservation déjà effectués!!
      0
    3. @Yoshipour faire un UPDATE il faut une condition WHERE sinon mysql ne saura pas quoi modifier,

      tu dois avoir un numéro de gite $NoGite transmis par ta demande de modif, alors utilises le comme condition:

      $req = UPDATE SET `NoRes` = '$NoRes',`DateResDeb` = '$DateResDeb',`DateResFin` = '$DateResFin' WHERE `NoGite` = '$NoGite'; 
      0
  2. En MySQL il me semble que les dates sont sous le format YYYY-MM-DD. Sans certitude cependant.

    Sinon je ne vois pas pourquoi le problème persiste. C'est étrange.
    0
    1. Bon comme un idiot j'avais oublié les tiret entre année et mois puis mois et jour! la réservation a été enregistré et je la retrouve sur MySql
      Maintenant je test pour les mise à jour
      0
    2. @YoshiParfait si c'était ça. Par contre effectivement suit bien le conseil d'Alain_42, sinon t'auras quelques surprises. J'avais pas vu cette erreur.
      0
  3. je suis en train de refaire pour la mise à jour sous les conseils d'alain_42
    0
    1. Il me marque en parse error

      <html>

      <head>
      </head>

      <body bgcolor="#000080" text="#FFFFFF" link="#FFFF00" vlink="#00FFFF">

      <?php

      $NoRes=$_POST['NoRes'];
      $DateResDeb=$_POST['DateResDeb'];
      $DateResFin=$_POST['DateResFin'];
      $NoGite=$_POST['NoGite'];

      $maconnexion =mysql_connect("localhost","root")
      or die("Connexion au serveur impossible");
      $db=mysql_select_db("gdv",$maconnexion)
      or die("Sélection de la base de données impossible");

      $req = UPDATE SET `NoRes` = '$NoRes',`DateResDeb` = '$DateResDeb',`DateResFin` = '$DateResFin' WHERE `NoGite` = '$NoGite';
      $ok=mysql_query($req);
      if ($ok)
      {
      echo 'Requête exécutée<BR><BR> <a href="update_gite.php"> Cliquez ici pour revenir à la page précédente.';
      }
      else
      {
      echo 'Impossible d\'exécuter cette requête...';
      }

      mysql_close ();

      ?>

      </body>

      </html>

      je trouve pas l'erreur!!
      0
      1. Il manque des " " autour de ta requête. N'oublies pas de rajouter le mysql_num_rows dans le if. Sinon ça ne fonctionnera pas.
        0
      2. @CralonNon d'ailleurs je dis des conneries, c'est pas un select donc y'a pas de mysql_num_rows...
        0
    2. Non toujours la même erreur!
      0
      1. Grrrr,

        il faudrait peut être bien préciser quelle table est a UPDATER !!

        Essayes comme ça:

        $req ="UPDATE nom_de_ta_table SET `NoRes` = '".$NoRes."',`DateResDeb` = '".$DateResDeb."',`DateResFin` = '".$DateResFin."' WHERE `NoGite` = '".$NoGite."'";
        


        @lain
        0
    3. J'ai un problème je ne vois pas la dernière réponse d'Alain_42!!
      0
      1. Il me dit toujours "Impossible d'exécuter cette requête... " en lui demandant de modifier la date d'une réservation!
        0
        1. Je t'en renvoie une copie:

          Grrrr,

          il faudrait peut être bien préciser quelle table est a UPDATER !!

          Essayes comme ça:

          $req ="UPDATE nom_de_ta_table SET `NoRes` = '".$NoRes."',`DateResDeb` = '".$DateResDeb."',`DateResFin` = '".$DateResFin."' WHERE `NoGite` = '".$NoGite."'";

          @lain
          0
        2. @Alain_42Déjà essayer et ça marche pas!! il me marque mon echo 'Impossible d'exécuter cette requête... '
          0
        3. @Yoshidonnes nous une copie de la partie de code ou tu as ta requette.
          0
      2. <html>

        <head>
        </head>

        <body bgcolor="#000080" text="#FFFFFF" link="#FFFF00" vlink="#00FFFF">

        <?php

        $NoRes=$_POST['NoRes'];
        $DateResDeb=$_POST['DateResDeb'];
        $DateResFin=$_POST['DateResFin'];
        $NoGite=$_POST['NoGite'];

        $maconnexion =mysql_connect("localhost","root")
        or die("Connexion au serveur impossible");
        $db=mysql_select_db("gdv",$maconnexion)
        or die("Sélection de la base de données impossible");

        $req ="UPDATE reservation SET `NoRes` = '".$NoRes."',`DateResDeb` = '".$DateResDeb."',`DateResFin` = '".$DateResFin."' WHERE `NoGite` = '".$NoGite."'";
        $ok=mysql_query($req);
        if ($ok)
        {
        echo 'Requête exécutée<BR><BR> <a href="update_gite.php"> Cliquez ici pour revenir à la page précédente.';
        }
        else
        {
        echo 'Impossible d\'exécuter cette requête...';
        }

        mysql_close ();

        ?>

        </body>

        </html>
        0
        1. essayes comme ça:

          $req ="UPDATE reservation SET NoRes='".$NoRes."',DateResDeb= '".$DateResDeb."',DateResFin= '".$DateResFin."'  WHERE NoGite='".$NoGite."'";
          $ok=mysql_query($req) or die ("Pb requette: ".mysql_error());
          
          


          sinon vérifie que tes noms de champs de ta table sont bien pareils que ceux de ta requette majuscules minuscules etc..

          idem pour le nom de la table
          0
      3. Il me marque "Pb requette: Duplicata du champ '32' pour la clef 1" sans modifier la réservation!
        0
        1. c'est 31 et non 32 désolé!!
          0
          1. Est ce que dans ta table tu n'as pas plusieurs enregistrements pour un même numéro de gite ?

            il se peut que les erreurs précédentes aient polué ta table.
            0
        2. si justement un gite peut avoir plusieurs réservation comme dans un hôtel une chambre a plusieurs réservations donc je doi mettre le WHERE sur le Numéro de réservation??
          0
          1. c'est bon j'ai mis :
            <html>

            <head>
            </head>

            <body bgcolor="#000080" text="#FFFFFF" link="#FFFF00" vlink="#00FFFF">

            <?php

            $NoRes=$_POST['NoRes'];
            $DateResDeb=$_POST['DateResDeb'];
            $DateResFin=$_POST['DateResFin'];
            $NoGite=$_POST['NoGite'];

            $maconnexion =mysql_connect("localhost","root")
            or die("Connexion au serveur impossible");
            $db=mysql_select_db("gdv",$maconnexion)
            or die("Sélection de la base de données impossible");

            $req ="UPDATE reservation SET NoGite='".$NoGite."',DateResDeb= '".$DateResDeb."',DateResFin= '".$DateResFin."' WHERE NoRes='".$NoRes."'";
            $ok=mysql_query($req) or die ("Pb requette: ".mysql_error());

            if ($ok)
            {
            echo 'Requête exécutée<BR><BR> <a href="update_gite.php"> Cliquez ici pour revenir à la page précédente.';
            }
            else
            {
            echo 'Impossible d\'exécuter cette requête...';
            }

            mysql_close ();

            ?>

            </body>

            </html>

            Et sa marche parfaitement !!

            Merci à Alain_42 et Cralon pour l'aide!!!
            0