Modification d'un script de gestion de salle

Eléphant du PHP | 71 Messages

01 juin 2006, 10:48

Bonjour je modifie actuellement un script de gestion de salle, mon probleme se situe au niveaux de l'affichage des ressources reservées.

a l'origine, l'affichage se fait dans un tableaux ou les colones sont les jours du mois, les lignes sont les salles disponibles et donc les cellules la reservation d'une salle.

aprés avoir modifié l'affichage de ces reservation (dans les cellules) le tableaux me pose un gros probleme de mise en page, de ce fait je desire remodeler le script pour obtenir un tableaux où les colones serait les salles et les lignes les jours du mois.

voici le script modifié mais qui ne fonctionne pas :
<?php
echo "<table border=2 width=\"980px\">\n";
// recupere toutes les salles dispo
$sql = "select room_name, capacity, id, description from grr_room where area_id=$area order by order_display,room_name";
$res = sql_query($sql);
// ouverture d'une ligne d'entete
echo "<tr><th></th>";
// pour chaque salle
for ($ir = 0; ($row = sql_row($res, $ir)); $ir++){
	// affiche une cellule d'entete contenant le nom de la salle
	echo "<th>" . htmlspecialchars($row[0]) ."</th>";
}
echo "</tr>";
// declaration du timestamp
$t2=0;
// pour choque jour du mois
for ($k = 0; $k<$days_in_month; $k++) {
	// calcul du jour courant
    $cday = date("j", $t2);
    // ajoute 24h au timestamp
    $t2 += 86400;
    // ouverture d'une ligne
    echo "<tr>\n";
    echo "<td valign=top height=50 class=\"cell_month\"><div class=\"monthday\"><a title=\"".htmlspecialchars($vocab["see_all_the_rooms_for_the_day"])."\"   href=\"day.php?year=$year&month=$month&day=$cday&area=$area\">$cday</a></div></td>\n";
	// pour chaque salle
	for ($ir = 0; ($row = sql_row($res, $ir)); $ir++){
		// affiche l'heure des reservation dans
		echo "<td>".$d[$cday]["data"][$i]."</td>";
		// puis les reste des detail ...
		// ......
	}
    echo "</tr>";
}
echo "</table>\n";
?>
voici les fonctions que j'utilise :
<?php
function sql_query ($sql)
{
    $r = mysql_query($sql);
    return $r;
}
function sql_row ($r, $i)
{
    if ($i >= mysql_num_rows($r))
    {
        mysql_free_result($r);
        return 0;
    }
    mysql_data_seek($r, $i);
    return mysql_fetch_row($r);
}
?>
la je recupere les reservation :
<?php

$sql = "SELECT
			start_time,
			end_time,
			grr_entry.id,
			name,
			create_by,
			room_name,
			statut_entry,
			grr_entry.description
		FROM
			grr_entry inner join grr_room on grr_entry.room_id=grr_room.id
		WHERE
			(start_time <= $month_end AND end_time > $month_start and area_id='".$area."')
		ORDER
			by start_time,
			end_time,
			grr_room.room_name";
			
for ($i = 0; ($row = sql_row($res, $i)); $i++){
	$d[$day_num]["id"][] = $row[2];
	$d[$day_num]["who"][] = $row[3]." - ".$vocab["created_by"].$row_user[0]." ".$row_user[1];
	$d[$day_num]["who1"][] = $row[3];
	$d[$day_num]["room"][] = $row[5] ;
	$d[$day_num]["res"][] = $row[6];
	if ((isset($display_full_description)) and ($display_full_description==1))
		$d[$day_num]["description"][] = $row[7];
}
?>
voici l'erreur que j'obtient :

Code : Tout sélectionner

Warning: mysql_num_rows(): 251 is not a valid MySQL result resource in c:\program files\easyphp1-8\www\gessal\mysql.inc.php on line 100 Warning: mysql_free_result(): 251 is not a valid MySQL result resource in c:\program files\easyphp1-8\www\gessal\mysql.inc.php on line 10
mysql.inc.php etant le fichier contenant les fonctions.

je suis sur que mon erreur viens des boucles que je n'utilise pas correctement !

si quelqu'un comprend le resultat desiré un peu d'aide serait la bienvenue.

merci d'avance.

ViPHP
ViPHP | 3607 Messages

01 juin 2006, 10:59

tu n'a pas utilisé ta fonction sql_query(), du coup tu ne passes pas les bonnes ressources à ta fontcion sql_row() essaye comme ça:
for ($i = 0; ($row = sql_row(sql_query($sql), $i)); $i++){ 

ViPHP
ViPHP | 2144 Messages

01 juin 2006, 10:59

Tu as une erreur dans le select je dirais.
Fait un print de la requêtte et exécute là dans phpmyAdmin, pour voir qui cloche.

Eléphant du PHP | 71 Messages

01 juin 2006, 12:06

tu n'a pas utilisé ta fonction sql_query()
j'utilise bien la fonction sql query quand je declare $res, mais je suis d'accord avec toi sur le fait que je ne doit pas passer les bons parametre a ma fonction.
$sql = "select room_name, capacity, id, description from grr_room where area_id=$area order by order_display,room_name";
$res = sql_query($sql);
for ($ir = 0; ($row = sql_row($res, $ir)); $ir++){ //blabla}
je me suis rendu compte de ceci:

quand j'apelle ma fonction, en fin de boucle cette derniere remplace le contenu de $row par 0.

ce qui fait que lors du 2em apel de cette fonction (dans la 2em boucle) $row n'est plus valide, d'ou l'erreur mysql_num_rows(): 251 is not a valid MySQL je pense.

j'ai donc encore modifié le code comme ceci :

echo "<table border=2 width="980px">\n";
// recupere toutes les salles dispo
$sql = "select room_name, capacity, id, description from grr_room where area_id=$area order by order_display,room_name";
$res = sql_query($sql);
// ouverture d'une ligne d'entete
echo "<tr><th></th>";
// pour chaque salle
for ($ir = 0; ($row = sql_row($res, $ir)); $ir++){
	// affiche une cellule d'entete contenant le nom de la salle
	echo "<th>" . htmlspecialchars($row[0]) ."</th>";
}
// recupere toutes les salles dispo une seconde fois car $row à été vidé
$sql = "select room_name, capacity, id, description from grr_room where area_id=$area order by order_display,room_name";
$res = sql_query($sql);
// declaration du timestamp
$t2=0;
// pour choque jour du mois
for ($k = 0; $k<$days_in_month; $k++) {
	// calcul du jour courant
    $cday = date("j", $t2);
    // ajoute 24h au timestamp
    $t2 += 86400;
    // ouverture d'une ligne
    echo "<tr>\n";
    echo "<td valign=top height=50 class="cell_month"><div class="monthday"><a title="".htmlspecialchars($vocab["see_all_the_rooms_for_the_day"]).""   href="day.php?year=$year&month=$month&day=$cday&area=$area">$cday</a></div></td>\n";
	// pour chaque salle
	$i=0;
	while($row = mysql_fetch_row($res)){
	echo "<td>".$d[$cday]["data"][$i]."</td>";
	}
	
	/*for ($ir = 0; ($row = sql_row($res, $ir)); $ir++){
		// affiche l'heure de reservation
		echo $d[$cday]["data"][$i];
	}
    echo "</tr>";*/
}
echo "</table>\n";

Jojolapin
Invité n'ayant pas de compte PHPfrance

01 juin 2006, 13:45

et ça marche?

Eléphant du PHP | 71 Messages

01 juin 2006, 15:37

oula c'est vrai dezolé j'ai posté un peu vite je devait aller mager :?

ca fonctionne un peu mieux je n'ai plus l'erreur mysql_num_rows grace a la boucle while ( avec la boucle for en commentaire ca persiste ) mais il m'est tj impossible d'obtenir le resultat desiré.

par contre je pense ne pas avoir donné toute les infos pour que vous puissiez m'aider alors je vais m'expliquer un peu.

donc, je cherche a modifier l'affichage d'un tableau de reservation de salles créer a l'aide d'une base de donnée.
pour ce-faire le script utilise 1 table pour les reservation puis une seconde pour les salles disponibles.

le resultat desiré est celui-ci :

1. Recuperation des reservation
2. Recuperation des infos de salles (noms,id,...)
3. Ouverture d'une table html
4. Creation d'une ligne d'entete
5. Dans cette ligne creation de cellules contenant les diferentes salles dispo.
6. Fermeture de l'entete
7. Creation des 30/31 ligne de chaque jours du mois (boucle)
8. Dans chaque ligne creation de cellules equivalent au nombre de salles (boucle while)
9. pour chaque cellules verifie si reservation pour ce jour et pour cette salle.
10. Si reservation -> affichage details reservation.
11. Fermeture de chaque lignes
12. Fermeture de la table html

voici le code:

en premier lieu, je recupere toute les reservations
$sql = "SELECT 
            start_time, 
            end_time, 
            grr_entry.id, 
            name, 
            create_by, 
            room_name, 
            statut_entry, 
            grr_entry.description 
        FROM 
            grr_entry inner join grr_room on grr_entry.room_id=grr_room.id 
        WHERE 
            (start_time <= $month_end AND end_time > $month_start and area_id='".$area."') 
        ORDER 
            by start_time, 
            end_time, 
            grr_room.room_name"; 
je les stock
for ($i = 0; ($row = sql_row($res, $i)); $i++) 
{ 
        $d[$day_num]["id"][] = $row[2]; 
        $d[$day_num]["who"][] = $row[3]." - ".$vocab["created_by"].$row_user[0]." ".$row_user[1]; 
        $d[$day_num]["who1"][] = $row[3]; 
        $d[$day_num]["room"][] = $row[5] ; 
        $d[$day_num]["res"][] = $row[6]; 
        if ((isset($display_full_description)) and ($display_full_description==1)) 
            $d[$day_num]["description"][] = $row[7]; 
}
je crée le tableau
echo "<table border=2 width=\"980px\">\n";
recupere toutes les salles dispo
$sql = "select room_name, capacity, id, description from grr_room where area_id=$area order by order_display,room_name";
$res = sql_query($sql);
ouverture d'une ligne d'entete
echo "<tr><th></th>";
// pour chaque salle
for ($ir = 0; ($row = sql_row($res, $ir)); $ir++){
	// affiche une cellule d'entete contenant le nom de la salle
	echo "<th>" . htmlspecialchars($row[0]) ."</th>";
}
recupere toutes les salles dispo une seconde fois car $row à été vidé
$sql = "select room_name, capacity, id, description from grr_room where area_id=$area order by order_display,room_name";
$res = sql_query($sql);
je crée les 31 ligne pour chaque jour du moi
// declaration du timestamp
$t2=0;
// pour choque jour du mois
for ($k = 0; $k<$days_in_month; $k++) {
	// calcul du jour courant
    $cday = date("j", $t2);
    // ajoute 24h au timestamp
    $t2 += 86400;
    // ouverture d'une ligne
    echo "<tr>\n";
    // affiche le no du jour dans la 1er cellule
    echo "<td><div><a href=\"day.php?year=$year&month=$month&day=$cday&area=$area\">$cday</a></div></td>\n";
creation des cellules de chaque salle
	// pour chaque salle
	$i=0;
	while($row = mysql_fetch_row($res)){
	echo "<td>".$d[$cday]["data"][$i]."</td>";
	}
	
	/*for ($ir = 0; ($row = sql_row($res, $ir)); $ir++){
		// affiche l'heure de reservation
		echo $d[$cday]["data"][$i];
	}
fermeture de chaque ligne
    echo "</tr>";*/
}
fermeture de la table html
echo "</table>\n";
voila j'espere que vous voyez un peu mieux d'ou viens mon probleme, grace a la boucle while j'arrive a l'etape 8 sans soucis malheureusement cela ne fonctionne que pour la premiere ligne.