connection base de donnee

connection base de donnee - PHP - Programmation

Marsh Posté le 31-10-2007 à 14:14:53    

Bonjour,
j'ai un script php de connexion a une base de donnees, integre dans une page html.
voila le script:
 

Code :
  1. <?php
  2. $conn = mysql_connect('SYSTEM', 'ID', 'PW') or die(mysql_error());
  3. $sql = 'SELECT TRUC FROM BIDULE WHERE MUCHE';
  4. $dataset = mysql_query($sql) or die($req.mysql_error());
  5. $piece = mysql_fetch_array($dataset);
  6. print_r($piece);
  7. <ul>
  8. <li>Pièce : <?php echo $piece['ENBONT']; ?></li>
  9. </ul>
  10. mysql_close($conn);
  11. ?>


 
sur ma page html, il me renvoie:
 
Pièce :  
 
mysql_close($conn); ?>  
 
 
au lieu de quelque chose comme ca:
 
Pièce : 3847563
 
je pense que ca merde au niveau de:
 

Code :
  1. <ul>
  2. <li>Pièce : <?php echo $piece['ENBONT']; ?></li>
  3. </ul>


 
peut etre a cause de l'imbriquement php dans de l'html dans du php dans de l'html...
 
est ce que vous voyez une erreur quelque part?


Message édité par amaranthae le 31-10-2007 à 15:04:59
Reply

Marsh Posté le 31-10-2007 à 14:14:53   

Reply

Marsh Posté le 31-10-2007 à 14:34:20    

oui.
entre <?php et ?> il ne doit pas y avoir d'HTML, ou alors, c'est du echo HTML ...
 

Code :
  1. <?php
  2.     $conn = mysql_connect('SYSTEM', 'ID', 'PW') or die(mysql_error());
  3.     $sql = 'SELECT TRUC FROM BIDULE WHERE MUCHE';
  4.     $dataset = mysql_query($sql) or die($req.mysql_error());
  5.     $piece = mysql_fetch_array($dataset);
  6.     print_r($piece);
  7. ?>
  8.   <ul>
  9.       <li>Pièce : <?php echo $piece['ENBONT']; ?></li>
  10.   </ul>
  11. <?php
  12.     mysql_close($conn);
  13. ?>



---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 31-10-2007 à 14:35:37    

ou sinon :

Code :
  1. <?php
  2.     $conn = mysql_connect('SYSTEM', 'ID', 'PW') or die(mysql_error());
  3.     $sql = 'SELECT TRUC FROM BIDULE WHERE MUCHE';
  4.     $dataset = mysql_query($sql) or die($req.mysql_error());
  5.     $piece = mysql_fetch_array($dataset);
  6.     print_r($piece);
  7.     echo '<ul>';
  8.     echo '  <li>Pièce : '.$piece['ENBONT'].'</li>';
  9.     echo '</ul>';
  10.     mysql_close($conn);
  11. ?>


 
 
EDIT :
En => connection / language
Fr => connexion / langage


Message édité par NewsletTux le 31-10-2007 à 14:37:02

---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 31-10-2007 à 14:38:56    

Juste pour précision: il est préférable en développement, d'éviter d'ouvrir/ fermer pour si peu des balises php!!
 
Ici par exemple tu pourrais préférer l'utilisation de la fonction "echo", donc un seul couple de balisage php. L'air de rien en faisant attention à ça sur des dizaines de pages de plusieurs centaines de lignes, tu optimises un minimum ton code.
 
EDIT/ exactement le code précédent :)

Message cité 1 fois
Message édité par Plexi86 le 31-10-2007 à 14:40:16
Reply

Marsh Posté le 31-10-2007 à 14:54:34    

amaranthae> n'importe laquelle des deux solutions de newslettux est parfaitement correcte.

 
Plexi86 a écrit :

Juste pour précision: il est préférable en développement, d'éviter d'ouvrir/ fermer pour si peu des balises php!!
Ici par exemple tu pourrais préférer l'utilisation de la fonction "echo", donc un seul couple de balisage php. L'air de rien en faisant attention à ça sur des dizaines de pages de plusieurs centaines de lignes, tu optimises un minimum ton code.
EDIT/ exactement le code précédent :)


Port'nawak [:dawak]
Par définition PHP est un langage de template qui est fait pour avoir des "bouts" de code parsemés un peu partout.
Et même si ce que tu dis est peut-être vrai ( encore que je demande un vrai benchmark pour ce genre d'affirmation sur  de l'optimisation "alakon.com" ), il est complètement pourri en terme de lisibilité de faire un écho de 30 lignes d'html.

Spoiler :

on est un mercredi qui ressemble à un vendredi, je peux me permettre de lancer un débat :o


Message cité 1 fois
Message édité par anapajari le 31-10-2007 à 14:55:06
Reply

Marsh Posté le 31-10-2007 à 15:03:49    

