Page 1 sur 1

Récupération donnée d'une table dans un tableau

Posté : 09 juin 2019, 13:02
par kevinjk
Bonjour,

Je voudrais afficher les données d'une table sous forme de tableau, le problème est que cela ne s'affiche pas. Cela me mets code erreur : (!) Avertissement: argument non valide fourni pour foreach () dans C: \ wamp64 \ www \ Livre \ fonctions.php à la ligne 125.
Voici mon code séparer en deux pages:

Ma première page :

Code : Tout sélectionner

$_database = new PDO('mysql:host=localhost;dbname=Livre', 'root',''); function db_selectionner_tous ( $sql, $valeurs=null, $array=null){ global $_database; $stmt = $_database-> prepare($sql); $stmt -> execute($valeurs); html_table(); db_log($stmt); return $stmt->fetchAll(PDO::FETCH_ASSOC); } function afficher ( $text) { echo "<pre>"; print_r($text); echo "</pre>"; } function html_table($array = null) { $html = '<table>' ; // colonnes $html .= '<tr>nknju'; foreach($array[0] as $key=>$value) { $html .= '<th>' .$key .'</th>'; } $html .= '</tr>'; //ligne foreach ( $array as $key=>$value) { $html .= '<tr>'; foreach($value as $key2=>$value2) { $html .= '</tr>'; } $html .= '</table>';return $html; }
Deuxieme page :

Code : Tout sélectionner

case "LISTE_FAMILLE" : $array = db_selectionner_tous("SELECT * FROM FAMILLE"); html_table($array); break;
Merci de m'aider je trouve pas l’erreur

Re: Récupération donnée d'une table dans un tableau

Posté : 09 juin 2019, 13:20
par Saian
Salut, en admettant que PDO::fetchAll retourne bien un tableau vide quand la requête ne retourne aucun résultat :
function html_table($lines = null)
{
  if (!count($lines))
    return '<p>No data returned</p>';

  $html = '<table>';

  // columns
  $html .= '<thead><tr>';
  foreach ($lines[0] as $colname => $value) {
    $html .= "<th>$colname</th>";
  }
  $html .= '</tr></thead>';

  // lines
  $html .= '<tbody>';
  foreach ($lines as $cols) {
    $html .= '<tr>';
    foreach ($cols as $value) {
      $html .= "<td>$value</td>";
    }
    $html .= '</tr>';
  }
  $html .= '</tbody>';

  $html .= '</table>';
  return $html;
}

EDIT : je viens de voir ton problème, c'est que dans db_selectionner_tous tu appelles html_table sans paramètre, donc dans html_table, $array est null et un foreach null provoque l'erreur que tu as (l'argument fourni à foreach n'est pas valide). Dans la logique tu serais même sensé avoir une erreur en amont car $array[0] sur null ça doit péter une erreur aussi, mais bon, vu que c'est appelé dans le foreach, peut être que...

Re: Récupération donnée d'une table dans un tableau

Posté : 09 juin 2019, 13:39
par kevinjk
Bonjour, merci pour ta réponse j'ai toujours le même problème avec ton code

Re: Récupération donnée d'une table dans un tableau

Posté : 09 juin 2019, 13:49
par Saian
La réponse dans mon EDIT du message précédent. Pour mon code, $lines pouvant être null, le premier test devrait être :
  if (!$lines || ($lines && !count($lines)))
    return '<p>No data returned</p>';
Ainsi mon code t'aurait bien retourné le <p>No data returned</p> avec le call html_table() sans paramètre que tu as dans db_selectionner_tous...

En tout cas mon code corrige et complète bien ta fonction originale. ;)

EDIT : j'ai corrigé le if pour ne pas qu'il fasse d'erreur si $lines est null. A vérifier quand même car sans exécuter le code on pense pas toujours à tout. :mrgreen:

Re: Récupération donnée d'une table dans un tableau

Posté : 09 juin 2019, 14:13
par kevinjk
D'accord merci, cela ne retourne pas d'erreur par contre cela ne retourne pas les valeurs de la base as-tu une solution ?

Re: Récupération donnée d'une table dans un tableau

Posté : 09 juin 2019, 14:17
par Saian
Bah déjà enlève le call html_table() qui est dans db_selectionner_tous. Et vérifies dans ton switch case que $array contient bien des données. Par exemple :
  case 'LISTE_FAMILLE':
    $lines = db_selectionner_tous('SELECT * FROM FAMILLE');
    print_r($lines);
    html_table($lines);
    break;

Re: Récupération donnée d'une table dans un tableau

Posté : 09 juin 2019, 14:32
par kevinjk
Ouais d'accord cela contient bien des données je dois avoir un problèmes avec la fonction html_table je vais voir merci