bonjour a tous,
j'ai une base de donnée qui contient un champ date et je souhaiterais faire une requête qui me sélection tout les client présent entre deux date entrée au préalable.
Voici le code que j'ai utilisé et l'erreur que j’obtiens merci bien
Erreur : ( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1' in C:\wamp\www\gestion_atelier\admin\admin.php on line 7
code php :
<?php
include '../connect.php';
include '../include/include_head.php';
if(isset ($_POST'date_un']) AND isset ($_POST'date_deux'])){
$q = $bdd -> query ("SELECT * FROM reparation INNER JOIN clients ON clients.id = reparation.id_clients WHERE reparation.livraison=(SELECT MIN({$_POST'date_un']}) AND reparation.livraison=(SELECT MIN({$_POST'date_deux']})FROM reparation");
$info = $q -> fetch();
print_r($info);
}
?>
<div id="global_content">
<div id="content">
<form method="post" action="admin.php" id="admin">
<p>
<label for="date_un">Du :*</label>
<input type="text" name="date_un" id="date_un" />
</p>
<p>
<label for="date_deux">Au :*</label>
<input type="text" name="date_deux" id="date_deux" />
</p>
<p>
<label for="paiement">Materiel :*</label>
<select name="paiement" id="paiement">
<option>CB</option>
<option>Cheque</option>
<option>Espèce</option>
</select>
</p>
<input type="submit" class="btn_input"/>
</form>
</div>
</div>
oui pour les injection je sais j'ai d'ailleur suivis ton tuto deja, la je veux juste dans info pour ma requete car le MIN et MAX je ne l'ai jamais utiliser...
pour resumer je veux selectioné tout les champs de la table répration en la joignant la table client par l'id, qui on une date comprise entre le
$_POST'date_un']
et le
$_POST'date_deux']
entrée au préalable dans les input.
Ben fait un livraison BETWEEN "date_un" AND "date_deux" si livraison est bien le champ date :)
En gros ça fait un : SELECT monChamp FROM table WHERE date BETWEEN "2011-05-12" AND "2011-10-12"
$totaux = 0; //A mettre au dessus du while
//dans le while
$totaux += $info'total'];
//Après le while
echo $totaux;
Tu as pas mal d'erreur sur ta requête, le FROM collé à la date et les date qui ne sont pas entre "" et dans l'état actuel tu peux te faire hacker par injection (j'ai fait un tuto qui explique comment s'en protéger)
Je pense que la solution de Grégory est la bonne.
Cependant j'ai une question :
Pourquoi fais-tu une jointure sur la table clients alors que tu n'y sélectionnes aucune données, et n'utilisent pas de filtre (hormis la jointure).
Tu as des réparations qui ne sont pas rattachées à des clients ?
je fais une jointure car aprés j'ai besoin d'afficher l'id du client le nom et autre renseignement.
j'ai une dernière petite question tout fonctionne correctement j'aimerai maintenant additionné tout les résultats de la colonne TOTAL
voici mon code actualisé :
<?php
include 'connect.php';
include 'include/include_head.php';
if(isset($_POST'date_un']) AND isset($_POST'date_deux'])){
if(!empty($_POST'date_un']) AND !empty($_POST'date_deux'])){
?>
<table>
<caption>Tableau des Répations</caption>
<thead>
<th>N° facture</th>
<th>Société</th>
<th>Nom</th>
<th>Date de sorti</th>
<th>Réparation et matériel</th>
<th>Prix MO</th>
<th>Prix Matos</th>
<th>Total HT</th>
</thead>
<tbody>
<?php
$q = $bdd -> query ("SELECT * FROM reparation INNER JOIN clients ON clients.id = reparation.id_clients WHERE reparation.livraison BETWEEN '{$_POST'date_un']}' AND '{$_POST'date_deux']}';");
while ($info = $q -> fetch()){
$livraison = new DateTime($info'livraison']);
?>
<tr>
<td><?php echo $info'num_fact']; ?></td>
<td><?php echo $info'societe']; ?></td>
<td><?php echo $info'nom'];?></td>
<td><?php echo $livraison -> format('d-m-Y'); ?></td>
<td><?php echo $info'designation_mo']."<br/>".$donnee'designation_matos']; ?></td>
<td><?php echo $info'prix_mo']; ?></td>
<td><?php echo $info'prix_matos']; ?></td>
<td><?php echo $info'total']; ?></td>
</tr>
<?php }?>
</tbody>
</table>
<?php
}else {
echo 'Merci de remplir tous les champs';
}
}
?>
<div id="global_content">
<div id="content">
<form method="post" action="admin.php" id="admin">
<p>
<label for="date_un">Du :*</label>
<input type="text" name="date_un" id="date_un" />
</p>
<p>
<label for="date_deux">Au :*</label>
<input type="text" name="date_deux" id="date_deux" />
</p>
<p>
<label for="paiement">Materiel :*</label>
<select name="paiement" id="paiement">
<option>CB</option>
<option>Cheque</option>
<option>Espèce</option>
</select>
</p>
<input type="submit" class="btn_input"/>
</form>
</div>
</div>