merci pour vos reponses.
la deuxieme solution, avec les echo, ne fonctionne pas chez moi (je me retrouve toujours a affiche le morceau de code, avec un echo devant en plus)
du coup, je vais prendre la premiere, meme si en general, je prefere optimiser mon code un max (programmation objet etc), mais la je debute en php, et c'est moins facile ^^'
 
par contre, meme si je n'ai plus l'affichage du code, je n'ai pas l'affichage du resultat que je voulais... je pense que 'ENBONT' ne doit pas etre la bonne cle... mais dans ce cas, comment voir le resultat du print_r($piece) pour verifier?
 
 
ps: merci pour la faute sur connection ^^ je la fait tout le temps, ayant plus l'habitude de lire des documents en anglais qu'en francais... idem pour langage ^^'

Reply

Marsh Posté le 31-10-2007 à 15:10:53    

c'est normal que ça marche pas, le code remis en forme contient quelques bétises :o

Code :
  1. $dataset = mysql_query($sql) or die($req.mysql_error());


$req existe pas ( tout du moins dans le code que tu montre) et c'est pas plutot $sql que tu voulais utiliser?

Code :
  1. $sql = 'SELECT TRUC FROM BIDULE WHERE MUCHE';
  2. ...
  3. $piece = mysql_fetch_array($dataset);
  4. ...
  5. echo '  <li>Pièce : '.$piece['ENBONT'].'</li>';


tu fetch un array indexé, très bien, mais la clé de celui-ci va correspondre au nom du champs de ta requete, en l'occurence truc et pas enbont.

 

Et si pour la solution avec echo, tu as toujours des morceaux de code qui trainent, il est plus que vraisemblable que tu aies oublié un balise fermante php quelque part.


Message édité par anapajari le 31-10-2007 à 15:20:23
Reply

Marsh Posté le 31-10-2007 à 15:58:51    

j'ai corrige les petites erreurs (du a un changement de nom, car j'avais renomme la requete un moment...)
 
le TRUC de la requete est Sum(ENBONT.MONTHT),  je replace donc $piece['ENBONT'] par $piece['Sum(ENBONT.MONTHT)'] ?
 
sinon, j'ai remarque un autre truc bizarre, quand je modifie le bloc php, il ne me renvoie JAMAIS d'erreur (meme quand j'en ai introduit de maniere volontaire, pour verifier, car ca me semblait louche...)
 
je voudrait aussi savoir s'il est obligatoire d'utiliser un mysql_select_db($nom_base, $connection) lorsqu'il n'y a q'une seule base de donnees?


Message édité par amaranthae le 31-10-2007 à 16:03:34
Reply

Marsh Posté le 31-10-2007 à 22:37:17    

tu as fait "SELECT TRUC" donc j'ai pensé que le champ de formulaire était bon ...
Je te conseille alors de tester Select Sum(ENBONT.MONTHT) AS somme WHERE [...]
 
puis plus loin, $piece['somme'].
 
 
Concernant les multiples balises PHP, c'est vrai que j'ai tendance à en mettre une bonne fois pour toutes plutôt que de passer mon temps à ouvrir/fermer. Mais mes 2 solutions marchent.
 
Concernant l'affichage des erreurs, documente-toi sur "E_Warning" de php.
 
Enfin, même si ton serveur n'a qu'une seule base de données, il faut la sélectionner : mysql_connect est là pour établir une connexion au serveur, mais ce n'et pas parce que tu y établis une connexion que forcément tu vas travailler sur l'unique base de données ...


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 01-11-2007 à 05:59:44    

anapajari a écrit :


Port'nawak [:dawak]
Par définition PHP est un langage de template qui est fait pour avoir des "bouts" de code parsemés un peu partout.
Et même si ce que tu dis est peut-être vrai ( encore que je demande un vrai benchmark pour ce genre d'affirmation sur  de l'optimisation "alakon.com" ), il est complètement pourri en terme de lisibilité de faire un écho de 30 lignes d'html.

Spoiler :

on est un mercredi qui ressemble à un vendredi, je peux me permettre de lancer un débat :o




 
J'ai fait ton benchmark avec un test sur 10000 itérations...
1ère version (temps d'exécution moyen: 687ms):

Code :
  1. <ul>
  2. <?php for ($i=0; $i<10001; $i++)    
  3.     { ?>
  4.     <li>nombre <?php echo $i;?></li>
  5. </ul>
  6. <?php
  7.     }
  8. ?>
  9. <span style="background-color:red">Temps d'éxécution : <?php echo $tps; ?>ms</span>


 
VS 2e version (temps d'exécution moyen: 82ms):

Code :
  1. <?php
  2. echo '<ul>';
  3. for ($i=0; $i<10001; $i++)
  4. {
  5.     echo '<li>nombre ' . $i . '</li>';
  6. }
  7. echo '</ul>';
  8. echo '<span style="background-color:blue">Temps d\'éxécution : ' . $tps . 'ms</span>';
  9. ?>


 
La deuxième version est 7 fois plus rapide que la première!! Donc je ne dis pas "Port'nawak ". Maintenant, je suppose qu'il ne fait pas 10000 items pour ses listes, mais disons 20 maxi (pour exemple), la différence est minime pour le temps d'exécution des deux versions de scripts: Négligeable?
 
Pour si peu, on peut certainement privilégier la lisibilité du code, mais je ne suis pas sûre que la version que je préfère soit peu claire, ou peu lisible!

Message cité 1 fois
Message édité par Plexi86 le 01-11-2007 à 06:01:58
Reply

Marsh Posté le 01-11-2007 à 05:59:44   

Reply

Marsh Posté le 01-11-2007 à 12:42:41    

Merci de cette précision ... Effectivement si une liste n'a pas 10 000 items, un serveur mutualisé peut avoir 100 clients qui ont chacun 100 items, et ça peut se ressentir à ce niveau là également.


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 01-11-2007 à 20:34:38    

Certes, c'est plus lent, mais il a néanmoins parfaitement raison : l'usage correct de PHP est plutôt comme langage de template, et la version d'anapajari est plus lisible pour un intégrateur HTML.
 
C'est la solution retenue par Symfony, au passage.

Reply

Marsh Posté le 02-11-2007 à 14:15:37    

merci pour les precisions apportees
 
par contre, j'ai l'impression que le probleme sur les erreurs qui ne sont jamais affichees vient du fait que le bloc php de ma page html n'est pas pris en compte du tout par mon navigateur (IE6).
 
la structure de la page est la suivante:
 

Code :
  1. <html>
  2. <head> ... </head>
  3. <body>
  4. ...
  5. <?php ... ?>
  6. ...
  7. </body>
  8. </html>


 
et tout ce que je met en dehors du/des bloc php fonctionne parfaitement... alors que le bloc php ne donne jamais rien, meme quand je supprime un/des point virgule de fin d'instruction...


Message édité par amaranthae le 02-11-2007 à 14:16:29
Reply

Marsh Posté le 02-11-2007 à 19:49:41    

est-ce que le nom du fichier a bien l'extension.php, et est bien passé par la moulinette d'Apache ?
 
Qu'est-ce que cela donne dans le code source, le php est-il affiché ?


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 05-11-2007 à 09:22:33    

Plexi86 a écrit :

J'ai fait ton benchmark avec un test sur 10000 itérations...


Un, c'est pas 'mon' benchmark.
Deux, celui que tu as fait est complètement inutile.
Contre exemple, à ma façon:

Code :
  1. <html>
  2. <body>
  3.  ... plein de trucs ...
  4.  <br/>
  5.  Temps d'éxécution :<?php echo microtime()-microtime() ?>ms</span>
  6. </html>


résultat: 3.30000000001E-05ms
A ta façon:

Code :
  1. <?php
  2. $a = microtime();
  3. echo '<html>';
  4. echo ' <body>';
  5. echo '  ... plein de trucs ...';
  6. echo '  <br/>';
  7. echo '  Temps d\'éxécution : '.($a-microtime).'ms</span>';
  8. echo '</html>';
  9. ?>


résultat: 0.370207ms
Ton code est 10.000 fois plus lent  [:klem3i1]

 
Plexi86 a écrit :

La deuxième version est 7 fois plus rapide que la première!! Donc je ne dis pas "Port'nawak ". Maintenant, je suppose qu'il ne fait pas 10000 items pour ses listes, mais disons 20 maxi (pour exemple), la différence est minime pour le temps d'exécution des deux versions de scripts: Négligeable?


Ok, lol

Plexi86 a écrit :

Pour si peu, on peut certainement privilégier la lisibilité du code, mais je ne suis pas sûre que la version que je préfère soit peu claire, ou peu lisible!


A partir du moment ou tu choisis délibérement de ne pas séparer html et php, oui c'est illisible et pas claire [:spamafote]

Message cité 1 fois
Message édité par anapajari le 05-11-2007 à 09:22:52
Reply

Marsh Posté le 05-11-2007 à 09:58:48    

Spoiler :

C'est déjà vendredi? [:cupra]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 06-11-2007 à 05:45:28    

anapajari a écrit :


Un, c'est pas 'mon' benchmark.
Deux, celui que tu as fait est complètement inutile.


 
Je veux bien, puisque tu le dis! Mais au moins explique moi pourquoi, parce qu'avec le contre-exemple je ne comprend pas?! :pfff:
 

Reply

Marsh Posté le 06-11-2007 à 08:44:57    

Peut-être simplement ton benchmark n'a-t-il rien de réaliste? Peut-être parce qu'il s'agit d'une micro optimisation qui ne servira peut-être à rien?
 
Peut-être parce que tu as fait 10001 itérations plutôt que les 10000 annoncées? :D
 
Hé... Tout ceci ne nous mène à rien. :pfff:


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed