Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1301 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] code récalcitrant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] code récalcitrant

n°1841948
Bzzzttt
Anciennement HORNY-GRANDCORNU
Posté le 23-01-2009 à 11:58:49  profilanswer
 

Bonjour tout le monde,
 
J'en peux plus, cela fait des heures que je travaille là-dessus mais ça ne change rien, il y a quelque chose dans le code qui fait planter  la page (aucun affichage). Voici le code problématique, càd quand je le décommente, la page ne s'affiche plus du tout ! Ah vive la programmation, moi je le crie haut et fort ! ;-)
 

Code :
  1. $type=textsecurity($_GET["type"],2);
  2.   if(!isset($_GET["id"]))
  3.   {
  4.    connexion();
  5.    $liste_data=mysql_query("SELECT * FROM amasis_$type ORDER BY date_$type DESC" );
  6.    if(mysql_numrows($liste_data)<1)
  7.     echo "Error: No entry recorded for $type.";
  8.    else
  9.    {
  10.     while($to_list=mysql_fetch_object($liste_data))
  11.     {
  12.      ?> <p /><a href="<? echo $_SERVER["PHP_SELF"]; ?>?action=edit&type=$type&id=$to_list->id">$to_list->titre</a> (posted on <? echo $to_list->date_$type; ?> by <? echo $to_list->auteur; ?> )
  13.      <?
  14.     }
  15.    }
  16.    mysql_close();
  17.   }


 
Merci d'avance pour votre aide !

mood
Publicité
Posté le 23-01-2009 à 11:58:49  profilanswer
 

n°1841949
Bzzzttt
Anciennement HORNY-GRANDCORNU
Posté le 23-01-2009 à 12:00:17  profilanswer
 

Voici en prime la fonction textsecurity qui apparaît ci-dessus mais fonctionne bien ailleurs dans les autres pages.
 

Code :
  1. function textsecurity($inp,$type)
  2. {
  3. $outp=htmlspecialchars($inp,ENT_QUOTES);
  4. if($type==2) // format
  5. {
  6.  $outp=str_replace("","<b>",$outp);
  7.  $outp=str_replace("","</b>",$outp);
  8.  $outp=str_replace("","<i>",$outp);
  9.  $outp=str_replace("","</i>",$outp);
  10.  $outp=str_replace("[titre]","<div class=\"titre\">",$outp);
  11.  $outp=str_replace("[/titre]","</div>",$outp);
  12.  $outp=nl2br($outp);
  13. }
  14. return($outp);
  15. }

n°1841960
Bzzzttt
Anciennement HORNY-GRANDCORNU
Posté le 23-01-2009 à 12:18:35  profilanswer
 

ah, j'ai déjà deux erreurs, ligne 16 :D
 
Mais ça résout pas le problème principal ;)

n°1841970
Bzzzttt
Anciennement HORNY-GRANDCORNU
Posté le 23-01-2009 à 12:51:15  profilanswer
 

Bon, nouvelle version, notez bien le champ commenté, qui reprend tout le code qui fait planter la page
 

Code :
  1. else if($_GET["action"]=="edit" )
  2. {
  3.  echo "<h1>Edit</h1>";
  4.  if(!isset($_GET["type"]))
  5.  {
  6.   echo "<h2><a href=\"?action=edit&type=news\">a news</a></h2>
  7.   <h2><a href=\"?action=edit&type=acti\">an event</a></h2>";
  8.  }
  9.  else
  10.  {
  11.   $type=textsecurity($_GET["type"],2);
  12.   connexion();
  13.   /*if(!isset($_GET["id"]))
  14.   {    
  15.    $liste_data=mysql_query("SELECT * FROM amasis_$type ORDER BY date_$type DESC" );
  16.    
  17.    if(mysql_numrows($liste_data)<1)
  18.     echo "Error: No entry recorded for $type.";
  19.    
  20.    else
  21.    {
  22.     while($to_list=mysql_fetch_object($liste_data))
  23.     {
  24.      echo "<p /><a href=\"$_SERVER['PHP_SELF']?action=edit&type=$type&id=$to_list->id\">$to_list->titre</a> (posted on $to_list->date_$type by $to_list->auteur)";
  25.     }
  26.    }
  27.   }
  28.   else
  29.   {
  30.    // show item
  31.    
  32.    $id=textsecurity($_GET["id"],2);
  33.    
  34.    $liste_data=mysql_query("SELECT * FROM amasis_$type WHERE id='$id'" );
  35.    
  36.    if(mysql_num_rows($liste_data)==1)
  37.    {
  38.     $to_thing=mysql_fetch_object($liste_data);
  39.    
  40.    ?>
  41.    
  42.    
  43.  <div style="text-align:center;"><h1>Edit</h1>
  44.  <form method="GET" action="<? echo $_SERVER["PHP_SELF"]; ?>">
  45.  <input type="text" name="title" value="<? echo $to_thing->titre; ?>" />
  46.  <p /><textarea cols="70" rows="20" name="descr"><? echo $to_thing->descr; ?></textarea>
  47.  <p /><input type="text" name="place" value="<? echo $to_thing->lieu; ?>" />
  48.  <p /><input type="text" name="date_<? echo $type; ?>" value="<? echo $to_thing->date_$type; ?>" />
  49.  <input type="hidden" name="action" value="edit" />
  50.  <input type="hidden" name="type" value="<? echo $type; ?>" />
  51.  <input type="hidden" name="id" value="<? echo $id; ?>" />
  52.  <p /><input class="button" type="submit" value="update" />
  53.  </form>
  54.  </div>
  55.    
  56.    <?
  57.    
  58.    }
  59.    else
  60.     echo "Error: Entry # $id not found or too many results.";
  61.    
  62.   }
  63.    
  64.   mysql_close();
  65.  }*/
  66. }

n°1841980
aspirateur
Posté le 23-01-2009 à 13:06:22  profilanswer
 

Moi ce que je vois c'est les { } oubliés en rouge
 
Tu as pas plus de détail sur l'erreur?
 

Bzzzttt a écrit :


 

Code :
  1. else if($_GET["action"]=="edit" )
  2. {
  3.  echo "<h1>Edit</h1>";
  4.  if(!isset($_GET["type"]))
  5.  {
  6.   echo "<h2><a href=\"?action=edit&type=news\">a news</a></h2>
  7.   <h2><a href=\"?action=edit&type=acti\">an event</a></h2>";
  8.  }
  9.  else
  10.  {
  11.   $type=textsecurity($_GET["type"],2);
  12.   connexion();
  13.   /*if(!isset($_GET["id"]))
  14.   {    
  15.    $liste_data=mysql_query("SELECT * FROM amasis_$type ORDER BY date_$type DESC" );
  16.    
  17.    if(mysql_numrows($liste_data)<1){
  18.     echo "Error: No entry recorded for $type.";
  19.                           }
  20.    
  21.    else
  22.    {
  23.     while($to_list=mysql_fetch_object($liste_data))
  24.     {
  25.      echo "<p /><a href=\"$_SERVER['PHP_SELF']?action=edit&type=$type&id=$to_list->id\">$to_list->titre</a> (posted on $to_list->date_$type by $to_list->auteur)";
  26.     }
  27.    }
  28.   }
  29.   else
  30.   {
  31.    // show item
  32.    
  33.    $id=textsecurity($_GET["id"],2);
  34.    
  35.    $liste_data=mysql_query("SELECT * FROM amasis_$type WHERE id='$id'" );
  36.    
  37.    if(mysql_num_rows($liste_data)==1)
  38.    {
  39.     $to_thing=mysql_fetch_object($liste_data);
  40.    
  41.    ?>
  42.    
  43.    
  44.  <div style="text-align:center;"><h1>Edit</h1>
  45.  <form method="GET" action="<? echo $_SERVER["PHP_SELF"]; ?>">
  46.  <input type="text" name="title" value="<? echo $to_thing->titre; ?>" />
  47.  <p /><textarea cols="70" rows="20" name="descr"><? echo $to_thing->descr; ?></textarea>
  48.  <p /><input type="text" name="place" value="<? echo $to_thing->lieu; ?>" />
  49.  <p /><input type="text" name="date_<? echo $type; ?>" value="<? echo $to_thing->date_$type; ?>" />
  50.  <input type="hidden" name="action" value="edit" />
  51.  <input type="hidden" name="type" value="<? echo $type; ?>" />
  52.  <input type="hidden" name="id" value="<? echo $id; ?>" />
  53.  <p /><input class="button" type="submit" value="update" />
  54.  </form>
  55.  </div>
  56.    
  57.    <?
  58.    
  59.    }
  60.    else
  61.     echo "Error: Entry # $id not found or too many results.";
  62.    
  63.   }
  64.    
  65.   mysql_close();
  66.  }*/
  67. }



n°1842047
macgawel
Posté le 23-01-2009 à 15:04:42  profilanswer
 

Ligne 30 :
 
PHP n'arrive pas à interpréter le $_SERVER['PHP_SELF'].
Personnellement, même si ce n'est pas optimisé je fais toujours mes echo 'blahblah'.$var.'blahblah', ça évite les problèmes...
 
Bizarrement, j'ai un deuxième bug, ligne 62 :
En laissant tel que, ça me sort une Parse error.
Il suffit de mettre <?php et ça marche  :??:  
 
Si quelqu'un peut m'expliquer pourquoi à cette ligne et pas avant ?

n°1842054
aspirateur
Posté le 23-01-2009 à 15:12:35  profilanswer
 

D'une manière générale il vaut mieux mettre les balises <?php

 

Attention aux accents aussi

 

echo "<p /><a href=\"$_SERVER['PHP_SELF']?action=edit&type=$type&id=$to_list->id\">$to_list->titre</a> (posted on $to_list->date_$type by $to_list->auteur)";

 

un \ dit à php de pas interpreter l'accent...

 


EDIT: tiens voila un truc vite fait qui remplace ta ligne 30

 

<?php
$lien = $_SERVER['PHP_SELF'];
$lien = $lien."?action=edit&type=$type&id=$to_list->id";

 

?>
<p><a href="\<?php echo $lien; ?>\"><?php echo $to_list; ?>->titre</a> (posted on <?php echo $to_list; ?>->date_<?php echo $type; ?> by <?php echo $to_list; ?>->auteur)
 


Message édité par aspirateur le 23-01-2009 à 15:22:51
n°1842151
Bzzzttt
Anciennement HORNY-GRANDCORNU
Posté le 23-01-2009 à 16:19:51  profilanswer
 

merci à vous pour votre aide, je vais tester tout ça! :)

n°1842157
Bzzzttt
Anciennement HORNY-GRANDCORNU
Posté le 23-01-2009 à 16:35:13  profilanswer
 

Y a toujours un grain de sable quelque part, là dedans plus particulièrement :
 

Code :
  1. while($to_list=mysql_fetch_object($liste_data))
  2.     {
  3.      echo "<p /><a href=\"".$_SERVER['PHP_SELF']."?action=edit&type=".$type."&id=".$to_list->id."\">".$to_list->titre."</a> (posted on ".$to_list->date_$type." by ".$to_list->auteur." )";
  4.     }


 
Et toujours aucun message d'erreur, c'est un peu bizarre, non ? :heink:

Message cité 1 fois
Message édité par Bzzzttt le 23-01-2009 à 16:37:32
n°1842158
aspirateur
Posté le 23-01-2009 à 16:37:11  profilanswer
 

Attends, c'est la même chose que tout à l'heure.

 

ton echo n'affichera rien avec tout ce mélange de html et php.

 

Décompose ton code comme je te l'ai dit un peu plus haut.


Message édité par aspirateur le 23-01-2009 à 16:39:46
mood
Publicité
Posté le 23-01-2009 à 16:37:11  profilanswer
 

n°1842161
Bzzzttt
Anciennement HORNY-GRANDCORNU
Posté le 23-01-2009 à 16:39:02  profilanswer
 

nada : page blanche ! :D

n°1842163
omega2
Posté le 23-01-2009 à 16:39:17  profilanswer
 

error_reporting(E_ALL | E_STRICT);
Après, ça sera plus simple à débugguer.

n°1842168
aspirateur
Posté le 23-01-2009 à 16:43:12  profilanswer
 

Bzzzttt a écrit :


 

Code :
  1. while($to_list=mysql_fetch_object($liste_data))
  2.     {
  3.      echo "<p /><a href=\"".$_SERVER['PHP_SELF']."?action=edit&type=".$type."&id=".$to_list->id."\">".$to_list->titre."</a> (posted on ".$to_list->date_$type." by ".$to_list->auteur." )";
  4.     }



Même chose que tout à l'heure

n°1842173
Bzzzttt
Anciennement HORNY-GRANDCORNU
Posté le 23-01-2009 à 16:47:50  profilanswer
 

ok merci à tous ça marche finalement, ouf, en effet aspirateur j'avais mal appliqué tes conseils et maintenant tout marche bien, il était temps ;)
 

n°1842174
aspirateur
Posté le 23-01-2009 à 16:49:22  profilanswer
 

D'une façon générale quand un code ne marche pas essaye de le décomposer au maximum et ensuite tu essaye petit à petit de le simplifier.
 
Ravi de t'avoir aidé  :jap:  
 
Bon courage

n°1842242
Profil sup​primé
Posté le 23-01-2009 à 18:39:30  answer
 

aspirateur a écrit :

Moi ce que je vois c'est les { } oubliés en rouge
Tu as pas plus de détail sur l'erreur?


Ils sont facultatifs (une seule instruction dépend de la structure de contrôle).
Aussi, on n'y pense pas, mais $_SERVER['PHP_SELF'] doit être échappé.
Il est renvoyé par le navigateur, donc pas fiable :
 
page.php

Code :
  1. <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"><!-- etc... --></form>


 
Je charge : http://site.com/page.php/&#034;&lt [...] ;XSS&#034; )</script>
J'obtiens :

Code :
  1. <form method="post" action="/page.php/"<script>alert("XSS" )</script>"><!-- etc... --></form>

Message cité 1 fois
Message édité par Profil supprimé le 23-01-2009 à 18:44:41
n°1842247
omega2
Posté le 23-01-2009 à 18:52:56  profilanswer
 

Deux choix quand ça correspond à un if qui est suivit d'un else :
- on met les "{}"
- on enlève le ";" qui précède le else
 
Là, il n'y a pas les "{}" et on trouve le ";".

n°1842251
Profil sup​primé
Posté le 23-01-2009 à 18:57:42  answer
 

pourquoi chez moi çà marche ? [:petrus75]

n°1842255
omega2
Posté le 23-01-2009 à 19:02:57  profilanswer
 

Heu ... normalement ça devrait pas (le php arrivera toujours à m'étonner avec son laxisme et/ou ses bugs)
T'utilises quelle version de php chez toi que je vérifie ça?

n°1842258
Profil sup​primé
Posté le 23-01-2009 à 19:04:37  answer
 

PHP 5.2.6

Code :
  1. <?php
  2. $true = true;
  3. if($true) echo PHP_VERSION;
  4. else {echo 'machin';}
  5. ?>

n°1842259
omega2
Posté le 23-01-2009 à 19:08:49  profilanswer
 

ARGL  [:kosmos] Le php est à contre courant total là dessus. Il force à mettre le ; devant le else. :pt1cable:  
 
Bon, ben je ne peux que constater que je me suis bien planté ce coup ci.

n°1842260
Profil sup​primé
Posté le 23-01-2009 à 19:10:40  answer
 

De toute façon je mets toujours les crochets [:spamafote]

n°1842343
omega2
Posté le 23-01-2009 à 22:31:27  profilanswer
 

idem, c'est pour ça que je me suis planté. ;)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] code récalcitrant

 

Sujets relatifs
Sessions / PHP[PHP] equivalence pour "disabled"
[PHP - Apache - htaccess] Rewrite modePHP et Oracle
Aidez-moi à décrypter ce bout de codeAide création page PHP comme celle ci
Codepress ou la coloration syntaxique d'un code sur une page webcreer des Tableaux en PHP avec pour nom le resultat fournit par requet
code liste deroulante multicritereGénérateurs de code PHP ... vos avis ?
Plus de sujets relatifs à : [PHP] code récalcitrant


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR