Addslashe avec une requette sql server ?

Résolu
Bonjour SVP pouvez vous me dire comment je doit faire pour que addslashe marche avec une requette sql server?en effet, mes variables dans le INSERT contiennent des ' j' utilise la fonction addslashe sans succès.
Configuration: Windows XP
Internet Explorer 6.0

6 réponses

  1. Bsr

    Hum en faisant un tour sur https://www.php.net/addslashes on tombe sur le message suivant :

    luciano at vittoretti dot com dot br
    31-Oct-2005 12:18
    Note, this function wont work with mssql or access queries.
    Use the function above (work with arrays too).

    function addslashes_mssql($str){
        if (is_array($str)) {
            foreach($str AS $id => $value) {
                $str[$id] = addslashes_mssql($value);
            }
        } else {
            $str = str_replace("'", "''", $str);    
        }
        
        return $str;
    }
    
    function stripslashes_mssql($str){
        if (is_array($str)) {
            foreach($str AS $id => $value) {
                $str[$id] = stripslashes_mssql($value);
            }
        } else {
            $str = str_replace("''", "'", $str);    
        }
    
        return $str;
    } 


    Hé oui mssql ne supporte pas les séquences d'escape ! Rien d'étonnant d'ailleurs de la part d'un produit Made In Micro$oft !

    A la place il faut remplacer chaque quote single ' par 2 quotes  '' (attention pas de guillemets !)


    Donc utilise la fonction stripslashes_mssql ci-dessus et ça devrait fonctionner.

    Voilà
    1. Bjr
      C'est vrai qu'il manque un paranthèse fermante dans mon code je l'ai mise. Mais mon probléme n'est toujours pas resolu.

      Voila mon code

      $poste = $_POST['codeposte'];
      $libelle = $_POST['libposte'];
      $result=mssql_query("select * from poste where code_poste='".$poste."'",$sqlconnexion);
      $exist=mssql_num_rows($result);
      if ($exist==1){?>
      <script language="JavaScript" type="text/javascript">
      alert("ce poste a déjà été enregistré");
      </script>
      <? }
      else
      mssql_query("insert into POSTE values('".addslashes($poste)."','".addslashes($libelle)."')",$sqlconnexion); //or die ('erreur : '.mssql_error() );

      et voilà le mesage d'erreur quand je veux inserer la chaine : Chargé d'étude

      Warning: mssql_query(): message: Ligne 1 : syntaxe incorrecte vers 'etude'. (severity 15) in c:\program files\easyphp1-8\www\gestion_objectif\form\admin_poste.php on line 17

      Warning: mssql_query(): message: Ouvrez les guillemets avant la chaîne de caractères ')'. (severity 15) in c:\program files\easyphp1-8\www\gestion_objectif\form\admin_poste.php on line 17

      Warning: mssql_query(): Query failed in c:\program files\easyphp1-8\www\gestion_objectif\form\admin_poste.php on line 17

      SVP aidez moi.
      1. Bjr

        Hum il manque une parenthèse fermante dans ta requête avant ",$sql... et laisse un espace entre values et ( :

        mssql_query("insert into POSTE values ('".$poste."','".$libelle."')",$sqlconnexion); 


        De plus c'est quand même mieux de citer les champs que tu insères (attention vérifie que codepost & libposte sont bien les bons noms de champ)

        mssql_query("insert into POSTE (codeposte,libposte) values ('".$poste."','".$libelle."')",$sqlconnexion); 

        1. Salut chers amis.en effet je n'ai pas encore trouvé de solution mon problème. voilà mon code :

          if (($_POST['codeposte'] <> "" ) && ($_POST['libposte'] <> "") )
          {

          $poste = addslashes($_POST['codeposte']);
          $libelle = addslashes($_POST['libposte']);
          $result=mssql_query("select * from poste where code_poste='".$poste."'",$sqlconnexion);
          $exist=mssql_num_rows($result);
          if ($exist==1){?>
          <script language="JavaScript" type="text/javascript">
          alert("ce poste a déjà été enregistré");
          </script>
          <? }
          else
          mssql_query("insert into POSTE values('".$poste."','".$libelle."'",$sqlconnexion); //or die ('erreur : '.mssql_error() );
          mssql_free_result($result);

          }

          voilà le message d'erreur:

          Warning: mssql_query(): message: Ligne 1 : syntaxe incorrecte vers 'étude'. (severity 15) in c:\program files\easyphp1-8\www\gestion_objectif\form\admin_poste.php on line 17

          Warning: mssql_query(): message: Ouvrez les guillemets avant la chaîne de caractères ''. (severity 15) in c:\program files\easyphp1-8\www\gestion_objectif\form\admin_poste.php on line 17

          Warning: mssql_query(): Query failed in c:\program files\easyphp1-8\www\gestion_objectif\form\admin_poste.php on line 17
          1. Bsr

            J'utilise pas SLQ Server mais avec MySQL je fais ceci pour les champs texte :

            <?php
            ...
            $quand="Aujourd'hui";
            
            $query="UPDATE ma_table SET ma_periode='".addslashes($quand)."' WHERE ma_cle=2";
            ...
            ?>


            et ça fonctionne nickel ;-)

            Voilà

            1. Contributeur
              Salut,

              Un peu de code pour agrémenter ça ? Comment tu t'y ai pris ?