Page 1 sur 1

affichage tableau après if ... while ... else

Posté : 05 janv. 2012, 17:23
par fatih
Bonjour,
J'essaie d'afficher dans un coin de ma page un petit tableau dans lequel les données sont récupérés depuis une BdD.

La table se présente comme ceci :

Image

Un 1er traitement est effectué avant l'affichage, je résume :
- comparaison de la date du jour avec celles de la base colonne 'tarih'
- si on retrouve la date du jour, on affiche ligne par ligne les heures de chaque colonne suivante

Evidemment, ça ne marche pas. Ci-dessous le code testé :

Code : Tout sélectionner

<table> <?php // Parametres mysql define('DB_SERVER', '***'); // serveur mysql define('DB_SERVER_USERNAME', '***'); // nom d'utilisateur define('DB_SERVER_PASSWORD', '***'); // mot de passe define('DB_DATABASE', '***'); // nom de la base // Connexion au serveur mysql $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) or die('Impossible de se connecter : ' . mysql_error()); // sélection de la base de données mysql_select_db(DB_DATABASE, $connect); // sending query $result = mysql_query("SELECT tarih FROM `namaz` LIMIT 0 , 30"); if (!$result) { die("Query to show fields from table failed"); } $todays_date = date("d/m/Y"); $fields_num = mysql_num_fields($result); if ($result = $todays_date) { while($val = mysql_fetch_array($result, MYSQL_NUM)) { $ligne = "<tr>"; $ligne .="<td>".$val[1]."</td>"; $ligne .="<td>".$val[2]."</td>"; $ligne .="<td>".$val[3]."</td>"; $ligne .="<td>".$val[4]."</td>"; $ligne .="<td>".$val[5]."</td>"; $ligne .="<td>".$val[6]."</td>"; $ligne .="<td>".$val[7]."</td>"; $ligne .="</tr>"; echo $ligne; mysql_close(); } } else { echo ("Table à mettre à jour"); } ?>

Merci
Bonne journée

Re: affichage tableau après if ... while ... else

Posté : 05 janv. 2012, 19:55
par Aureusms
regarde ici:
if ($result = $todays_date)
, il manque 1 =
En plus $result te sert de ressource SQL.
En faisant cela tu écrases ta variable et tu ne peux pas tester si $todays_date == $result car je ne pense pas que $todays_date soit aussi une ressource SQL
Dernier point où créé tu ta constante MYSQL_NUM ?

Re: affichage tableau après if ... while ... else

Posté : 05 janv. 2012, 20:17
par fatih
OK, merci,

En gardant juste

Code : Tout sélectionner

if ($result = $todays_date)
et en mettant

Code : Tout sélectionner

echo ($result);

la date est bien affiché : 05/01/2012

Par contre en ajoutant la partie 'tableau', je butte sur l'affichage des autres éléments.

Du coup, comment je ne peux pas récupérer cette date et les valeurs des autres colonnes de cette date :?

Pour la contante, MYSQL_NUM, elle n'est crée nulle part, je pensais plutôt qu'elle servait à indiquer les 'id' des colonnes >> val[1] en tant que fonction php de mysql_fetch_array(), non ?

Re: affichage tableau après if ... while ... else

Posté : 06 janv. 2012, 00:03
par Aureusms
Tu ne peux pas faire ainsi.

if ($result = $todays_date) est différent de if ($result == $todays_date)
Le premier tu écrases la variable $result par $todays_date. La seconde tu tests si $todays_date est égale à $result.
En clair if ($result = $todays_date) ne sert à rien car retournera toujours vrai.
Les fonctions mysql ont besoin d'un identifiant de connexion mysql pour fonctionner. Cet identifiant est créé ici :
$connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD)
or die('Impossible de se connecter : ' . mysql_error());
Ensuite tu créé ta ressource SQL $result ici
$result = mysql_query("SELECT tarih FROM  `namaz` LIMIT 0 , 30");
if (!$result) {
    die("Query to show fields from table failed");
}
Enfin tu voudrais la décompiler là :
$val = mysql_fetch_array($result)
Malheureusement tu écrases ta ressource SQl avec ($result = $todays_date)

Je t'ai corrigé ton code
<table>
<?php
// Parametres mysql
define('DB_SERVER', '***'); // serveur mysql
define('DB_SERVER_USERNAME', '***'); // nom d'utilisateur
define('DB_SERVER_PASSWORD', '***'); // mot de passe
define('DB_DATABASE', '***'); // nom de la base

// Connexion au serveur mysql
$connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) or die('Impossible de se connecter : ' . mysql_error());
// sélection de la base de données
mysql_select_db(DB_DATABASE, $connect) or or die('Impossible de connecter la base de donnée : ' . mysql_error());

// sending query
$requete = "SELECT tarih FROM  `namaz` LIMIT 0 , 30";
$result = mysql_query($requete) or die('problème de requête : ' . mysql_error());


$maintenant = date("d/m/Y");
$fields_num = mysql_num_fields($result); //ne sert pas à grand chose....

echo '<table'>;
while($val = mysql_fetch_array($result))
   {
      if ($val["tarih"] == $maintenant)
         $ligne = "<tr>";
         $ligne .="<td>".$val[1]."</td>";
         $ligne .="<td>".$val[2]."</td>";
         $ligne .="<td>".$val[3]."</td>";
         $ligne .="<td>".$val[4]."</td>";
         $ligne .="<td>".$val[5]."</td>";
         $ligne .="<td>".$val[6]."</td>";
         $ligne .="<td>".$val[7]."</td>";
         $ligne .="</tr>";
         echo $ligne;
      else
         echo ("Table à mettre à jour");
   }
echo '</table>';
mysql_close($connect);
?>

Re: affichage tableau après if ... while ... else

Posté : 06 janv. 2012, 00:34
par fatih
Bonsoir,

J'ai compilé ton code, mais j'ai eu des erreurs et après rectification voici le code :

Code : Tout sélectionner

// Connexion au serveur mysql $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) or die('Impossible de se connecter : ' . mysql_error()); // sélection de la base de données mysql_select_db(DB_DATABASE, $connect); // sending query $requete = "SELECT tarih FROM `namaz` LIMIT 0 , 30"; $result = mysql_query($requete) or die('problème de requête : ' . mysql_error()); $maintenant = date("d/m/Y"); echo '<table>'; while($val = mysql_fetch_array($result)) { if ($val["tarih"] == $maintenant) { $ligne = "<tr>"; $ligne .="<td>".$val[1]."</td>"; $ligne .="<td>".$val[2]."</td>"; $ligne .="<td>".$val[3]."</td>"; $ligne .="<td>".$val[4]."</td>"; $ligne .="<td>".$val[5]."</td>"; $ligne .="<td>".$val[6]."</td>"; $ligne .="<td>".$val[7]."</td>"; $ligne .="</tr>"; echo $ligne; } else { echo ("Table à mettre à jour"); } } echo '</table>'; mysql_close($connect); ?>
Par contre, le résultat ne semble pas être bon. J'obtiens une succession (28 fois) du message :
Table à mettre à jour

Cdt

Re: affichage tableau après if ... while ... else

Posté : 06 janv. 2012, 07:59
par xTG
tarih est quoi ? Une colonne de type DATE ? DATETIME ? VARCHAR ?
Quel est le format de la date qui est dedans ?

Re: affichage tableau après if ... while ... else

Posté : 06 janv. 2012, 10:45
par Shenryu
[quote=""fatih"]si on retrouve la date du jour, on affiche ligne par ligne les heures de chaque colonne suivante[/quote]
A quoi sert ton test du coup ? Si tu veux afficher les lignes correspondant à la date du jour, autant ne récupérer que ces valeurs en base en ajoutant une clause WHERE à ta requête SQL. Ce sera nettement plus performant et simple car tu n'auras qu'à tester ta requête et en afficher les résultats et non passer par un traitement supplémentaire avec PHP.

Qui plus est, cela rendra utile ton LIMIT 0, 30 pour l'affichage des données.

Re: affichage tableau après if ... while ... else

Posté : 06 janv. 2012, 11:53
par sirakawa
Ce serait sûrement mieux si le champ tarih était un champ Mysql date (à remplir correctement YYYY-MM-DD) et
$requete = "select * from table where tireh = date(now());";