[RESOLU] affiche données d'une base de données avec une requête

Eléphant du PHP | 66 Messages

01 juil. 2023, 21:21

Bonjour,

j'ai un fichier csv que je dois enregistré dans une base de données, jusque la pas de soucis ça fonction.

Puis à partir de ma base de donner que dois afficher les données de la base de données en fonction de la date.
dans mon cas je dois faire apparaitre les données des deux journées suivantes.

j'ai un message d'erreur sur la ligne : while ($row = $result->fetch_array())

Fatal error: Uncaught Error: Call to a member function fetch_array() on bool in C:\code\projet_meteo\index.php on line 42
( ! ) Error: Call to a member function fetch_array() on bool in C:\code\projet_meteo\index.php on line 42

je ne comprend pas l'erreur vient elle que je veux faire la sélection dans ma base par rapport à une date? et que je fais une erreur de saisie.

merci de votre aide

voici mon code
<?php
//connexion erveur
 $mysqli = new mysqli('localhost', 'root', '', 'bdd_meteo');
 $mysqli->set_charset("utf8");
 if ($mysqli->connect_errno) 	{
     echo 'Echec de la connection' . $mysqli->connect_error;
     exit();
 }
//traitement des données csv pour les insérer dans la bdd
if (($handle = fopen("meteo.csv", "r")) !== FALSE)
{
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
    {
        $data_utf8=[];        
       foreach($data as $item_data)
       {
            $var=str_replace('é','e',$item_data);
            $data_utf8[]=str_replace('è','e',$var);  
        
        }
            $date = $data_utf8[0];
            $ville = $data_utf8[1];
            $periode = $data_utf8[2];
            $resume = $data_utf8[3];
            $id_resume = $data_utf8[4];
            $temp_min = $data_utf8[5];
            $temp_max = $data_utf8[6];
            $commentaire = $data_utf8[7];
        
            $mysqli->query('INSERT INTO infos_meteo (jour, ville, periode, resume, id_resume, temp_min, temp_max, commentaire) 
            VALUES ("'. $date .'" , "'. $ville .'" ,"'. $periode .'" , "'. $resume .'" , "'. $id_resume .'" , "'. $temp_min .'" , "'. $temp_max .'" , "'. $commentaire .'")');
    }   
    fclose($handle);
}



$day='2100-12-05';

$result = $mysqli->query('SELECT info_meteo_id, jour, ville, periode, resume, id_resume, temp_min, temps_max, commentaire FROM infos_meteo WHERE jour > "'.$day.'"');
//création du nouvel array
while ($row = $result->fetch_array())
{
    $jours[$row['info_meteo_id']] = $row['jour'];
    $villes[$row['info_meteo_id']] = $row['ville'];
    $periodes[$row['info_meteo_id']] = $row['periode'];
    $id_resumes[$row['info_meteo_id']] = $row['id_resume'];
    $temp_mins[$row['info_meteo_id']] = $row['temp_min'];
    $temp_maxs[$row['info_meteo_id']] = $row['temp_max'];
    $commentaires[$row['info_meteo_id']] = $row['commentaire'];
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <ul>
        <?php foreach($jours as $info_meteo_id => $jour) : ?>
            <li> <?php echo $jour ?></li>
            <?php endforeach ?>
    </ul>
    
</body>
</html>


Eléphant du PHP | 66 Messages

01 juil. 2023, 21:56

ayant un problème de Boolean j'ai modifier mon code mais toujours le même message d'erreur !!

est ce que le format d'une date dans un bdd est un string??

voici mon nouveau code
<?php
//connexion erveur
 $mysqli = new mysqli('localhost', 'root', '', 'bdd_meteo');
 $mysqli->set_charset("utf8");
 if ($mysqli->connect_errno) 	{
     echo 'Echec de la connection' . $mysqli->connect_error;
     exit();
 }
//traitement des données csv pour les insérer dans la bdd
if (($handle = fopen("meteo.csv", "r")) !== FALSE)
{
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
    {
        $data_utf8=[];        
       foreach($data as $item_data)
       {
            $var=str_replace('é','e',$item_data);
            $data_utf8[]=str_replace('è','e',$var);  
        
        }
            $date = $data_utf8[0];
            $ville = $data_utf8[1];
            $periode = $data_utf8[2];
            $resume = $data_utf8[3];
            $id_resume = $data_utf8[4];
            $temp_min = $data_utf8[5];
            $temp_max = $data_utf8[6];
            $commentaire = $data_utf8[7];
        
            $mysqli->query('INSERT INTO infos_meteo (jour, ville, periode, resume, id_resume, temp_min, temp_max, commentaire) 
            VALUES ("'. $date .'" , "'. $ville .'" ,"'. $periode .'" , "'. $resume .'" , "'. $id_resume .'" , "'. $temp_min .'" , "'. $temp_max .'" , "'. $commentaire .'")');
    }   
    fclose($handle);
}




?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

<?php
$day='2100-12-05';

$result = $mysqli->query('SELECT info_meteo_id, jour, ville, periode, resume, id_resume, temp_min, temps_max, commentaire FROM infos_meteo WHERE jour > "'.$day.'"');
//création du nouvel array
$row = $result->fetch_array();
if ($row[0] <= 0)
{
    echo ' n\'est pas dans notre base.';
}   
else 
{
       
        $result = $mysqli->query('SELECT info_meteo_id, jour, ville, periode, resume, id_resume, temp_min, temps_max, commentaire FROM infos_meteo');
       
        while ($row = $result->fetch_array()) {
           
            $jours[$row['info_meteo_id']] = $row['jour'];
            $villes[$row['info_meteo_id']] = $row['ville'];
            $periodes[$row['info_meteo_id']] = $row['periode'];
            $id_resumes[$row['info_meteo_id']] = $row['id_resume'];
            $temp_mins[$row['info_meteo_id']] = $row['temp_min'];
            $temp_maxs[$row['info_meteo_id']] = $row['temp_max'];
            $commentaires[$row['info_meteo_id']] = $row['commentaire'];
        }
        
}

?>

    <ul>
        <?php foreach($jours as $info_meteo_id => $jour) : ?>
            <li> <?php echo $jour ?></li>
            <?php endforeach ?>
    </ul>
    
</body>
</html>

Mammouth du PHP | 2703 Messages

01 juil. 2023, 23:00

il faut afficher la requête sql et l'exécuter dans phpmyadmin pour savoir pourquoi la requête retourne une erreur.

Eléphant du PHP | 66 Messages

01 juil. 2023, 23:27

merci pour l'idée j'ai pas les bons reflexes....

voici ma requete :

SELECT infos_meteo_id, jour, ville, periode, resum, id_resume, temp_min, temp_max, commentaire FROM infos_meteo WHERE jour = 2100-12-05;

voici le message d'erreur :
Warning: #1292 Incorrect date value: '2083' for column 'jour' at row 1

voici ma requete en php
$day='2100-12-06';

$result = $mysqli->query('SELECT infos_meteo_id, jour, ville, periode, resum, id_resume, temp_min, temp_max, commentaire FROM infos_meteo WHERE jour > "'.$day.'"');

Mammouth du PHP | 2703 Messages

01 juil. 2023, 23:51

echo 'SELECT infos_meteo_id, jour, ville, periode, resum, id_resume, temp_min, temp_max, commentaire FROM infos_meteo WHERE jour > "'.$day.'"';
cela affiche bien
SELECT infos_meteo_id, jour, ville, periode, resum, id_resume, temp_min, temp_max, commentaire FROM infos_meteo WHERE jour = 2100-12-05
???????????

Eléphant du PHP | 66 Messages

05 juil. 2023, 22:51

j'ai trouver la solution !!
encore merci de votre aide