[PHP] code récalcitrant

code récalcitrant [PHP] - PHP - Programmation

Marsh Posté le 23-01-2009 à 11:58:49    

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 !

Reply

Marsh Posté le 23-01-2009 à 11:58:49   

Reply

Marsh Posté le 23-01-2009 à 12:00:17    

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. }

Reply

Marsh Posté le 23-01-2009 à 12:18:35    

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

Reply

Marsh Posté le 23-01-2009 à 12:51:15    

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. }

Reply

Marsh Posté le 23-01-2009 à 13:06:22    

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. }



Reply

Marsh Posté le 23-01-2009 à 15:04:42    

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 ?

Reply

Marsh Posté le 23-01-2009 à 15:12:35    

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
Reply

Marsh Posté le 23-01-2009 à 16:19:51    

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

Reply

Marsh Posté le 23-01-2009 à 16:35:13    

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
Reply

Marsh Posté le 23-01-2009 à 16:37:11    

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
Reply

Marsh Posté le 23-01-2009 à 16:37:11   

Reply

Marsh Posté le 23-01-2009 à 16:39:02    

nada : page blanche ! :D

Reply

Marsh Posté le 23-01-2009 à 16:39:17    

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

Reply

Marsh Posté le 23-01-2009 à 16:43:12    

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

Reply

Marsh Posté le 23-01-2009 à 16:47:50    

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

Reply

Marsh Posté le 23-01-2009 à 16:49:22    

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

Reply

Marsh Posté le 23-01-2009 à 18:39:30    

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
Reply

Marsh Posté le 23-01-2009 à 18:52:56    

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 ";".

Reply

Marsh Posté le 23-01-2009 à 18:57:42    

pourquoi chez moi çà marche ? [:petrus75]

Reply

Marsh Posté le 23-01-2009 à 19:02:57    

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?

Reply

Marsh Posté le 23-01-2009 à 19:04:37    

PHP 5.2.6

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

Reply

Marsh Posté le 23-01-2009 à 19:08:49    

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.

Reply

Marsh Posté le 23-01-2009 à 19:10:40    

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

Reply

Marsh Posté le 23-01-2009 à 22:31:27    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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