| | tirikou | Posté le 09/06/2006 @ 14:43 | Astucien
1028 Messages
| Bonjour,
J'ai un soucis important que je n'arrive pas à résoudre et mon site doit être en ligne lundi.
Vous pouvez voir sur mon site en construction [url]http://tirikou2.free.fr/yassala_agenda.php[/url]
ATTENTION : Ne pas visualiser sous IE
Actuellement, si vous entrez département 33 et mois 06, tout fonctionne bien et 6 messages apparaissent.
Mais voilà, j'ai intégré un script qui calcule auto le nombre de pages de messages à créer et qui devrait créer les pages et editer les messages.
Tout fonctionne bien jusqu'au nombre de pages créées mais alors, aucun mess ne s'affiche.
Est-ce qu'un oeil neuf pourrait me donner une piste ?
Voici mon code découpé mais à la suite.
//Je met le formulaire :
<div id="dpt">Indiquez le département ET le mois désirés</div>
<form method="post">
<p>
<label>Le département (ex:03 pour l'Allier) <input type="text" name="dpt" size="2" maxlength="2" /></label>
<label>Le mois (ex:06 pour juin) <input type="text" name="mois" size="2" maxlength="2" /></label>
<input type="submit" value="Envoyer" />
</p>
</form>
<div id="fin"><?php echo $separe ; ?></div>
// J'extrait les champs dans un array
<div id="agenda">
<?php
if (isset($_POST['dpt']) AND isset($_POST['mois']))
{
if (($_POST['dpt'] != NULL) AND ($_POST['mois'] != NULL))
{
?>
<div id="sortir">
<?
$ain=mysql_query("SELECT * FROM dpt WHERE num='".$_POST['dpt']."'");
$sortir=mysql_fetch_array($ain) ;
?>
<p>Les Sorties <?echo $sortir['loc']?> <?echo $sortir['let'] ;?></p>
<br/>
</div>
// Calcul du nombre de pages à créér et création des liens vers les pages
<p>
<?
// Nombre de messages qu'on veut par page
$nbrenews = 2;
// Nombre total de messages
$recup = mysql_query("SELECT COUNT(*) AS nb_news FROM agenda WHERE mois='".$_POST['mois']."'");
$don = mysql_fetch_array($recup);
$totalnews = $don['nb_news'];
// Calcul du nombre de pages à créer
$nbrepages = ceil($totalnews / $nbrenews);
// Boucle pour écrire les liens vers chacune des pages
echo 'Page : ';
for ($i = 1 ; $i <= $nbrepages ; $i++)
{
echo '<a href="yassala_agenda.php?page=' . $i . '">' . $i . '</a> ';
}
?>
</p>
// Extraction des messages de la table (nbre limitée au nombre voulu)
<?
if (isset($_GET['page']))
{
$page = $_GET['page'] ;
}
else
{
$page = 1 ;
}
$premierMessage = ($page - 1) * $nbrenews ;
$rep=mysql_query("SELECT * FROM agenda WHERE dpt=' ".$_POST['dpt']."' AND mois=' ".$_POST['mois']. " ' ORDER BY jour LIMIT ". $premierMessage . ", " . $nbrepages) ;
while($manifs=mysql_fetch_array($rep))
{
//Edition des messages
?>
<div id="table2">
<p>
<br/>
<div id="date"><?php echo $manifs['jour'] ; ?>-<?php echo $manifs['mois'] ; ?>-<?php echo $manifs['an'] ; ?></div>
<div id="ville"><?php echo $manifs['ville'] ; ?></div>
<div id="titre"><?php echo $manifs['titre'] ; ?></div>
<div id="texte"><?php echo $manifs['texte'] ; ?></div>
<?php
IF (($manifs['lieu'] != NULL) OR ($manifs['heure'] != NULL ))
{
?>
<div id="lieu"><?php echo $manifs['lieu'] ; ?> - <?php echo $manifs['heure'] ; ?></div>
<?
}
?>
<?php
IF ($manifs['tel'] != NULL)
{
?>
<div id="tel">Rens : <?php echo $manifs['tel'] ; ?></div>
<?
}
?>
<h5><?php echo $separe ; ?></h5>
<p>
</div>
<?
}
?>
<?
}
?>
<?
}
?>
</div>
Et bien sur je n'ai aucun Parse error ni autre.
je me suis gourré quelque part et ne voit plus où.
Je suis vraiment en galère.
Merci de votre aide je reste scotché à l'écran car il ne reste plus que cela pour terminer.
| | |
| |
| Publicité |
|
| | tirikou | Posté le 09/06/2006 à 15:54 | Astucien
1028 Messages
| Bon, tant pis, je retrousse les manches et reprends tout à zero.
| | | | | koala01 | Posté le 09/06/2006 à 18:16 | Astucien
4715 Messages
| Salut,
Faut pas etre si pressé… A peine une heure entre le moment où tu poste ta question, et celui où tu désepère d'avoir une réponse…
Surtout que tout le monde n'est pas forcément "apte" à répondre à une question qui mele HTML (ca beaucoup le sont) PHP et MySQL (ca, on est beaucoup moins à etre en mesure de répondre de manière cohérente)…
Pour faire les choses dans "les règles de l'art", je vais en profiter pour revoir une petite partie de ton code HTML [clindoeil]
Ainsi, la balise <label> devrait, typiquement, etre fermée après son texte et avant le champs qu'elle définit, sous la forme de
[code]<label>votre nom</label><input type="text" name="nom" id="nom" (…)/>
[/code]
La requete SQL sous la forme de
[code]$ain=mysql_query("SELECT * FROM dpt WHERE num='".$_POST['dpt']."'");[/code] est très sérieusement risquée…
Il est plus facilement relisible, du moins à mon avis, et je le partage, de créer la requete dans une variable et de l'exécuter ensuite, en se basant sur la variable, sous la forme de
[code]
$sql="SELECT * dpt table where where num='$_POST['dpt']'";
$ain=mysql_query($sql,$information_connection);
[/code]
Plusieurs remarques à ce sujet…:
- Quand tu crées une chaine de caractères avec les guillemets, si tu introduis le nom d'une variable dedans (comme je l'ai fait pour $_POST['dpt']), la variable en question est automatiquement interprétée (et on obtient donc sa valeur dans la chaine)…
- la variable $information_connection est une variable que j'ai pris l'habitude de déclarer (en fait, je l'appelle généralement $conn) dans un fichier séparé, dans un dossier protégé par htaccess, qui contient les différentes informaitons de connexion nécessaires (login, mot de passe, nom de la base de données, hote à contacter)… l'expérience m'a montrer que certains hébergeurs n'accepte pas une requete s'ils ne disposent pas de ces informaitons (par contre, tous acceptent la requete si elle leur fournit cette information)
- L'utilisation d'une valeur de champs (dont on s'attend donc à ce qu'elle a été remplie par le visiteur) doit *idéalement* etre considérée comme a priori suspecte… "tous coupables jusqu'à preuve du contraire" serait une devise idéale pour un webmaster conscientieux [clindoeil]
Je vais m'attaquer maintenat à la troisième remarque de la liste (pour la deuxième, si tu le souhaites, je t'indiquerai ce que je mets dans ce fichier externe, et comment l'appeler [clindoeil])
Ca ne va sans doute pas faire plaisir à ceux qui ne sont pas webmaster ni programmeur, mais, un webmaster doit, tout comme un programmeur, partir d'un apriori très défavorable sur ceux qui utiliseront la ressource (site web ou application) qu'il met à leur disposition…
Pour un webmaster, jusqu'à preuve du contraire, le visiteur est (excusez moi l'expression) "un c[censure] distrait qui nous veut du mal"…
Il faut donc toujours se poser la question "que se passerait-il si…"
Ce qui remplace les points de suspension prend des tournures variées, telles que
- "si l'utilisateur est distrait et introduit des espaces (seuls, devant ou derriere le numéro du département)"
- "si l'utilisateur est distrait et introduit "bretagne" au lieu du numéro du département"
- "si l'utilisateur essaye d'introduire ces balises dans le code (ex <script>while (1){alert("je t'ai eu");</script>}
- "si l'utilisateur nous veux du mal et introduit "'/";/"drop nom_de_table/"…"
- plein d'autres formes du meme style…
Hé bien, dans les trois cas, tu cours à la catastrophe si tu te contente de prendre les valeurs du champs de ton formulaire…
Dans les deux premiers cas, comme la valeur du champs ne sera jamais retrouvée, ta requete ne renverra aucun enregistrement…
Pour le troisième cas, si la la valeur du champs sert pour l'ajout ou la modification du champs, l'affichage fera afficher un zooli message d'alerte en boucle chez le visiteur suivant (l'obligeant à arreter brutalement son navigateur, si pas, carrément à redémarrer)…
Dans le quatrieme… tu risque de perdre une table (pour le code que je fournis, pire si le code est encore plus malicieux [langue])…
Le premier cas se résoud assez facilement grace à la fonction trim($variable), qui supprime les espaces surnuméraire en début et en fin de chaine…
Nous pouvons très bien envisager de récupérer le résultat de cette fonction dans une variable (nommons la recherche) du genre de
[code]$recherche=trim($_POST['dept']);
[/code]
Le deuxième cas peut se résoudre assez facilement grace aux expression régulières, par exemple, en utilisant $recherche, on peut écrire un code ressemblant à
[code]
if (ereg("^[0-9]*$", $recherche))
{
//ici, recherche est exclusivement numérique
}
else
{
//ici, recherche est, au minimum alpha-numérique (au moins une lettre,
//et peut etre un ou des chiffres)
}
[/code]
Pour le troisième cas, on peut forcer la transformation des caractères à risque (<, >, tous les caractères spéciaux ou accentués …) en entité HTML, ce qui les fera considérer par le navigateur du visiteur suivant comme étant des caractères à afficher grace à la fonction htmlentities($variable) sous la forme (on gadre $recherche comme base [clindoeil]) de
[code]$recherche=htmlentities($recherche);[/code]
Pour le troisième cas, les expressions régulières, ainsi qu'éventuellement strpos($chaine_source,"terme recherche"), mais il s'agira de déterminer quels termes on décide de refuser d'office [clindoeil]
Enfin, viennent les problèmes propres aux type de valeur fournies dans la requete…
Fournir un entier sous forme de chaine alors que le champs est un entier, ou vice versa, provoquera systématiquement des catastrophes lors de l'exécution de la requete…
La "saine habitude à prendre", après avoir vérifié la validité de l'ensemble des champs du formulaire renvoyé par le visiteur, est d'utiliser la fonction sprintf() pour créer la valeur de la requete…
Le premier argument pris par cette fonction est "la chaine de base", contenant, chaque fois que l'on souhaite insérer la valeur d'une variable, une indication du type attendu…
Le type attendu prend la forme de %d pour un entier (sous forme décimale), %s pour une chaine de caractère, %f pour un réel, et d'autres qui ne te seront sans doute jamais réellement utiles (donc, autant les passer).
La suite des argument sera le nom de chaque variable qui doit etre mise dans le bon format…
Cela signifie que, si, dans la chaine de base, tu as (…)%s(…)%s(…)%d(…)%d(…), il te faudra quatre arguments apres qui seront respectivement chaine, chaine, entier et entier (ou susceptible de l'etre)
La requete SQL serait donc créée sous la forme de
[code]$SQL=sprintf("SELECT * from table where champ1=%d and champs2=%s and champs3=%f",
$variable_de_type_entier,$variable_de_type_chaine,
$variable_de_type_reel);
[/code]
Le fait de faire exécuter une nouvelle requete "juste" pour avoir le nombre d'enregistrements renvoyés par la premiere n'a que peu d'intéret…
Tu disposes, en effet, de la fonction mysql_num_row(renvoi_requete); qui t'indiques le nombre d'enregistrements affecté par la requete… Autant l'utiliser [clindoeil]
Il faut aussi savoir que le fait de passer de l'interprétation php à du non interprété et vice versa est extrèmement couteux en ressources au niveau du serveur…
De meme que le fait de passer d'une phase de "traitement" à une phase "d'écriture", et la concaténation…
Ainsi, la ligne
[code]<div id="date"><?php echo $manifs['jour'] ; ?>-<?php echo $manifs['mois'] ; ?>-<?php echo $manifs['an'] ; ?></div>[/code]
va etre catastrophique au niveau des performances du serveur… (et d'ailleurs, on pourrait meme inclure les trois lignes qui suivent [clindoeil]
Pourquoi ne pas passer, une bonne fois pour toute du coté interprétation PHP [question] Ce qui prendrait la forme de
[code]
<div id="date"><?php echo "$manifs['jour']-$manifs['mois'] -$manifs['an']" ; ?></div>
[/code], voir, mieux, en intégrant un peu de code avant et un peu de code apres (non corrigé ici, et en m'arretant, peut etre à tord, juste avant le dernier div)
[code]<?
if (isset($_GET['page']))
{
$page = $_GET['page'] ;
}
else
{
$page = 1 ;
}
$premierMessage = ($page - 1) * $nbrenews ;
$rep=mysql_query("SELECT * FROM agenda WHERE dpt=' ".$_POST['dpt']."' AND mois=' ".$_POST['mois']. " ' ORDER BY jour LIMIT ". $premierMessage . ", " . $nbrepages) ;
while($manifs=mysql_fetch_array($rep))
{
//Edition des messages
echo"
<div id=\"table2\">
<p>
<br/>
<div id=\"date\">$manifs['jour']-echo $manifs['mois']-$manifs['an']</div>
<div id=\"ville\">$manifs['ville']</div>
<div id=\"titre\">$manifs['titre']</div>
<div id=\"texte\">$manifs['texte']</div>";//fin de l'echo
IF (($manifs['lieu'] != NULL) OR ($manifs['heure'] != NULL ))
{
echo "
<div id=\"lieu\">$manifs['lieu']-$manifs['heure']</div>";
}
IF ($manifs['tel'] != NULL)
{
echo"
<div id=\"tel\">Rens : $manifs['tel']</div>";//fin de l'echo
}
echo"<h5> $separe</h5>
<p>
</div>";//fin de l'echo
}
}
}
?>[/code]
Ce qui sera surement déjà bien meilleur au point de vue des performances de ton site…
N'oublie pas que, si tu n'a pas un serveur dédié, tu partages sans doute les capacités du serveur avec d'autres personnes[clindoeil]… et que la charge totale du serveur dépends des ressources qu'il doit mobilisr, à un moment donné, pour répondre à toutes les requetes qui lui parviennent pour tous les sites qu'il doit gérer…
Le fait d'économiser un tout petit peu les ressources à ton "humble" niveau permettra, non seulement, que ton site réponde plus rapidement, mais bénéficiera également à tous ceux qui sont hébergés aupres de toi [clindoeil]
Pour répondre, enfin [langue][rougir] à ta question, si tu souhaites que l'un ou l'autre champs de ton formulaire soit "préremplis" avec les valeurs récupérées ailleurs, il faut que tu utilises l'attribut value dans ton/tes champs, et que tu demandes à php d'y écrire la valeur qui correspond…
Cela peut se faire, comme je l'ai indiqué, sous deux formes:
[code]
echo"<label>Le département (ex:03 pour l'Allier) <input type=\"text\" name=\"dpt\" size=\"2\" maxlength=\"2\" value=\"$valeur_dep\" /></label>";
[/code]
ou
[code]<label>Le département (ex:03 pour l'Allier) <input type="text" name="dpt" size="2" maxlength="2" value="<? echo $valeur_dep; ?>/></label>[/code] ou $valeur_dep serait, bien évidemment la variable qui contient la valeur du département [clindoeil]
Si la variable n'a pas été définie, valeur restera vide [clindoeil]
PS
Je me suis laissé, une fois n'est pas coutume, emporter par ma verve et écrit un message kilométrique [rougir]…
J'en présente mes plus plattes excuses à tous ceux qui auront réussi à le lire jusqu'au bout (d'autant plus que seule l'explication finale compte pour le coup [langue]) | | | | | tirikou | Posté le 09/06/2006 à 21:45 | Astucien
1028 Messages
| Je te remercie humblement et sincèrement Koala pour ta réponse.
J'ai toujours été très impressionné par la disponibilité des membres de PCA (supérieure et de loin à tout ce que j'ai pu voir sur de multiples autres sites) et le suis encore plus.
De mon côté, je suis toujours embeté de déranger. J'ai vu que j'avais des problèmes autres et ma réaction a été de me dire qu'avant de crier au loup je devais (même si j'en avais marre) corriger toutes ces erreurs.
A force de corriger et corriger, je ne savais plus où j'en étais.
J'ai donc décidé de recoder pour revenir à une version qui m'était propre et que je maitrisais.
J'en ai profité (du moins je le pense) pour le faire le plus correctement possible. Donc d'avoir des erreurs plus claires.
J'ai entre autre mis des commentaires pour bien visualiser mes parties.
Si tu le peux, Koala et tous autres qui peuvent être dispos, je vous propose de continuer ce post en tutoriat. C'est à dire m'aider à localiser les problèmes sur un script complet et clair.
Vraiment, j'ai besoin d'aide.
Je finis mon recodage d'ici 1h environ et post mon code page.
Cette partie qui consite à créer auto des pages pour afficher les messages est le seul point du site qui me reste à résoudre pour que tout soit mis en ligne lundi. Mis à part ce fichu IE qui veut pas comprendre le standard. Je crois que la je vais tout simplement bannir tout utilisateur d'IE !
Merci encore Koala, j'essaie de prendre en compte toutes tes remarques pour recoder propre.
A +++
| | | | | tirikou | Posté le 09/06/2006 à 22:55 | Astucien
1028 Messages
| Bon ben voilà, j'ai recodé enfin je pense.
J'en ai profité rectifier tout ce que j'ai pu voir.
N'hésitez pas si vous voyez quelque chose.
A l'ouverture de la page j'inclue une page des variables de connection bdd et une page des variables utilisées sur tout le site.
Ma connection bdd est appelée dans chaque requete par la variable $link
J'ai deux fonctions externes "include" qui appellent les boutons précédents suivants et les liens vers les pages créées.
Voilà, j'ai donné tout ce que j'avais dans les tripes pour aujourd'hui.
Mais je reste scotché derrière l'écran.
Voici donc le code complet de la page :
<?php
{
include("_ftp.php") ;
}
?>
<?php
{
include("_var.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Page d'accueil du site yassala.com</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Language" content="fr" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="_style/<?php echo $css['style'] ; ?>"/>
</head>
<body>
<div id="accueil">
<p>
<span>Bonjour</span> et bienvenue sur <span>yassala.com</span>, nous sommes le <span><?php echo "$jour/$mois/$an"; ?></span>.
</p>
<?
echo '<p>Il y a actuellement <span>'.$manifs_an['manifs']</span> idées de sorties sur l\\' agenda de <span>yassala.com</span>.<br/></p>';
?>
<?
echo <p>'.$separe'<br/></p>;
?>
</div>
<div id="dpt">Indiquez le département ET le mois désirés</div>
<form method="post">
<p>
<label>Le département (ex:03 pour l'Allier) <input type="text" name="dpt" size="2" maxlength="2" /></label>
<label>Le mois (ex:06 pour juin) <input type="text" name="mois" size="2" maxlength="2" /></label>
<input type="submit" value="Envoyer"/>
<br/>
</p>
</form>
<?php
echo '<p id="fin">'.$separe.'</p>';
if (isset($_POST['dpt']) AND isset($_POST['mois']))
{
if (($_POST['dpt'] != NULL) AND ($_POST['mois'] != NULL))
{
$ain=mysql_query("SELECT * FROM dpt WHERE num='".$_POST['dpt']."'");
$sortir=mysql_fetch_array($ain,$link) ;
echo '<div id="sortir"> Les Sorties '.$sortir['loc'].' '.$sortir['let'].'</div>';
require 'fonctions.php';
// initialisation des variables
$nombre = 2;
// Si limite n'existe pas on l'initialise à zéro
if (!$limite) $limite = 0 ;
// on cherche le nom de la page.
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts["basename"];
// requête SQL qui compte le nombre total d'enregistrements dans la table.
$moi=$_POST['mois'];
$select = ("SELECT COUNT (id) FROM agenda WHERE mois='$moi' ");
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];
// Vérifier la validité de notre variable $limite;
$verifLimite= verifLimite($limite,$total,$nombre);
// si la limite passée n'est pas valide on la remet à zéro
if(!$verifLimite) {
$limite = 0;
}
// requête SQL qui ne prend que le nombre d'enregistrements nécessaire à l'affichage.
$select = ("SELECT * FROM agenda WHERE dpt=' ".$_POST['dpt']."' AND mois=' ".$_POST['mois']. " ' ORDER BY jour LIMIT ". $limite . ", " . $nombre) ;
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
// si on a récupéré un resultat on l'affiche.
if($total)
{
// début du tableau
echo '<table id="table">'."\n";
// Tableau sans titres
// lecture et affichage des résultats dans deux colonnes
while($row = mysql_fetch_array($result))
{
echo '<tr>';
echo '<td id="date">'.$row['jour'].' - '.$row['mois'].' - '.$row['an'].'</td>';
echo '<td><p id="ville"'.$row['ville'].'<br/></p><p id="titre"'.$row['titre'].'<br/></p>
<p id="texte"'.$row['texte'].'<br/></p>
IF (($row['lieu'] != NULL) OR ($row['heure'] != NULL ))
{
<p id="lieu">'.$row['lieu']' - '.$row['heure']'<br/></p>
}
IF ($row['tel'] != NULL)
{
<p id="tel">Rens : '.$row['tel']' </p>
}
<p id="ville"'.$row['ville'].'<br/></p></td> ';
echo '</tr>'."\n";
}
echo '</table>'."\n";
}
else echo 'Il n\\'y a pas encore de résultats pour ce département';
mysql_free_result($result);
// Si nbre d'enregistrement à afficher est plus grand que $nombre
if($total > $nombre)
{
// affichage des liens vers les pages
affichePages($nombre,$page,$total);
// affichage des boutons
displayNextPreviousButtons($limite,$total,$nombre,$page);
}
?>
<?
}
?>
<?
}
?>
</body>
</html>
<?php
}
?>
<?php
mysql_close() ;
?> | | | | | tirikou | Posté le 10/06/2006 à 00:22 | Astucien
1028 Messages
| En attendant je suis allé sur le validator html et corrigé de petites choses.
Voici maintenant le message d'erreur que j'ai :
Parse error: parse error, expecting `','' or `';'' in c:\documents and settings\eric laborde\bureau\perso\yassala_archives\index.php on line 105
cela correspond à cette partie du code :
// Tableau sans titres
// lecture et affichage des résultats dans deux colonnes
while($row = mysql_fetch_array($result))
{
echo '<tr>';
echo '<td id="date">'.$row['jour'].' - '.$row['mois'].' - '.$row['an'].'</td>';
echo '<td><p id="ville"'.$row['ville'].'<br/></p><p id="titre"'.$row['titre'].'<br/></p>
<p id="texte"'.$row['texte'].'<br/></p>
IF (($row['lieu'] != NULL) OR ($row['heure'] != NULL ))
{
<p id="lieu">'.$row['lieu']' - '.$row['heure']'<br/></p>
}
IF ($row['tel'] != NULL)
{
<p id="tel">Rens : '.$row['tel']' </p>
}
<p id="ville"'.$row['ville'].'<br/></p></td> ';
echo '</tr>'."\n";
}
echo '</table>'."\n";
}
else echo 'Il n\\'y a pas encore de résultats pour ce département';
mysql_free_result($result);
Plus exactement à la ligne du
IF (($row['lieu'] != NULL) OR ($row['heure'] != NULL ))
Je pense que mon IF inclu dans un echo ne fonctionne pas au niveau syntaxe.
Mais là, je calle et vais me coucher !
Je reviens demain si vous le voulez bien. | | | | | Alpha | Posté le 10/06/2006 à 00:38 | Petit astucien
788 Messages
| Salut
ce n'est pas juste la ligne au dessus :
echo '<td><p id="ville"'.$row['ville'].'<br/></p><p id="titre"'.$row['titre'].'<br/></p>
<p id="texte"'.$row['texte'].'<br/></p>
???
si tu mets :
echo '<td><p id="ville">'.$row['ville'].'<br/></p><p id="titre">'.$row['titre'].'<br/></p>
<p id="texte">'.$row['texte'].'<br/></p>;
Modifié par Alpha le 10/06/2006 00:39 | | | | | tirikou | Posté le 10/06/2006 à 12:36 | Astucien
1028 Messages
| Merci Alpha j'ai fait des corrections mais sans succès toujours la même parse error mais ligne 107 qui correspond au premier IF dans echo
Voici où j'en suis sans succès :
while($row = mysql_fetch_array($result))
{
echo '<tr>';
echo '<td id="date">'.$row['jour'].' - '.$row['mois'].' - '.$row['an'].'</td>';
echo '<td>
<p id="ville">'.$row['ville'].'<br/></p>
<p id="titre">'.$row['titre'].'<br/></p>
<p id="texte">'.$row['texte'].'<br/></p> ;
IF (($row['lieu'] != NULL) OR ($row['heure'] != NULL ))
{
<p id="lieu">'.$row['lieu'].' - '.$row['heure'].'<br/></p>;
}
IF ($row['tel'] != NULL)
{
<p id="tel">Rens : '.$row['tel'].' </p>;
}
<p id="ville">'.$row['ville'].'<br/></p>
</td> ';
echo '</tr>'."\n";
}
Je pourrais le réécrire en intégrant le html dans le php mais j'aimerai bien que cela fonctionne sous cette forme.
Quelle est la syntaxe pour ecrire un IF dans un echo ???
Merci | | | | | koala01 | Posté le 10/06/2006 à 13:18 | Astucien
4715 Messages
| les instructions PHP sont "case sensitive"…
Cela signifie qu'elles réagissent uniquement si les lettres sont en minuscules quand une minuscule est attendue ou en majuscules quand une majuscule est attendue…
Dans le cas de if, c'est tout en minuscule [clindoeil]
De plus, il faut faire attention à l'utilisation des apostrophes et des guillemets dans la définition de tes chaines à écrire…
ainsi, si tu commence une chaine avec le caractère apostrophe, elle est considérée comme fermée à la premiere apostrophe suivante si tu ne l'échape pas avec le caractère backslash \ …
Dans le code
[code]
echo '<tr>';
echo '<td id="date">'.$row['jour'].' - '.$row['mois'].' - '.$row['an'].'</td>';
echo '<td>
<p id="ville">'.$row['ville'].'<br/></p>
<p id="titre">'.$row['titre'].'<br/></p>
<p id="texte">'.$row['texte'].'<br/></p> ;
[/code]
tu as tout simplemet oublié de fermer la dernière chaine avec une apostrophe (juste avant le point virgule)
Le voici corrigé
echo '<tr>';
echo '<td id="date">'.$row['jour'].' - '.$row['mois'].' - '.$row['an'].'</td>';
echo '<td>
<p id="ville">'.$row['ville'].'<br/></p>
<p id="titre">'.$row['titre'].'<br/></p>
<p id="texte">'.$row['texte'].'<br/></p> ';
| | | | | koala01 | Posté le 10/06/2006 à 13:49 | Astucien
4715 Messages
| De plus, tu dois bien te rendre compte que le début d'une étape de traitement de code php ou d'une instruction d'affichage peut etre assimilé au démarrage du moteur de ta voiture: c'est ce qui est le plus gourmand en ressources…
De meme que tu ne va sans doute pas t'amuser à arreter le moteur chaque fois que tu est à un stop ou à un feu rouge pour le redémarrer trente secondes plus tard, il est fortement conseillé, une fois que tu es passé en mode "traitement de code php" ou que tu as lancé une instruction d'affichage d'aller aussi loin que possible avant de terminer cet affichage ou de quitter le mode de traitement de code php pour repasser en mode d'envoi de texte simple…
La concaténation (obtenue en mettant le point entre deux équivalents chaine) prend, elle aussi énormément de ressources…
Quand tu dois faire afficher un mélange de texte et de variables, il est largement préférable de démarrer ta chaine par des guillemets " qui permettent d'interpréter les variables, et donc d'en faire afficher les valeurs…
Ainsi, le meme code serait beaucoup plus efficace sous la forme de
[code]
echo "<tr>
<td id="date">$row['jour'] -$row['mois'] -$row['an']</td>
<td>
<p id=\"ville\">$row['ville']<br/></p>
<p id=\"titre\">$row['titre']<br/></p>
<p id=\"texte\">$row['texte']<br/></p>";
if(($row['lieu'] != NULL) OR ($row['heure'] != NULL ))
{
echo "<p id=\"lieu\">$row['lieu'] - $row['heure']<br/></p>";
//au passage, tu avais oublié l'echo:-p
}
if($row['tel'] != NULL)
{
echo"<p id=\"tel\">Rens : $row['tel'] </p>";
//au passage, tu avais oublié l'echo:-p
}
//il manquait aussi un echo ici
echo"<p id=\"ville\">$row['ville']<br/></p>
</td>
</tr>
";
}[/code] | | | | | tirikou | Posté le 10/06/2006 à 16:06 | Astucien
1028 Messages
| Bonjour Koala et merci.
Je viens de passer beaucoup de temps à essayer d'appliquer ta méthode. Je t'avoue avoir TRES BEAUCOUP de mal avec la concatenation ou pas.
Bref, après de multiples essais infructueux, j'ai fait un copier/coller de ta correction et j'ai toujours la même parse error
sur la deuxième ligne de ce code
echo "<tr>
<td id="date">$row['jour'] - $row['mois'] - $row['an']</td>
<td>
J'ai même mis des \ à id=\"date\"
et j'ai alors le message suivant :
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\documents and settings\eric laborde\bureau\perso\yassala_archives\index.php on line 102 | | | | | koala01 | Posté le 10/06/2006 à 16:10 | Astucien
4715 Messages
| Il faut effectivement "échaper" les guillemets qui doivent etre considérés comme caractères par un \, mais il faut, surtout, ne pas oublier de fermer ta chaîne à la fin (et de mettre le ;)
C'est donc
[code]
echo "<tr>
<td id=\"date\">$row['jour'] - $row['mois'] - $row['an']</td>
<td>";[/code]
qu'il te faut écrire [clindoeil] | | | | | tirikou | Posté le 10/06/2006 à 16:22 | Astucien
1028 Messages
| Je remet mon code complet de l'affichage des résultats car j'ai toujours :
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\documents and settings\eric laborde\bureau\perso\yassala_archives\index.php on line 102
ce semble être un problème de variables dans la ligne id=date ???
// Tableau sans titres
// lecture et affichage des résultats dans deux colonnes
while($row = mysql_fetch_array($result))
{
echo "<tr>
<td id=\"date\">$row['jour'] - $row['mois'] - $row['an']</td>;
<td>
<p id=\"ville\">$row['ville']<br/></p>
<p id=\"titre\">$row['titre']<br/></p>
<p id=\"texte\">$row['texte']<br/></p>";
if(($row['lieu'] != NULL) OR ($row['heure'] != NULL ))
{
echo "<p id=\"lieu\">$row['lieu'] - $row['heure']<br/></p>";
}
if($row['tel'] != NULL)
{
echo"<p id=\"tel\">Rens : $row['tel'] </p>";
}
echo"<p id=\"ville\">$row['ville']<br/></p>
</td>
</tr>";
} | | | | | tirikou | Posté le 10/06/2006 à 16:39 | Astucien
1028 Messages
| Si cela peut aider voici ce qui fonctionnait sur le site avant d'inégrer la partie de créa auto de pages.
C'est ce que j'ai voulu transcrire en php pour afficher les infos.
<div id="table2">
<p>
<br/>
<div id="date"><?php echo $manifs['jour'] ; ?>-<?php echo $manifs['mois'] ; ?>-<?php echo $manifs['an'] ; ?></div>
<div id="ville"><?php echo $manifs['ville'] ; ?></div>
<div id="titre"><?php echo $manifs['titre'] ; ?></div>
<div id="texte"><?php echo $manifs['texte'] ; ?></div>
<?php
IF (($manifs['lieu'] != NULL) OR ($manifs['heure'] != NULL ))
{
?>
<div id="lieu"><?php echo $manifs['lieu'] ; ?> - <?php echo $manifs['heure'] ; ?></div>
<?
}
?>
<?php
IF ($manifs['tel'] != NULL)
{
?>
<div id="tel">Rens : <?php echo $manifs['tel'] ; ?></div>
<?
}
?>
<h5><?php echo $separe ; ?></h5>
<p>
</div>
ce qui devait m'afficher ce que l'on peut voir sur le site [url="http://tirikou2.free.fr"]ici[/url] en entrant dpt = 33 et mois = 06
| | | | | tirikou | Posté le 10/06/2006 à 17:02 | Astucien
1028 Messages
| J'ai remplacé mon affichage php par mon affichage html et cela fonctionne. Donc les variables sont bonnes. Ce serait dans le codage de l'affichage en php qu'il se passe quelque chose.
Je suis sur que nous sommes tout près et que ma transcription en php n'est pas bonne.
mais je ne vois pas où !!!!!!!! | | | | | tirikou | Posté le 10/06/2006 à 19:46 | Astucien
1028 Messages
| AAAAAAAAARrrrrghhhhhhhhhhhhhh
Je m'arrache les cheveux.
J'arrive maintenant à voir ma page.
mais j'ai une erreur de requete
Erreur : Erreur de syntaxe près de '(id) FROM agenda WHERE mois=06' à la ligne 1
d'abord cette requette n'est pas ligne 1 !!!!!!!
Ensuite je trouve pas ce qu'elle a. La voici :
// requête SQL qui compte le nombre total d'enregistrements dans la table.
$moi=$_POST['mois'] ;
$dept=$_POST['dpt'] ;
$select = 'SELECT COUNT (id) FROM agenda WHERE mois='.$moi.' ';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];
Je vais jamais m'en sortir ! | | | | | koala01 | Posté le 10/06/2006 à 20:01 | Astucien
4715 Messages
| C'est normal qu'il t'indique ligne 1, car c'est la ligne 1 de la requete [langue]
Ensuite, ton fameux champs mois, il est de quel type [question] entier (int)[question] ou chaine de caractères (varchar)[quesiton]
Si c'est un entier, tu dois créer la requete sans mettre les apostrophes autrour de la valeur [clindoeil] | | | | | tirikou | Posté le 10/06/2006 à 21:13 | Astucien
1028 Messages
| Voilà une très bonne question !!!!!!!!!!!!!!
Ce champs mois est un champs de type .... texte !
Car je voulais pouvoir y entrer 06 par ex alors que dans un champs de type INT le 06 se transforme en 6 et ça ça me pose des problèmes ailleurs !
What's news Doctor ???
| | | | | koala01 | Posté le 10/06/2006 à 21:40 | Astucien
4715 Messages
| essaie
[code]
$select = "SELECT COUNT(id) FROM agenda WHERE mois='$moi'";[/code](surtout, sans espace entre count et l'ouverture de la parenthese) | | | | | tirikou | Posté le 10/06/2006 à 22:04 | Astucien
1028 Messages
| OK, c'est passé jsute avec coller id près de count.
Voici donc l'erreur suivante
Erreur : Erreur de syntaxe près de ''0', '2'' à la ligne 1
Cela concerne la requete :
// requête SQL qui ne prend que le nombre d'enregistrements nécessaire à l'affichage.
$select = ("SELECT * FROM agenda WHERE dpt='.$dept.' AND mois='.$moi.' ORDER BY jour LIMIT '.$limite.', '.$nombre.' ");
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
Les chiffres sont les deux valeurs renvoyées par les variables de LIMIT. | | | | | koala01 | Posté le 10/06/2006 à 22:30 | Astucien
4715 Messages
| Quand je te dis que tu dois profiter de la possiblité de faire utiliser la valeur des variables lorsque tu défini un chaine…
Le code
[code] $select ="SELECT * FROM agenda WHERE dpt='$dept' AND mois='$moi' ORDER BY jour LIMIT $limite, $nombre";[/code]ne te parrait-il pas plus logique [question](les champs dpt et mois de la table étant considérés comme chaine, limite prenant automatiquement des valeurs de type exclusivement numérique [clindoeil]) | | | | | tirikou | Posté le 10/06/2006 à 22:41 | Astucien
1028 Messages
| Encore merci,
Ne pourrais tu pas me dire ou m'orienter vers un tuto qui puisse me faire comprendre comment utiliser ou non les ' ' et autres. Je reprends régulièrement le site du zero pour essayer de mettre la bonne syntaxe mais je crois que je ne l'ai pas encore comprise.
Mon problème principal est la bonne syntaxe dans les requetes.
A priori, maintenant ma page s'affiche avec la création des pages "suivantes" mais pas les messages.
Peux tu jeter un oeil sur mon code html qui fonctionnait et affichait les messages et le code php que j'ai refait qui lui ne les affiche pas. Cesont deux messages qui se suivent juste un peu plus haut dans ce topic.
Si ça t'arrange, je les repost.
Au fait comment peux t-on reprendre une partie d'un mess comme tu le fais avec les miens pour les intégrer à un nouveau mess ? | | | | | koala01 | Posté le 11/06/2006 à 07:57 | Astucien
4715 Messages
| il suffit d'encader ce que tu écrit de [ quote ] et [ / quote ](sans les espaces) pour une citation ou de [ code ] et [ / code ] (toujours sans les espaces) lorsque tu veux représenter du code…
Ces tags sont disponibles, pour le code, par le "bouton" où tu peux lire C++ juste à coté du U (donc le quatrieme bouton en partant de gauche), juste au dessus du champs où tu écris, et celui qui se trouve juste à coté (pour la citation).
Le tag [ code ] applique l'équivalant de la balise HTML <pre> qui signifie "preformated" (préformaté), c'est à dire que ca suit exactement le formatage du texte que tu as donné (si tu mets trois espaces, trois espaces seront visibles, les retours à la lignes ne se font qu'une fois que tu retourne toi meme explicitement à la ligne avec la touche <enter>) | | | | | tirikou | Posté le 11/06/2006 à 11:07 | Astucien
1028 Messages
| OK, merci Koala,
Voici donc ce que je veux dire en html et cela fonctionne :
[code]
<div id="table2">
<p>
<br/>
<div id="date"><?php echo $row['jour'] ; ?>-<?php echo $row['mois'] ; ?>-<?php echo $row['an'] ; ?></div>
<div id="ville"><?php echo $row['ville'] ; ?></div>
<div id="titre"><?php echo $row['titre'] ; ?></div>
<div id="texte"><?php echo $row['texte'] ; ?></div>
<?php
IF (($row['lieu'] != NULL) OR ($row['heure'] != NULL ))
{
?>
<div id="lieu"><?php echo $row['lieu'] ; ?> - <?php echo $row['heure'] ; ?></div>
<?
}
?>
<?php
IF ($row['tel'] != NULL)
{
?>
<div id="tel">Rens : <?php echo $row['tel'] ; ?></div>
<?
}
?>
<h5><?php echo $separe ; ?></h5>
<p>
</div>[/code]
ce qui me renvoit
Date (comopsée de jour/mois/an)
Ville
Titre
Texte
Lieu - heure (si l'un ou l'autre existe)
Rens : tel (si tel existe)
Voici comment je l'ai traduit en php et ça ne fonctionne pas :
[code]// début de l'affichage
echo '<div id="table">';
// lecture et affichage des résultats
while($row = mysql_fetch_array($result))
{
echo '<p id="date">'.$row['jour'].' - '.$row['mois'].' - '.$row['an'].'</p>';
echo '<p id="ville">'.$row['ville'].'<br/></p>';
echo '<p id="titre">'.$row['titre'].'<br/></p>';
echo '<p id="texte">'.$row['texte'].'<br/></p>';
if(($row['lieu'] != NULL) OR ($row['heure'] != NULL ))
{
echo '<p id="lieu">'.$row['lieu'].' - '.$row['heure'].'<br/></p>';
}
if($row['tel'] != NULL)
{
echo'<p id="tel">Rens : '.$row['tel'].' </p>';
}
echo'<p id="ville">'.$row['ville'].'<br/></p>';
}
echo '</div>' ;[/code]
Un avis ? | | | |
| | Haut de la page |
| | Inscrivez-vous ! |
- Posez vos questions
- Résolvez vos problèmes
- Aidez les autres
- Participez et créez vos discussions
- Dialoguez en privé avec d'autres membres
- Suivez vos sujets préférés
- Affichez les signatures des membres
|
|