condition where et date.

Mammouth du PHP | 702 Messages

09 mai 2012, 16:58

Bonjour à tous, j'ai un soucis, lors d'une requête, il me met un message d'erreur. voici ma requête:
$sql = "SELECT * FROM liasse_a where n_doss='".mysql_real_escape_string($_GET['n_doss'])."' AND where date_action < date('Y-m-d') ";
en sachant que le champ date_action est au format DATE et non varchar. Du coup je ne sais pas
mais j'ai cette erreur:

Code : Tout sélectionner

245You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where date_action < date('Y-m-d')' at line 1SELECT * FROM liasse_a where n_doss='110015666223' AND where date_action < date('Y-m-d')
d'avance merci pour votre aide.

ViPHP
ViPHP | 1380 Messages

09 mai 2012, 17:41

N'y aurait-il pas un WHERE de trop?
ripat

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 mai 2012, 17:45

Il ne faut qu'un seul WHERE dans ta requête SQL :) Le message d'erreur t'indique l'endroit exact à partir duquel l'erreur survient, donc s'il te dit que l'erreur est "near 'where date_action < date('Y-m-d')'", c'est que le problème est situé juste avant ce where date_action

$sql = "SELECT * FROM liasse_a where n_doss='".mysql_real_escape_string($_GET['n_doss'])."' AND where date_action < date('Y-m-d') ";

La syntaxe est WHERE cond1 AND cond2 AND cond3 ... et non pas WHERE cond1 AND WHERE cond2 ...


Ps : la syntaxe " date('Y-m-d') ", c'est du php, pas du SQL. Tu peux utiliser NOW() sous MySQL pour obtenir la date du jour :)

Edit : Hmph.. grillé.. :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 702 Messages

09 mai 2012, 17:57

excellent, merci à tous, n'y a t'il point en ce site de bouton résolu? :)

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

09 mai 2012, 21:06

excellent, merci à tous, n'y a t'il point en ce site de bouton résolu? :)
He'll be back. Image

Mammouth du PHP | 702 Messages

10 mai 2012, 09:27

j'ai juste un tout petit soucis, en fait voici le code
 <?php if (isset($_GET['liasse']) AND $_GET['liasse']=='liasse_a') { ?>
<?php
 
$sql = "SELECT * FROM liasse_a where n_doss='".mysql_real_escape_string($_GET['n_doss'])."' AND  date_action < now() ";
$qry = mysql_query($sql) or die(__LINE__.mysql_error().$sql);
 
$get_date = function($data_jours) {
   $today = new DateTime();
   $today->setTime(0, 0);
   $jours = (isset($_POST['jours']) && ctype_digit($_POST['jours'])) ? $_POST['jours'] : 0;
   if (isset($_POST['submit']) && ($_POST['submit'] === 'moins')) {
      $jours = -$jours;
   }
   $nb       = $data_jours + $jours;
   $func     = ($nb < 0) ? 'sub' : 'add';
   $interval = new DateInterval("P{$nb}D");
   return $today->$func($interval)->format('d-m-Y');
};
$i = -1; // index des enregistrements
?>
<table cellpadding="5" cellspacing="5">
   <tr>
      <td><strong>CODE SCENARIO</strong></td>
      <td><strong>LIBELLE</strong></td>
      <td><strong>ACTION</strong></td>
      <td><strong>DESCRIPTION</strong></td>
      <td><strong>DATE</strong></td>
   </tr>
   <form action="<?php echo (isset($_POST['go'])) ? 'go2.php' : '#'; ?>" method="post">
      <input type="hidden" name="liasse" value="<?php echo $_GET['liasse']; ?>"/>
      <input type="hidden" name="n_doss" value="<?php echo $_GET['n_doss']; ?>"/>
      <?php while($row = mysql_fetch_assoc($qry)): ?>
      <tr>
         <td><input name="data[<?php echo ++$i; ?>][code_s]" type="text" value="<?php echo $row['code_s'];?>" size="10"></td>
         <td><input name="data[<?php echo $i; ?>][libelle]" type="text" value="<?php echo $row['libelle']; ?>" size="45"></td>
         <td><input name="data[<?php echo $i; ?>][action]" type="text" value="<?php echo $row['action']; ?>" size="15"></td>
         <td><input name="data[<?php echo $i; ?>][libelle]" type="text" value="<?php echo $row['description']; ?>" size="55"></td>
         <td><input type="text" name="data[<?php echo $i; ?>][date]" value="<?php $jours = date('d-m-Y',strtotime($row['date_action'])) ; echo $get_date($jours) ; ?>" size="12"></td>
      </tr>
      <?php endwhile; ?>
      <p>
         <strong>Décalage des date </strong>
         <table width="150" border="0" cellspacing="0" cellpadding="0">
            <tr>
               <td align="center" bgcolor="#FFFF99">
                  <input type="image" src="images/minus_remove_green.png" width="22" height="22" name="submit"  value="moins" />
                  <input name="jours" type="text" value="" size="5" />
                  <input type="image" src="images/plus_add_green.png" width="22" height="22" name="submit" value="plus" />
               </td>
            </tr>
         </table>
d'office il m'incrémente 10 jours, sans que je ne lui ai demandé. Par exemple, j'ai des enregistrements au 8 mai dans ma bdd, et lui il m'affiche avec la condition < a now() le 18 mai, or si c'était le cas ca ne serait pas possible.

du coup je ne sais pas, je penses que cela vient de la fonction, mais je ne sais pas comment et pourquoi.

ViPHP
ViPHP | 2577 Messages

11 mai 2012, 13:49

Via phpmyadmin, tu peux essayer de faire la requete :
SELECT date_action,now()  FROM liasse_a where   date_action < now() order by date_action
Ca te donnera peu être une idée.

Mammouth du PHP | 702 Messages

11 mai 2012, 16:12

ça m'a sorti cela comme résultat:
2012-05-11	2012-05-11 16:12:02
2012-05-11	2012-05-11 16:12:02
2012-05-11	2012-05-11 16:12:02
donc ça doit être l'heure qui fait bugger?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 mai 2012, 17:56

Ben en l'occurrence il ne te sors pas de 18 mai, et le 11/05 est bien inférieur au 11/05 16h12 .. donc à priori ta requête est bonne.

A voir peut être ce que fait ta fonction $get_date qui ne semble pas traficoter ta date comme tu le souhaiterais :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...