comment ecrire si variable n'existe pas

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : comment ecrire si variable n'existe pas

par Ultim4T0m » 11 janv. 2007, 18:11

Penses au tag [Résolu] si ton problème est reglé ;)

par castelli » 11 janv. 2007, 16:52

Merci beaucoup , j'ai enfin reussit a debugguer (c'etait pas une mince affaire ;) )

Merci encore a vous tous

:D

par Ryle » 11 janv. 2007, 16:14

j'ai tester pour $_POST['motsclef'] et c'est pas un tableau

(genre dans la formulaire de recherche je met "t" et quanb je fais l'echo du $_POST sa me donne bien "t"

de meme je fais un echo de $motsclef2 aprés les premiere isset et sa me donne bien aussi t (avant le clique sur l'entête) et l'echo de methode2 me donne bien la bonne valeur lui aussi
Et bien voilà, tu as assimilé le concept du débuggeur ! ;)
Il ne te reste plus qu'à placer quelques echo judicieusement, jusqu'à ce que tu ais pu identifier LA ligne qui fait que ça passe à Array et la corriger :)
mais ce serait encore mieux de tester si une valeur a été passée en POST nan ?
Tu entend quoi par la??
que je devrais plutot passer la valeur en $_POST plutot qu'en $_GET (pour recuperer les valeur dans l'adresse) ?
Pas nécessairement, mais que tu regardes si la valeur existe avant de l'utiliser, ça t'évitera des messages d'erreurs sur certaines configuration.
if(isSet($_POST['methode']))
  $methode = $_POST['methode'];
else
  $methode = '';
// ou avec l'opérateur ternaire (ca revient au même que le code ci-dessus)
$methode = (isSet($_POST['methode'])) ? $_POST['methode'] : '';
Ainsi tu es sur que $methode est définie, et aura la valeur vide par défaut (genre quand tu arrives sur la page pour la première fois et qu'aucune donnée n'a été envoyée en post :)).

par sadeq » 11 janv. 2007, 16:05

Tout d'abord, 2 remarques:
  • 1. les if qui contiennent les isset ne doivent pas s'exécuter au démarrage mais seulement si il y a eu POST de recherche ou GET du tri
    Parce qu'au démarrage il n'y a ni POST ni GET du formulaire

    2. le champ "clef" n'existe nul part alors qu'il est impliqué dans un if

Par ailleurs, pourquoi ne pas rappeler les critères de recherche dans l'envoi GET par le lien hypertexte et éviter ces tests perturbants.
Pour éviter donc de perdre les critères actuels de recherche tout en déclenchant le classement, il faut joindre les critères "methode" et "motsclef" du formulaire de recherche dans les url des liens hypertexte attachés aux entêtes.

Voici un exemple:

Code : Tout sélectionner

<form method="post"> Mot clé <input name="motcle"> <input type="submit" value="Recherche"> </form> <table> <tr> <!-- la colonne Nom + un lien de tri asc/desc --> <th> <a href= "?tri_par=nom&sens=<?php echo ($_GET['sens']=='desc'?'asc':'desc'); ?>&motcle=<?php echo $_POST['motcle']; ?>&methode=<?php echo $_POST['methode']; ?>" >Nom</a> </th> <!-- la colonne Reference + un lien de tri asc/desc --> <th> <a href= "?tri_par=reference&sens=<?php echo ($_GET['sens']=='desc'?'asc':'desc'); ?>&motcle=<?php echo $_POST['motcle']; ?>&methode=<?php echo $_POST['methode']; ?>" >Référence</a> </th> ... suite du tableau
Le programme PHP de traitement:
//Au démarrage afficher tout et à la recherche ou le tri selon POST et GET
   //réception des variables
   //Pour la recherche : motcle et methode se trouvent dans POST ou dans GET
   $motcle = $_POST["motcle"]?$_POST["motcle"]:$_GET["motcle"]?$_GET["motcle"]:""; //par défaut motcle est vide
   $methode = $_POST["methode"]?$_POST["methode"]:$_GET["methode"]?$_GET["methode"]:"nom"; //par defaut chercher dans "nom"

   //Pour le tri : tri_par et sens se trouvent dans le GET
  $tri_par = $_GET["tri_par"]?$_GET["tri_par"]:"nom"; //par défaut tri par nom
   $sens = $_GET["sens"]?$_GET["sens"]:"asc"; //par défaut l'ordre est ASC

  //Maitenant prêt pour générer la requête :
  $sql ="SELECT groupe,classe,produit,
nom,quantite,initiale,numero,date,localisation,
disponibilite,commentaire,reference,img,formule 
FROM biobase 
WHERE $methode LIKE '%$motcle%' ORDER BY $tri_par $sens";

    //Exécution
   .... et suite
  

par castelli » 11 janv. 2007, 15:59

enfaite je l'ai pas mis sur le code que je vous ai donner mais je fais un test pour verifier si le bouton envois a bien eté cliquez et si tels est le cas et que la personne a rien mis dans $_POST['motsclef'] le tableau en entier s'affiche (demande de la personne chez qui je suis en stage)
donc j'ai pas besoin de le tester
enfin je crois pas. :?

par abricot » 11 janv. 2007, 15:52

ici le code pour dire : tant qu'il n'y a pas de mots clef de rentré dans le formulaire on prend ceux de l'adresse
$methode = $_POST['methode'];
$motsclef = $_POST['motsclef'];
$methode2=$_GET['methode2'];
$motsclef2=$_GET['clef'];

if (!isset($methode2))
  $methode2 = $methode;
if (!isset($motsclef2)) 
  $motsclef2 = $motsclef;
echo $motsclef2;

if (isset ($_GET['clef']))
{ 
if ($motsclef !="") $motsclef2 = $motsclef;

}
if (isset ($_GET['methode2']))
{ 
if ($methode !="") $methode2 = $methode;

}
Salut,

Je suis un gros débutant desolé si je dis une connerie mais $methode = $_POST['methode']; donc $methode existe que si une personne tape quelque chose dans le formulaire "methode" et valide l'envois[/quote]

par castelli » 11 janv. 2007, 15:49

j'ai tester pour $_POST['motsclef'] et c'est pas un tableau

(genre dans la formulaire de recherche je met "t" et quanb je fais l'echo du $_POST sa me donne bien "t"

de meme je fais un echo de $motsclef2 aprés les premiere isset et sa me donne bien aussi t (avant le clique sur l'entête) et l'echo de methode2 me donne bien la bonne valeur lui aussi
if (!isset($methode2))
  $methode2 = $methode;
if (!isset($motsclef2)) 
  $motsclef2 = $motsclef;
print_r($_POST['motsclef']);
echo $motsclef2;
echo $methode2;
if (isset ($_GET['clef'] ))
{ 
if ($motsclef !="") $motsclef2 = $motsclef;
}

if (isset ($_GET['methode2'] ))
{ 
if ($methode !="") $methode2 = $methode;

}
mais ce serait encore mieux de tester si une valeur a été passée en POST nan ?
Tu entend quoi par la??
que je devrais plutot passer la valeur en $_POST plutot qu'en $_GET (pour recuperer les valeur dans l'adresse) ?

par Ryle » 11 janv. 2007, 15:34

ça veut simplement dire que ta variable $b est de type tableau, essaye de faire un print_r($a);
:!:

T'es tu assuré de ce que contenait $b, et par rapport à ton code, de ce que pouvait contenir $_POST['motsclef'] ?
C'est bien de tester si une valeur a été passée en GET et si ce n'est pas le cas d'utiliser celle passée en POST, mais ce serait encore mieux de tester si une valeur a été passée en POST nan ? :)

par castelli » 11 janv. 2007, 15:30

ps: et dans ma barre d'adresse aprés avoir cliquez sur l'entete

voila l'adresse que j'ai :

...index6.php?class=reference&methode2=nom&motsclef2=Array&limite2=0

par castelli » 11 janv. 2007, 15:22

en gros voila :

j'ai un formulaire ou je peu faire une recherche (par dans mots clefs dans une categorie au choix(liste deroulante))dans ma base de donnée
et les resultats sont entrées dans un tableau.

Quand je clique sur l'une des entêtes du tableau la page est rechargé avec mes resultats rangés par catégorie (order by dans ma requete)

Jusque la tout va bien , sauf que quand clique sur l'entête du tableau il me perd une partie de ma recherche (les mots clefs)et donc ce que j'obtient dans le tableau c un peu du nimporte quoi.

Par contre il me garde bien la categorie que j'avais choisit.


voila des partie du code:

le formulaire
<form method="POST" action='index6.php'>
	<tr><td><input type="text" name="motsclef"></td>
	<td><select name="methode">
	<option value="nom">Par nom</option>
	<option value="reference">Par reference</option>
	<option value="initiale">Par initiale</option>
	<option value="date">Par date</option>
	<option value="localisation">Par localisation</option>
	<option value="disponibilite">Par disponibilité</option>
	</select>
	</td></tr>
	<tr><td><input type="submit" name=envois value="Rechercher"></td></tr>
	</form>
un lien des entêtes :
<TH><a href='index6.php?class=reference&methode2=<?php echo $methode2; ?>&motsclef2=<?php echo $motsclef2; ?>&limite2=<?php echo $limite; ?>' name=envois>Reference</a></TH>
et ici le code pour dire : tant qu'il n'y a pas de mots clef de rentré dans le formulaire on prend ceux de l'adresse
$methode = $_POST['methode'];
$motsclef = $_POST['motsclef'];
$methode2=$_GET['methode2'];
$motsclef2=$_GET['clef'];

if (!isset($methode2))
  $methode2 = $methode;
if (!isset($motsclef2)) 
  $motsclef2 = $motsclef;
echo $motsclef2;

if (isset ($_GET['clef']))
{ 
if ($motsclef !="") $motsclef2 = $motsclef;

}
if (isset ($_GET['methode2']))
{ 
if ($methode !="") $methode2 = $methode;

}
voici un echo de la requete avant d'appuyer sur une categorie:

Code : Tout sélectionner

SELECT groupe,classe,produit,nom,quantite,initiale,numero,date,localisation,disponibilite,commentaire,reference,img,formule FROM biobase WHERE nom LIKE '%t%' ORDER BY 'reference'
et voici un echo aprés avoir appuyer sur une categorie:

Code : Tout sélectionner

SELECT groupe,classe,produit,nom,quantite,initiale,numero,date,localisation,disponibilite,commentaire,reference,img,formule FROM biobase WHERE nom LIKE '%Array%' ORDER BY 'reference'
Voila si vous voyez des erreures n'hesitez pas surtout
ou si vous avez besoin de d'autre explication sur ce que j'ai voulus faire dite le moi

merci encore

par jojolapine » 11 janv. 2007, 15:12

ça veut simplement dire que ta variable $b est de type tableau, essaye de faire un print_r($a);

par sadeq » 11 janv. 2007, 15:06

et si tu nous donnais un bout de ton code précis ça serait plus simple

par castelli » 11 janv. 2007, 15:02

enfaite je fais un echo de ma variable $a et sa me donne array (alors que la variable $b existe bien )

et comme j'en ai besoin pour une requete...

voila voila

par iclo » 11 janv. 2007, 15:01

Qu'entends tu par ça ne fonctionne pas ? quel est le résultat après l'exécution du code que tu nous as montré ?

par jojolapine » 11 janv. 2007, 15:00

ça devrait pourtant marcher...
mais qu'entends tu par "variable n'éxiste pas" ?
car avec
$var= null;
isset($var) retourne true