OVH Cloud OVH Cloud

php pour les nuls

14 réponses
Avatar
1ternaute
Bonjour,

Je lis " php et mysql " pour les nuls de janet valade, et son 1°
programme d'exemple me pose un probleme :

******************************

<HTML>
<HEAD>
<TITLE>
Test de MySQL
</TITLE>
</HEAD>
<BODY>
<!-- test-mysql1.php -->
<?php
$host="localhost";
$user="root";
$password="";

mysql_connect($host,$user,$password);
$sql="show status";
$result=mysql_query($sql);
IF ($result==0)
ECHO("<b>Erreur ".mysql_errno().mysql_error()."</b>");
ELSEIF (mysql_num_rows($result)==0)
ECHO ("<b>Requete executee avec succes</b>");
ELSE
{
?>

<--! Tableau affichant les resultats -->
<TABLE BORDER="1">
<TR>
<TD>
<B>Nom de la variable</B>
</TD>
<TD>
<B>Valeur</B>
</TD>
</TR>
<?php
FOR
($i=0;
$i<mysql_num_rows($result);
$i++)
{
{ECHO ("<TR>");
$row_array=mysql_fetch_row($result);
FOR
($j=0;
$j<mysql_num_fields($result);
$j++)
{
{
ECHO ("<TR>".$row_array[$j]."</TD>");
}
ECHO ("</TR>");
}
?>
</TABLE>
<?php } ?>
</BODY>
</HTML>

*******************************

J'ai le resultat :

Parse error: parse error, unexpected $ in c:\program
files\easyphp\www\test\test-mysql.php on line 57

Or, en ligne 57 , c'est la cloture html, c'est quoi le probleme ?

10 réponses

1 2
Avatar
Michel Gaudry
1ternaute wrote:
Bonjour,

Je lis " php et mysql " pour les nuls de janet valade, et son 1°
programme d'exemple me pose un probleme :
[...]

J'ai le resultat :

Parse error: parse error, unexpected $ in c:program
fileseasyphpwwwtesttest-mysql.php on line 57

Or, en ligne 57 , c'est la cloture html, c'est quoi le probleme ?


Ce genre de message montre souvent qu'il y a une erreur dans le nombre
d'accolades. Dans ton code, je pense que l'erreur vient de tes "for", où
il y a une accolade de trop au début. Donc remplace :

FOR($i=0;$i<mysql_num_rows($result); $i++){{ECHO ("<TR>"); [...]

par :

FOR($i=0;$i<mysql_num_rows($result); $i++){ECHO ("<TR>"); [...]

Avatar
christophe.meresse
Bonjour,


Bonjour,

Je lis " php et mysql " pour les nuls de janet valade, et son 1°
programme d'exemple me pose un probleme :


Effectivement mais si le code que tu fournis proviens exactement du
bouquin alors il devrait s'appeler "php et mysql" **par** les nuls ! :)

******************************

<HTML>
<HEAD>
<TITLE>
Test de MySQL
</TITLE>


Ici c'est un détail mais j'évite le passage à la ligne et les
espaces en trop, suivant les browser ca peut réagir de differentes
manières (pour title je n'en suis pas certain mais pour d'autre tags
ca peut poser des problèmes):
<title>Test de MySQL</title>

FOR
($i=0;
$i<mysql_num_rows($result);
$i++)
{
{ECHO ("<TR>");


Ici il y a un { en trop.

$row_array=mysql_fetch_row($result);
FOR
($j=0;
$j<mysql_num_fields($result);
$j++)
{
{
ECHO ("<TR>".$row_array[$j]."</TD>");


Ici il y aussi un { en trop et <TR> au lieu de <TD>.

J'ai le resultat :

Parse error: parse error, unexpected $ in c:program
fileseasyphpwwwtesttest-mysql.php on line 57

Or, en ligne 57 , c'est la cloture html, c'est quoi le probleme ?


Je ne suis pas certain que mes remarques corrigeront cette erreur mais
ca devrait avancer vers la solution.
Je n'ai pas parlé des utilisation majuscule/minuscules: Pour le html
c'est un peu dommage que le bouquin n'utilise pas les normes actuelles
(tags en minuscule) du html et du xhtml.
Pour les instruction php (for, elseif) en majuscules je ne sais pas
vraiment si il y a une norme mais en genéral on utilise plutôt les
minuscules. La ca me rappel un peu l'époque ou je faisais du BASIC su
MSX, manque plus que les numéros de lignes :)

Si le reste du bouquin est comme ca je te conseille de le garder pour
te chauffer cet hivers et d'en acheter un autre ou d'utiliser ce qu'on
trouve sur internet.

Bon courage.
Christophe

Avatar
Jean-Francois Ortolo
Voir mes petites corrections ci-dessous.

Bien à vous.

Jean Francois Ortolo

1ternaute wrote:
Bonjour,
<...>


<HTML>
<HEAD>
<TITLE>
Test de MySQL
</TITLE>
</HEAD>
<BODY>
<!-- test-mysql1.php -->
<?php
$host="localhost";
$user="root";
$password="";

mysql_connect($host,$user,$password);
$sql="show status";
// Vaut mieux éviter l'arrêt du script en cas d'erreur...

// Donc, ajouter l'arobase.
$result=@mysql_query($sql);
// Au lieu de ça:

IF ($result==0)
// faire:

IF(!$result) // Après tout, mysql_query rend false en cas d'erreur.
ECHO("<b>Erreur ".mysql_errno().mysql_error()."</b>");
ELSEIF (mysql_num_rows($result)==0)
ECHO ("<b>Requete executee avec succes</b>");
ELSE
{
/* Je ne crois pas qu'il soit possible

de découper un script PHP en plein milieu
d'une condition, par des parties en HTML...
Si je me trompe, dites-le moi ? */

// <--! Tableau affichant les resultats -->
// Remplacer tout le bordel par des echos en PHP...

ECHO "<TABLE BORDER="1">n"; // Avec des n à la fin de préférence...
ECHO "<TR>";
ECHO "<TD>";
// Quelle variable ?...

ECHO "<B>Nom de la variable</B>n";
ECHO "</TD>";
ECHO "<TD>";
// Valeur de quelle variable ?

ECHO "<B>Valeur</B>n";
ECHO "</TD>";
ECHO "</TR>n";
/* S'il n'y a que deux colonnes dans

la query, ça marche, sinon
il faut ajouter une deuxième table... */
ECHO "</TABLE>";
ECHO "<BR>"; Pour séparer les deux tableaux...

// Deuxième tableau
ECHO "<TABLE BORDER="1">n";

FOR
($i=0;
$i<mysql_num_rows($result);
$i++)
// L'accolade suiante ne sert à rien...

/* { */
// Celle_ci suffit...

{ ECHO ("<TR>");
$row_array=mysql_fetch_row($result);
FOR
($j=0;
$j<mysql_num_fields($result);
$j++)
// Pas besoin d'accolade...

// Il n'y a qu'une seule instruction...
/* {
{ */


// Au lieu de:
// ECHO ("<TR>".$row_array[$j]."</TD>");
// Faire:

ECHO ("<TD>".$row_array[$j]."</TD>");
// Accolade superfétatoire...
// }
ECHO ("</TR>");
} // Fin de la boucle en $i
?>
// Là, on peut, effectivement, terminer

// la partie script PHP, par du HTML
</TABLE>
// C'est mauvais, supprimer cela:

<?php } ?>
// Et on termine, ouf...

</BODY>
</HTML>

*******************************


Bonjour

Ce script est tellement mal foutu, que j'ai eu un mal fou à le refaire...

"PHP pour les Nuls" ? Effectivement.
Ou bien: "PHP par les Nuls pour les Nuls voulant corriger les
scripts" ? Surement ! :)

En tout cas cette manie qu'a l'auteur, d'entrecouper des parties de
scripts PHP en pleine exécution, par du HTML... Pas booooonnnn....

Et puis, un <TR> à la place d'un <TD> à chaque ligne... On croirait
pas que ce sont des lignes, hein ? :)

Bien à vous.

Jean Francois Ortolo

--
Mon site donne des Statistiques
et des Historiques Graphiques gratuits
sur les Courses de Chevaux du PMU.
http://www.ortolojf-courses.com

Avatar
CrazyCat
1ternaute wrote:
J'ai le resultat :
Parse error: parse error, unexpected $ in c:program
fileseasyphpwwwtesttest-mysql.php on line 57
Or, en ligne 57 , c'est la cloture html, c'est quoi le probleme ?


Ca, c'est la réponse habituelle quand une accolade n'est pas fermée
(après une condition) et il t'en manque une à la fin:
<?php } ?> doit devenir <?php }}?>

Un petit détail: le code est horrible: on ne génère pas de l'affichage
HTML conditionnel dans du php, il est beaucoup plus lisible de le faire
avec des echo, ce qui permet un meilleur débuggage (on ne se pert pas
entre les <? ?>)

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net

Avatar
dmetzler
Alors, après relecture *attentive* de ton programme, le message
d'erreur dit "unexpected $end" (enfin chez moi). Ca veut dire que
l'interpréteur arrive à la fin du fichier alors qu'il attend encore
d'autres choses. Typiquement ce sont des accolades fermantes qui ont
été oubliées.

Donc on regarde ton programe :

Ligne 22, tu as une accolade ouvrante pour le IF : tu ne la ferme
jamais.

Ligne 40 : tu as une accolade ouvrante qui ne sert à rien, tu peux la
supprimer (ça t'éviteras d'oublier de la ferme)

Ligne 55 : Tu ne fermes qu'une seule accolade, il faut en rajouter une.


Sinon pour le reste, tu devrais écrire ton code php en minuscule
(c'est plus courant, je ne savais pas que ça marchait en majuscules).
De la même manière, les balises HTML sont en minuscules (et ça c'est
la norme).

Enfin, pour éviter les problèmes de fermetures d'accolades,
l'indentation est très utile (quatre caractères au lieu de deux). Je
pense qu'il est inutile d'étaler tes for sur 4 lignes, ça nuit à la
lisibilité.

En corrigeant ton programme, j'ai pu apercevoir qq autres erreurs, qui
sont elles aussi dues à l'illisibilité des de l'indentation. Déjà
un indice, quand tu as deux accolades ouvrantes qui se suivent : c'est
généralement un problème.

Voici ton programme corrigé :

<HTML>
<HEAD>
<TITLE>
Test de MySQL
</TITLE>
</HEAD>
<BODY>
<!-- test-mysql1.php -->
<?php

$host="localhost";
$user="root";
$password="";

mysql_connect($host,$user,$password);
$sql="show status";
$result=mysql_query($sql);

if ($result==0) {
echo ("<b>Erreur ".mysql_errno().mysql_error()."</b>");
} elseif (mysql_num_rows($result)==0) {
echo ("<b>Requete executee avec succes</b>");
} else {
?>

<!-- Tableau affichant les resultats -->
<TABLE BORDER="1">
<TR>
<TD>
<B>Nom de la variable</B>
</TD>
<TD>
<B>Valeur</B>
</TD>
</TR>
<?php
for($i=0; $i<mysql_num_rows($result); $i++)
{
echo "<tr>";
$row_array=mysql_fetch_row($result);
for($j=0; $j<mysql_num_fields($result); $j++)
{
echo "<td>".$row_array[$j]."</td>";
}
echo "</tr>";
}
echo "</table>";
}
?>

</BODY>
</HTML>
Avatar
Guillaume Bouchard
1ternaute wrote:
Bonjour,


Bonjour.

Je lis " php et mysql " pour les nuls de janet valade, et son 1°
programme d'exemple me pose un probleme :


Php pour les nuls, il faudra que je le lise tient...

[Snip html degeulasse classique des bouquins sur le php]

<?php
$host="localhost";
$user="root";
$password="";

mysql_connect($host,$user,$password);


mysql_connect($host,$user,$password) or func(mysql_error());
Avec func chargée d'afficher les erreurs et de les stocker en fonction
d'une constante.
Le temps ou tu developpe, func() peut être "die()"

$result=mysql_query($sql);


$result = mysql_uqery($sql) or func(mysql_error(),$sql);

IF ($result==0)
ECHO("<b>Erreur ".mysql_errno().mysql_error()."</b>");


Ha pardon, je n'ai rien dis...

<?php
FOR
($i=0;
$i<mysql_num_rows($result);
$i++)
{
{


Pourquoi deux accolades à la suite ?

ECHO ("<TR>".$row_array[$j]."</TD>");


Ici cest echo '<td>'...

Accessoirement tu peux considérablement simplifer la syntaxe avec :

while($data = mysql_fetch_assoc($result){
foreach($data as $elem){
printf('<td>%s</td>',htmlpsecialchars($elem));
}
}

Parse error: parse error, unexpected $ in c:program
fileseasyphpwwwtesttest-mysql.php on line 57

Or, en ligne 57 , c'est la cloture html, c'est quoi le probleme ?


Le probléme viens de plus haut, l'accolade que tu as ouvertes qui à la
fin du fichier (pas la cloture html, la fin du fichier) pose problème
puisque il manque sa soeur jumelle.

--
Guillaume.

Avatar
Sebastien

J'ai le resultat :

Parse error: parse error, unexpected $ in c:program
fileseasyphpwwwtesttest-mysql.php on line 57

Or, en ligne 57 , c'est la cloture html, c'est quoi le probleme ?


Bonjour,

C'est un peu surprenant, mais ce type d'erreur signifie le plus souvent
qu'un bloc (délimité par les accolades ouvrantes et les accolades
fermantes) n'est pas fermé. Ainsi, quand le parseur tente d'interpréter
ton code, il constate la présence d'une accolade ouvrante et cherche la
fin. Si cette accolade fermante a été omise, le parseur t'indique qu'il
y a une erreur à la dernière ligne (car il ne l'a pas trouvé).

Si tu compares le nombre d'accolades ouvrantes et le nombre d'accolades
fermantes, tu verras qu'il n'est pas égal dans le cas du script que tu
donnes. Regarde au niveau des boucles for.

Je ne sais pas comment est le script dans le livre mais une manière
d'éviter ce genre d'erreur est d'indenter correctement ton code (c'est à
dire décaler avec des tabulations les blocs imbriqués. Certains
proposent même de saisir l'accolade ouvrante et fermante d'un bloc dès
lors qu'il le commence. En clair, si tu veux faire une boucle tu écris:
for(){}
et après tu saisis le code dans le for et dans le bloc.

--
Sébastien

Avatar
bruno modulix
1ternaute wrote:
Bonjour,

Je lis " php et mysql " pour les nuls de janet valade, et son 1°
programme d'exemple me pose un probleme :

******************************

<HTML>


Passe tout le html en minuscule.

<HEAD>
<TITLE>
Test de MySQL
</TITLE>
</HEAD>
<BODY>
<!-- test-mysql1.php -->
<?php
$host="localhost";
$user="root";
$password="";

mysql_connect($host,$user,$password);
$sql="show status";
$result=mysql_query($sql);
IF ($result==0)


Passe tous les IF / ELSE / FOR / ECHO / ect en minuscule. C'est pas du
BASIC ni du COBOL !-)

ECHO("<b>Erreur ".mysql_errno().mysql_error()."</b>");


echo est une instruction, pas une fonction, il n'est pas nécessaire (ni
idiomatique) de mettre des parenthèses.

par contre, il vaut mieux tout de suite prendre l'habitude d'ouvrir et
fermer des blocs pour tous les if/elseif/else, for, while etc... donc
if ($result == 0) {
echo "<b>Erreur ".mysql_errno().mysql_error()."</b>";
}

ELSEIF (mysql_num_rows($result)==0)
ECHO ("<b>Requete executee avec succes</b>");


idem...

ELSE
{
?>

<--! Tableau affichant les resultats -->
<TABLE BORDER="1">
<TR>
<TD>
<B>Nom de la variable</B>
</TD>
<TD>
<B>Valeur</B>
</TD>
</TR>
<?php
FOR
($i=0;
$i<mysql_num_rows($result);
$i++)
{
{ECHO ("<TR>");


Tu a une ouverture de bloc en trop...

$row_array=mysql_fetch_row($result);
FOR
($j=0;
$j<mysql_num_fields($result);
$j++)
{
{


ici aussi...

ECHO ("<TR>".$row_array[$j]."</TD>");
ça devrait être echo "<td>" ...


}
ECHO ("</TR>");
}
?>
</TABLE>
<?php } ?>


et les blocs ne sont pas refermés.

</BODY>
</HTML>


<troll>
Dis, le titre du bouquin, c'est "php pour les nuls" ou "php par les
nuls" ?-)
</troll>


*******************************

J'ai le resultat :

Parse error: parse error, unexpected $ in c:program
fileseasyphpwwwtesttest-mysql.php on line 57

Or, en ligne 57 , c'est la cloture html, c'est quoi le probleme ?


Le problème, a priori, c'est tes blocs ouverts et pas refermés. Quant
aux messages d'erreur, il t'indiquent à quel endroit le parseur a
*constaté* une erreur, pas forcément quelle est la cause de l'erreur, ni
sa localisation précise. La seule chose à peu près sûre, c'est que
l'erreur n'est pas après la ligne indiqué - mais elle peut être
n'importe où avant !-)

Voilà le même code un peu proprifié, et en état de marche.

<html>
<head>
<title>Essai</title>
</head>
<body>
<?php
$host="localhost";
$user="root";
$password="le password qui va bien";

mysql_connect($host,$user,$password);
$sql="show status";
$result=mysql_query($sql);
if ($result==0) {
echo "<b>Erreur ".mysql_errno().mysql_error()."</b>";
}
elseif (mysql_num_rows($result)==0) {
echo "<b>Requete executee avec succes</b>";
}
else
{
?>
<table border="1">
<tr>
<th>Nom de la variable</th>
<th>Valeur</th>
</tr>

<?php
for ($i=0; $i < mysql_num_rows($result); $i++) {
echo "<tr>";
$row_array=mysql_fetch_row($result);
foreach ($row_array as $field) {
echo "<td>$field</td>";
}
echo "</tr>";
}
?>
</table>
<?php } ?>
</body>
</html>

HTH
--
bruno desthuilliers
ruby -e "print ''.split('@').collect{|p|
p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"

Avatar
gabriel
bonjour,

j'ai reformaté ton texte afin de le rendre plus lisible.

L'erreur était qu'aux boucles for, on ne met pas 2 accolades ouvrantes
mais une seule.

bon courage pour la suite

<HTML>
<HEAD>
<TITLE>
Test de MySQL
</TITLE>
</HEAD>
<BODY>
<!-- test-mysql1.php -->
<?php
$host="localhost";
$user="root";
$password="";

mysql_connect($host,$user,$password);
$sql="show status";
$result=mysql_query($sql);
IF ($result==0)
ECHO ("<b>Erreur ".mysql_errno().mysql_error()."</b>");
ELSEIF (mysql_num_rows($result)==0)
ECHO ("<b>Requete executee avec succes</b>");
ELSE
{
?>

<--! Tableau affichant les resultats -->
<TABLE BORDER="1">
<TR>
<TD>
<B>Nom de la variable</B>
</TD>
<TD>
<B>Valeur</B>
</TD>
</TR>
<?php
FOR ($i=0; $i<mysql_num_rows($result); $i++)
{
ECHO ("<TR>");
$row_array = mysql_fetch_row($result);
FOR ($j=0; $j < mysql_num_fields($result); $j++){
ECHO ("<TR>".$row_array[$j]."</TD>");
}
ECHO ("</TR>");
}
?>
</TABLE>
<?php } ?>
</BODY>
</HTML>
Avatar
Steuf

Un petit détail: le code est horrible: on ne génère pas de l'affichage
HTML conditionnel dans du php, il est beaucoup plus lisible de le faire
avec des echo, ce qui permet un meilleur débuggage (on ne se pert pas
entre les <? ?>)



Je ne suis pas tout à fait d'accord dans le sens ou, si le code est bien
commenté et hiérarchisé ( Avec des tabulations ) c'est parfaitement
lisible et de plus cela évite que le parseur, parse une partie du code
pour rien. De même en faisant comme cela, avec un éditeur HTML on
profite de la colorisation du code html, ce qui permet de mieux déceler
les erreurs de codage html ( Chose beaucoup moins évidente quand tout
est dans un echo ).

1 2