Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les @ dans nos script

Qu'est ce qu'ils font la ?!!

Sujet résolu
    4 février 2006 à 3:55:06

    Salut,

    Une question me turlupine depuis quelque temps. Souvent en lisant des sources php, je peux voir que des requetes sont précédé d'un @.

    Petit exemple que j'ai pris sur l'un des tutos soumis par un Zero:

    // On assigne et protége par la même occasion les variables
    @$login=htmlentities($_POST['login']);
    @$code=htmlentities($_POST['code']);

    // Une petite variable qui sera simplement un lien vers le retour du formulaire
    $retour="<a href=\"form_suppr.htm\">RETOUR</a>";

    // On commence notre condition qui vérifiera si le login et le code sont correct.
    if($login=="Test" &&  $code=="binouze")
    {
            echo "<h1>Vous avez bien supprimé votre compte</h1>".$retour;
    }
    else
    {
            echo "<b>Mauvais mot de passe</b>, veuillez vérifier votre saisie ".$retour;
    }
    // Fin du script
    exit;


    Voila comme on peut le voir, ligne deux et trois, un @ précède la requete. Et je ne vois pas du tout ce qu'ils viennent faire la !

    Quelqun à une idée ?
    • Partager sur Facebook
    • Partager sur Twitter
      4 février 2006 à 4:09:46

      Ils servent à masquer les erreurs. Le mieux est de ne jamais les utiliser et d'essayer de corriger les erreurs plutot.

      Dans ce cas-ci, vérifier l'existance des variables POST.
      $login = (isset($_POST['login'])) ? htmlentities($_POST['login']) : "";
      $code = (isset($_POST['code'])) ? htmlentities($_POST['code']) : "";
      • Partager sur Facebook
      • Partager sur Twitter
        4 février 2006 à 9:56:35

        Ca fait quoi le " ? " ? Ca sépare les deux fonctions de la variable ?
        • Partager sur Facebook
        • Partager sur Twitter
          4 février 2006 à 10:05:48

          le ? :
          c'est un opérateur ternaire !
          Il sert à rétrécir un code PHP
          exemple :
          $var = 0;
          $var = 0 ? echo "la variable est égale à zéro" :echo "la variable n'est pas égale à zéro" ;
          // est équivalent à
          if($var = 0)
          {
            echo "la variable est égale à zéro" ;
          }
          else
          {
          echo "la variable n'est pas égale à zéro" ;
          }
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            4 février 2006 à 10:06:00

            Non là il utilise des conditions ternaires, c'est l'horreur quand on est pas habitué, et niveau optimisation on y perd ! Le seul avantage, c'est que ça prend une ligne !
            • Partager sur Facebook
            • Partager sur Twitter
              4 février 2006 à 10:07:06

              Citation : Simon-le-zeus

              Ca fait quoi le " ? " ? Ca sépare les deux fonctions de la variable ?

              regarde dans les opérateurs de comparaison, ça s'appelle l'opérateur ternaire
              flobard=> où as-tu vu qu'on y perdait??

              petit test:(bon, c'est assez moche, mais ça marche :-° )
              <?php
              $time_start = microtime(true);
              $i=0;
              while ($i++<10000) {
                      $action = (empty($_POST['action'])) ? 'défaut' : $_POST['action'];
              }

              $time_end = microtime(true);
              $time = $time_end - $time_start;

              echo "$time secondes\n";

              $time_start = microtime(true);
              $i=0;
              while ($i++<10000) {
                      if(empty($_POST['action'])) $action = 'défaut' ;
                      else $action = $_POST['action'];
              }

              $time_end = microtime(true);
              $time = $time_end - $time_start;

              echo "$time secondes\n";


              ?>


              résultat: variable... l'un est plus rapide que l'autre puis vice-versa (1) (les différences sont de l'ordre de 10 micro secondes sur 10000 itérations!!!! )
              Donc, Où y perd-t-on?!?

              (1)0.6768479347229 secondes
              0.68931984901428 secondes
              • Partager sur Facebook
              • Partager sur Twitter

              Les @ dans nos script

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown