8795 sujets

Développement web côté serveur, CMS

Bonjour,

J'essaye de faire un petit script qui positionné en tête d'une page PHP permette de vérifier que toutes les variables dont j'ai besoin existent et ne sont pas nulles.

Je m'explique, sur une page j'ai une requete qui récupère des variables (6 ou 7) parfois je dois actualiser (F5) la page pour afficher correctement toutes les variables.

J'aimerais donc afficher la page qu'une fois que toutes les variables sont récupérées et non nulles.
Je pense le faire à base de :

if ((isset($var) && (!empty($var))))


Par contre si une ou plusieurs variables n'existent pas ou sont nulles je voudrais pouvoir relancer la requete sans pour autant tomber dans la boucle de redirection jusqu'a ce que toutes mes variables puissent être affichées.

J'ai besoin de cela car j'envoie les variables dans un mail (avec cette méthode, je pourrais ne pas envoyer le mail vide si au moins une des variables pose problème).

J'utilise pour le moment une redirection :
header('Location:  http://www.monsite.com/page2.php');  

qui réexecute la requete.

En résume ce que je cherche a faire:

1- exécute la requête
2- vérifie que tous les éléments de la requête existent
a) si un ou plusieurs éléments sont manquants : exécute de nouveau la requête
b) sinon continue le script


Merci pour vos conseils.
Modifié par pareto (07 Aug 2013 - 18:50)
Je ne vois pas trop où tu veux en venir avec un tel système. Pourquoi tu ne récupères pas toutes les données dont tu as besoin en une seule fois ? Qu'est-ce qui t'en empêche ?
sais pas moi un truc du genre :

$ready_to_go = true;

function Verif($val){
   if($ready_to_go){
      if(isset($val) && !empty($val)){
         $ready_to_go = true;
      } else {
         $ready_to_go = false;
      }
   }
}


// un for, un foreach ou à la mano

Verif($var1);
Verif($var2);
Verif($var3);

if($ready_to_go){

// suite

} else {
   header blabla
}

Hello pareto,

comme Quentin je ne vois pas bien dans quel cas une requête te ramènerait une fois 6 variables et une autre fois 7 (j'ai du mal à croire que ça pourrait venir de la réactivité du serveur)... Smiley rolleyes
A moins qu'il n'y ait un problème d'asynchronicité auquel cas c'est la gestion de la page qui est à revoir : en gros il faudrait conditionner l'envoi du mail à la réception de la 7ème variable, ou supprimer l'asynchronicité, ou autre chose en fonction de ce que tu essaies de faire.

Au passage !empty implique obligatoirement isset.

@ArnaudT> ton bout de code a bien peu de chances de fonctionner étant donné que la portée de la variable $ready_to_go n'est pas globale et qu'elle vaudra toujours NULL dans la fonction. Smiley cligne

$ready_to_go = true;

for($i = 0; $i < 7; $i++) {
	$ready_to_go = $ready_to_go && !empty($val[$i]);
}

var_dump($ready_to_go);

Modifié par Heyoan (09 Aug 2013 - 04:38)
a écrit :
La réactivité du serveur ?
C'est pas systématique, mais ça arrive quelquefois...

Tu dois avoir un sérieux problème alors. Si tu parles d'un dépassement récurrent des 30 secondes et même si la limite a été réduite à 15 ou 10, il y a quelque chose qui ne joue pas. Pour info, le temps passé sur le réseau, ou autrement dit les requêtes SQL, CURL, socket et autres ne comptent pas dans les 30 sec, donc à moins de traitement locaux assez lourds dans ton code php ou si c'est vraiment mal codé, tu ne dépasses normalement jamais.

ET si tu fais des traitements lourds qui peuvent durer bien plus de 30 sec, du genre génération/modification d'audio/vidéo, il faut revoir ton système autrement, php n'est vraiment pas fait pour les gros calculs (même python et java sont 10 fois plus rapides)
ben je l'ai dit pourtant :

a écrit :
sais pas moi un truc du genre


et ensuite on sait pas d'où viennent ses variable pi etre il fait un appel à une page extérieur...
Heyoan a écrit :

Au passage !empty implique obligatoirement isset.


Ouep, isset() ou empty() c'est la même fonction en interne. Donc appeler les 2 à la suite ne sert à rien, une seule suffit. Dans le moteur de PHP (le Zend Engine), la fonction est en fait zend_do_isset_or_isempty().

Heyoan a écrit :

@ArnaudT&gt; ton bout de code a bien peu de chances de fonctionner étant donné que la portée de la variable $ready_to_go n'est pas globale et qu'elle vaudra toujours NULL dans la fonction. Smiley cligne


Je rajouterai que passer une variable qui n'existe peut être pas à une fonction ça fait 2 choses :

- Si la variable n'existe pas ça déclenche une erreur de type notice.
- A l'intérieur de la fonction le isset() renverra toujours true même si la variable n'existait pas en dehors.

Et pour la variable $ready_to_go c'est pareil. Il aurait donc fallu passer des références plutôt que les variables.


myisset(&$var, &$ready_to_go) {
  $ready_to_go = !empty($var);
}


Après l'énoncé est un peu incomplet mais d'après ce que j'ai compris j'aurais fait un truc comme ça :


$vars = array('foo', 'bar', 'baz'); // noms des variables
$ready = true;

foreach($vars as $var) {
   if (empty($$var) {
     $ready = false;
     break;
   }
}

if ($ready) {
  // do it
} else {
  // bye
}

Modifié par jb_gfx (10 Aug 2013 - 17:46)