Recherche proposition de regime miceur de script :-)

cs_eva4 Messages postés 278 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 24 juin 2011 - 25 janv. 2010 à 09:33
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 - 26 janv. 2010 à 09:09
Kikou tout le monde et bon début de semaine

bon c pas urgent, je me demandais juste si quelqu'un ici serait en mesure de me proposer une sorte de regime pour mon script. Il fonctionne nikel, mais je penses que j'ai pas tout fais dans les règle de l'art et que des mieux peuvent être apporté.
Donc si des personnes veulent me soumettre leurs idées, je prends

$mysql_link=mysql_connect("xxxxx", "xxxx", "xxxxxx");
mysql_select_db("xxxxxx", $mysql_link);
$sql=("select ro1, ro2, ro3 from ep_ro Where F='$Z'");
$resul=mysql_query($sql);
$rs=mysql_fetch_array($resul);
$ro1=$rs["ro1"];
$ro2=$rs["ro2"];
$ro3=$rs["ro3"];




$mysql_link=mysql_connect("xxxxx", "xxxx", "xxxxxx");
mysql_select_db("xxxxxx", $mysql_link);
$sql=("select case1, case2, case3 from ep_list Where F='$F'");
$resul=mysql_query($sql);
$rs=mysql_fetch_array($resul);
$A=$rs["case1"];
$B=$rs["case2"];
$C=$rs["case3"];

if ($C=="toto"){
$result="1";
}
if ($C=="tutu"){
$result="2";
}
if ($C=="titi"){
$result="3";
}
if ($C=="tete"){
$result="4";
}
if ($C=="tata"){
$result="5";
}
if ($C=="tsts"){
$result="6";
}
if ($C=="tyty"){
$result="7";
}
if ($C=="tmtm"){
$result="8";

//****************************
if ($C=="toto"){
if ($ro1==''){
$updateSQL = "UPDATE ep_stats SET f='1' WHERE F='$F'";
mysql_select_db("xxxxx", $mysql_link);
$Result1 = mysql_query($updateSQL, $mysql_link) or die(mysql_error());}

if ($C !==''){
$a = $ro1 + "1";
$updateSQL = "UPDATE ep_stats SET f='$a' WHERE F='$F'";
mysql_select_db("xxxxxx", $mysql_link);
$Result1 = mysql_query($updateSQL, $mysql_link) or die(mysql_error());}
}


if ($C=="tutu"){
if ($ro2==''){
// COMPTEUR VISITE
$updateSQL = "UPDATE ep_stats SET fb='1' WHERE F='$F'";
mysql_select_db("xxxxxx", $mysql_link);
$Result1 = mysql_query($updateSQL, $mysql_link) or die(mysql_error());}

if ($C !==''){
$a = $ro2 + "1";
$updateSQL = "UPDATE ep_stats SET fb='$a' WHERE F='$F'";
mysql_select_db("xxxxxx", $mysql_link);
$Result1 = mysql_query($updateSQL, $mysql_link) or die(mysql_error());}
}
}

Bref le but est de simplifier
Etc....

2 réponses

cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
25 janv. 2010 à 14:49
Bonjour,

Tout d'abord, pas besoin de répéter ces lignes ; une seule connexion suffit pour la page :
  $mysql_link = mysql_connect('xxxxx', 'xxxx', 'xxxxxx');
  mysql_select_db('xxxxxx', $mysql_link);

Dans ces lignes, tu peux constater que j'ai remplacé les guillemets par des apostrophes : toute chaîne de caractères encadrée par des guillemets fait travailler le moteur php, car il considère qu'il y a éventuellement une expression à évaluer. Il est donc obligé d'analyser la totalité de celle-ci. Il vaut mieux faire une concaténation. Exemple :
  $sql = 'SELECT ro1, ro2, ro3 
          FROM ep_ro 
          WHERE F = \'' . $Z . '\'';

Les valeurs numériques n'ont pas à être encadrées, que ce soit dans le code php ou dans les requêtes sql.

Les tests sur $C pourraient être remplacés par un tableau :
  $tableau array('toto'> 1,
                   'tutu' => 2,
                   'titi' => 3,
                   'tete' => 4,
                   'tata' => 5,
                   'tsts' => 6,
                   'tyty' => 7,
                   'tmtm' => 8
                  );
  $result = $tableau[$C];


Ensuite, je doute fort que le code fonctionne nickel :
  if ($C == 'tmtm')
  {
    $result = 8;

    //****************************
    if ($C == 'toto')
    {

Nous avons ici des tests imbriqués. Comment $C peut-il prendre plusieurs valeurs ? Ou bien il s'agit d'une erreur de recopie dans le forum.
Quelques liges plus bas, il y a ce nouveau test :
      if ($C !== '')

Celui-ci est inutile car si $C == 'toto', $C est obligatoirement différent à ''.

Bref, tout ceci donnerait un code dans ce genre, si l'on exclut le problème d'accolades :
<?php
  $mysql_link = mysql_connect('xxxxx', 'xxxx', 'xxxxxx');
  mysql_select_db('xxxxxx', $mysql_link);
  
  $sql = 'SELECT ro1, ro2, ro3 
          FROM ep_ro 
          WHERE F = \'' . $Z . '\'';
  $resul = mysql_query($sql);
  $rs = mysql_fetch_array($resul);
  $ro1 = $rs['ro1'];
  $ro2 = $rs['ro2'];
  $ro3 = $rs['ro3'];

  $sql = 'SELECT case1, case2, case3 
          FROM ep_list 
          WHERE F = \'' . $F . '\'';
  $resul = mysql_query($sql);
  $rs = mysql_fetch_array($resul);
  $A = $rs['case1'];
  $B = $rs['case2'];
  $C = $rs['case3'];

  $tableau array('toto'> 1,
                   'tutu' => 2,
                   'titi' => 3,
                   'tete' => 4,
                   'tata' => 5,
                   'tsts' => 6,
                   'tyty' => 7,
                   'tmtm' => 8
                  );
  $result = $tableau[$C];
   
  //****************************
  if ($result == 1)
  {
    if ($ro1 == '')
    {
       $ro1 = 0;
    }

    $ro1 += 1;
    $updateSQL = 'UPDATE ep_stats 
                  SET f = ' . $ro1 . ' 
                  WHERE F = \'' . $F . '\'';
    $Result1 = mysql_query($updateSQL, $mysql_link) 
      or die(mysql_error());      
  }

  if ($result == 2)
  {
    if ($ro2 == '')
    {
      // COMPTEUR VISITE
      $ro2 = 0;
    }

      $ro2 += 1;
      $updateSQL = 'UPDATE ep_stats 
                    SET fb = ' . $ro2 . ' 
                    WHERE F = \'' . $F . '\'';
      $Result1 = mysql_query($updateSQL, $mysql_link) or die(mysql_error());      
    }
  }
?>


Cordialement.

JC
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 19
26 janv. 2010 à 09:09
Allez.. on va pousser le vice.. LOL !!
Pour tes requetes, passe par un sprintf. En effet, ça te permet d'avoir un contrôle du type de tes données et de mettre en tes entrées pas conformes. Et puis le 'espace-string', qui te permet de passer des chaines de caractères correctement.
S.
0