encore register_globals

Eléphant du PHP | 113 Messages

20 févr. 2006, 18:53

Salut, ce script de moteur de recherche marche parfaitement dans easy php 1.6 mais sur easy php 1.8 rien aucun signe de vie, ce que je demande c'est pas de le corriger car déja il marche sur EasyPhp v1.6 et je veut pas emerder les gens a lire 91 lignes mais simplement de m'aidez a détécter les erreurs dû au register_globals, donc m'aidez pour remplacer toutes les variables non déclarées sur mon script, et si y'a une erreur ou 2 je serais ravis de connaitre laquel:
MERCI

<?
$db_host="localhost";   
$db_user="root";        
$db_passwd="";         
$db="mess";         
$table="soutien";     
$cat= "$_POST douze"; //variable dans un champ dans un formulaire
$limit=1; //nombre de résultat afficher par page  ici 1 par defaut

if (!isset($debut)) $debut = 0;       
if (!empty($recherche)) // variable dans un champ d'un formulaire
    {
    $recherche=strtolower($recherche);                //on passe en minuscule
    $mots = str_replace("+", " ", trim($recherche));//on remplace les + par des espaces
    $mots = str_replace("\"", "", $mots);          //idem pour \
    $mots = str_replace(",", " ", $mots);         //idem pour ,
    $mots = str_replace(":", " ", $mots);        //idem pour :
    $url = urlencode(urlencode($url));
    $tab=explode(" " , $mots);
    $nb=count($tab);
    $table=urldecode($table);

    $sql="select * from soutien where 1 AND cat= '$douze' AND crip like \"%$tab[0]%\"  ";

    for($i=1 ; $i<$nb; $i++)
        {
        $sql.=" $operateur cat='$douze' AND crip like \"%$tab[$i]%\"  ";
        }
$sql .= "ORDER BY '$tri' "; 

    $sql2=$sql;                      //requete permettant de connaitre le nombre de résultats

$sql.=" Limit $debut,$limit ";   // requête limitante.
    
    mysql_connect($db_host,$db_user, $db_passwd);
    $result2 = mysql_db_query($db,$sql2);
    $result = mysql_db_query($db,$sql);

  //on compte les resultats
   $resultat= mysql_numrows($result2);
 
?>


je sais que sa va merder si je ne déclarre pas correctement mes variables car si le haut n'est pas bien déclarée tout le reste va planter
Modifié en dernier par knops le 20 févr. 2006, 19:19, modifié 1 fois.

ViPHP
ViPHP | 2144 Messages

20 févr. 2006, 18:56

J'ai du mal à comprendre ce que tu attends des membres de ce forum....

moh
Invité n'ayant pas de compte PHPfrance

20 févr. 2006, 23:00

bon j'atend qu'on me corrige mes requéte sql et leur déclaration de variables et la déclaration de variables des 20 premiéres lignes

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

20 févr. 2006, 23:11

Euh... tu va ouvrir combiens de sujet pour ce problème ?

:arrow: http://www.phpfrance.com/forums/voir_su ... texte-.php
:arrow: http://www.phpfrance.com/forums/voir_sujet-14225-0.php

tu y as eu des réponses et solutions à apporter tu pourrais faire un effort au moins, je récapitule:
$cat=$_POST['douze']; //ou $_GET['douze'];
$limit=$_POST['app'];
pour toutes les variables qui ne sont pas directement initialisées dans la page comme par exemple:
$var="machin";
des que tu utilise une variable dans un test ou autre:
if($var)
$var doit être initialisé avec une valeur donc on revient à l'exemple 1 du dessus suivant que ces varaibles viennent d'un formulaire (en methode POST) ou d'un lien (GET)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 2144 Messages

20 févr. 2006, 23:25

J'ai l'impression que tu as reçu toutes les informations nécessaires pour corriger ces erreurs. donc il ne te reste plus qu'à t'y mettre :wink: :wink: :wink:
ps: nous ne sommes pas des débuggeurs gratuits en ligne.

Eléphant du PHP | 113 Messages

21 févr. 2006, 20:37

mon moteur de recherche comporte 2 pages la premiére contient un fomulaire avec des champs et la deuxiéme comporte le moteur en soit, sur cette page je récupére les variables comme ceci, example d'une variable recupérer:

$limit="$app"; //avant la correction
 $limit=$_POST['app']; //aprés la corréction
comme vous voyer (aprés la correction) sa marche mais seulement sur la premiére page de ce qu'affiche le moteur de recherche car mon moteur utilise la pagination, si par example mon moteur trouve 10 résultats et que j'affiche 5 par page alors un lien - suivant - s'affiche pour visualiser les 5 autre résultats et la est tout le problème, car ce lien -suivant-
transmet des variables les même que ceux dans la page du formulaire, exemple:

Code : Tout sélectionner

<a href=resultats.php?recherche=$recherche&operateur=$operateur&app=$app&debut=".($debut+$limit).">suivant</a>
Notice: Undefined variable: app in x:\xxxx\xxx.php on line xx //example d'erreur pour la $app

dés l'affichage des résultats trouvée tout les liens qui doivent envoyé des variables sont indiqué comme:

Notice: Undefined variable

donc quand je transfer des variables par formulaire j'utilise (post) mais pour les liens (GET), mais sur mon script j'utilie le $_POST pour récuperer les variables du formulaire du moteur mais puisque j'utilise la pagination, j'envoi les variables avec un lien et la toutes mes requétes et déclaration de variable sone du style $_post donc ils ne peuvent pas récupérer les variables d'un lien car ici faut utiliser $_GET, et la je ne comprend plus rien car comme j'ai déja préciser les résultats sont répartie sur plusieurs pages avec un lien suivant qui doit transferer les variables mais puisque j'utilise le $_POST quand je clique sur suivant hoppp..plus rien les variable transmise ne peuvent pas étre récupérer ....j'espére que vous avez compris mon prob...MERCI d'avce si quelqu'un me propose une soluce

ViPHP
ViPHP | 2144 Messages

22 févr. 2006, 01:45

Tu dois tester et utiliser la variable transmise soit par get soit par post.
if (isset($_POST['variable']))  $var = $_POST['variable'];

else if (isset($_GET['variable']))  $var = $_GET['variable'];


//Si après ces deux instructions la variable n'est pas affectée, et bien c'est //qu'on n'a rien reçu ni par poste, ni par get.
if (! isset($var))
   print "pas de variable reçue";
else
   print "variable reçue";

Eléphant du PHP | 113 Messages

23 févr. 2006, 21:02

Salut j'ai corrgié grace a vos réponces toutes les erreurs de déclaration de variables sur mon moteur de recheche ( qu'est ce que je me suis fait emmerder) MERCI LES MECS, mais reste un seul petit problème, et c'est le suivant:
mon moteur de recherche utilise la pagination, donc le critére de sélection -Limit- utilise 2 variables $debut et $limit
qu'il récupére d'un formulaire, par exemple si je cherche avec le mot clé / Dire straits / $debut=0 par defaut et avec $limit=1 donc 1 résultat pas page ma requéte avec un echo affiche:
select * from matable where recherche like "%Dire straits%" Limit 0,1  //ici 0 est $debut et 1 est $limit
voici la partie du script qui s'occupe de l'affichage de la barre de navigation -suivant- -precèdent-:
if(!isset($debut)) $debut = 0; // ici la $debut=0
     $sql.=" Limit $debut,$limit ";   // requête limitante, qui récupére $debut et $limit
     $nombre=ceil($nrows/$limit);

        if($debut>0) 

            {
     echo "<a href=resultats.php?recherche=$recherche&debut=".($debut - $limit).">Page Précédente</a> ";//Page Précédente 
            }            
        
        if ($nombre>1) 
            {
            for($i=1; $i<=$nombre; $i++)
                {
     echo "<a href=resultats.php?recherche=$recherche&debut=".(($i-1)*$limit).">".$i."</a> ";//on affiche le nombre de pages
                }
            }
        if(($debut+$limit)<$nrows)
            {
     echo "<a href=resultats.php?recherche=$recherche&debut=".($debut + $limit).">Page Suivante</a>"; //Page Suivante
            }

