Salut,
Pour commencer tu n'as pas besoin de faire de boucle pour parcourir le tableau $_POST['commandes'] puisque tu utilises la fonction implode pour cela (la preuve est les variables de tes boucles $val et $i ne sont pas utilisées).
Ton problème vient de l'ajout des guillemet autour de implode pour construire ta requête, ceci fonctionne pour un seul élément :
SELECT * FROM commande WHERE num_com IN ('13')
mais ne fonctionne pas avec plusieurs :
SELECT * FROM commande WHERE num_com IN ('13, 25, 42')
la syntaxe de la requête générée n'est pas correcte : on cherche les commandes dont le num_com vaut '13, 25, 42' au lieu de chercher les commandes dont le num_com vaut '13' ou '25' ou '42'.
Puisque tes identifiants sont des entiers, pas besoin de les entourer de guillemets.
Ce qui donne une fois corrigé :
<?php
require('pages/base.php');
$link=mysql_connect("$host","$user","$password") or die('<font color=red>Erreur de connnection</font><br> '.mysql_error() );
// selectionner la base des données
mysql_select_db("$bd") or die('<font color=red>Base inexistante</font><br> '.mysql_error() );
//Premiere ligne = nom des champs (si on en a besoin)
$csv_output = "numero;commande;patient;type prothèse";
$csv_output .= "\n";
if(isset($_POST['commandes'])){
$ids="(" . implode(',', $_POST['commandes']) . ")";
$query = "SELECT * FROM commande WHERE num_com IN $ids";
$result = mysql_query($query) or die('Erreur SQL !<br />' . $query . '<br />' . mysql_error());
//Boucle sur les resultats
while($row = mysql_fetch_array($result)) {
$csv_output .= "$row[id_com];$row[num_com];$row[patient];$row[type_proth];$ids\n ";
}
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=Expedition_".$ids.".". date("Ymd").".csv");
header("Content-Type: text/csv; charset=utf-8");
print $csv_output;
exit;
}
La requête générée avec plusieurs éléments est alors correcte :
SELECT * FROM commande WHERE num_com IN (13, 25, 42)
Bonne journée