si la page de résultat trouve plus d'une réponce 2 par exemple, un lien -suivant- s'affiche en bas de la recherche pour afficher l'autre résultat, car come vous avez vue au dessus le lien Page Suivante envoie des variables dont $debut et $limit comme ceci,debut=".($debut + $limit)." ici j'additionne $debut et $limit puisque $debut=0 et $limit=1 donc
debut=1 et ceci affiche:
  select * from matable where recherche like "%Dire straits%" Limit 1,1 //l'affichage du 2émme résultats 
sa fonctione sur easy php 1.6 mais pas sur le 1.8 et je ne comprend vramient pas pourquoi? c r quand je click sur le lien suivant il ne ce passe rien et la requéte reste toujour avec les même -limit- Limit 0,1 alor quelle devrait changé car le lien page suivante additione $debut + $limit

Eléphant du PHP | 113 Messages

24 févr. 2006, 21:15

$limit=1; //nombre de résultat afficher par page  ici 1 par defaut 
if(!isset($debut)) $debut = 0; // ici  $debut=0 
$sql.=" Limit $debut,$limit ";   // requête limitante, qui récupére $debut et $limit
echo "<a href=resultats.php?recherche=$recherche&debut=".($debut + $limit).">Page Suivante</a>"; //Page Suivante  
le problème c'est que la variable $debut envoyé par le lien qui additionne $debut+$limit
debut=".($debut + $limit)."
n'est pas récupérer par la requéte limitante en haut .....et je comprend pas pourquoi?

ViPHP
ViPHP | 2144 Messages

24 févr. 2006, 21:21

Toutes les variables doivent être récupérées en fonction de leur origines:
- si elles sont transmises par l'url par $_GET
- si elles sont transmises par un formulaire en "method post" par $_POST

Eléphant du PHP | 113 Messages

24 févr. 2006, 21:31

$sql.=" Limit $debut,$limit ";  
donc devient
$sql.=" Limit $_GET['debut'],$limit ";// c'est juste???????????

ViPHP
ViPHP | 2144 Messages

24 févr. 2006, 22:24

c'est juste???????????
testes ;) ;)

Eléphant du PHP | 113 Messages

24 févr. 2006, 22:25

sa marche pas :?:

Eléphant du PHP | 113 Messages

24 févr. 2006, 23:09

y'a pas d'autre moyen d'écrire sa??????

$sql.=" Limit $_GET['debut'],$limit ";// c'est juste??????????? 

Mammouth du PHP | 19672 Messages

24 févr. 2006, 23:12

$sql.=" Limit ". $_GET['debut'] .", ". $limit .";";// c'est juste oui
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: