2010-11-13 5 views
0

Je veux préfixer un "0" devant un _POST $Cette association de chaînes de php me rend fou!

$currency = $_POST['Currency']; // lets say 900 
$currency = "0".$currency; 
echo $currency; 

Il aurait dû retourner 0900 mais il retourne 900.

Toutes les idées?

EDIT

Ceci est la fonction complète

function validate(){ 

     $ref = $this->input->post('Ref'); 
     $shop = $this->input->post('Shop'); 
     $amount = $this->input->post('Amount')*1000; 
     //$currency = $this->input->post('Currency'); 
      //$currency = $_POST['Currency']; // lets say 900 
      //$currency = "0".$currency; 
     $currency = str_pad($_POST['Currency'],4,'0',STR_PAD_LEFT); 

     $query = $this->db->query("SELECT * FROM shop_validation WHERE merchant_ref = '$ref' "); 
     if($query->num_rows() > 0) { 

      $row = $query->row_array(); 

      $posts = ""; 

      foreach ($_POST as $name => $value) { 
       $posts .= $name."/".$value; 
      } 

      $this->db->query("INSERT INTO transactions (shop,amount,currency,posts) VALUES ('$shop','$amount','$currency','$posts')"); 


      if($row['merchant_ref'] != $ref) 
      { 
       echo "[NOTOK]"; 
       return; 
      } 

      if($row['merchant_id'] != $shop) 
      { 
       echo "[NOTOK]"; 
       return; 
      } 

      if(trim($row['amount']) != $amount) 
      { 
       echo "[NOTOK]"; 
       return; 
      } 

      if($row['currency_code'] != $currency) 
      { 
       echo "[NOTOK]"; 
       return; 
      } 

      echo "[OK]"; 

     } 


    } 

EDIT

Ce script exécuté sur le cadre Codeigniter

+2

Ici, cela fait écho "0900" comme prévu. Avez-vous peut-être oublié de sauvegarder le fichier source avant de le recharger dans le navigateur, ou quelque chose d'aussi stupide? ;) – cdhowie

+0

Impossible de dupliquer. –

+0

Ce code imprime "0900" pour moi. Est-ce que vous testez 'echo $ var' ou utilisez la fonction $ var ailleurs? – hudolejev

Répondre

6

Si ce que vous voulez est de faire en sorte que l'entrée a un certain nombre de chiffres, avec zéros, je l'ai écrit une astuce il y a quelque temps qui fait exactement cela:

<?php 
$variable = sprintf("%04d",$_POST['Currency']); 
?> 

Cela fera écho des zéros à gauche jusqu'à ce que le $variable comporte 4 caractères. Voici quelques exemples:

Si $_POST['Currency'] a une valeur de '3' il echo '0003'

Si $_POST['Currency'] a une valeur de '103' il echo '0103'

Si $_POST['Currency'] a une valeur de « 3103 » il echo « 3103 »

ce qui est bon, même si le nombre de caractères est l onger que 4 (dans votre cas) car il ignorerait simplement la fonction et ne rajouterait rien devant lui. J'espère que cela a aidé :)

+0

Tirez, vous me battre d'une demi-minute. ;) – Pascal

+1

:) Désolé, il m'arrive généralement –

+0

OK cela fonctionne très bien, mais je ne comprends pas pourquoi cela ne fonctionne pas simplement en concaténant les chaînes .. – chchrist

1

Vous pouvez utiliser str_pad() fonction de PHP comme

$currency = str_pad($_POST['currency'],4,'0',STR_PAD_LEFT) 

Voir php manual pour plus de détails

+0

cela fonctionnerait probablement aussi –

+0

Si vous allez utiliser 'str_pad', rappelez-vous que le second argument doit être dynamique, car vous ne pouvez pas garantir que l'utilisateur y introduira une chaîne de 3 caractères. Donc je dirais de remplacer '4' par' strlen ($ _ POST ['currency']) '. (Je sais que tu le savais) –

+0

Merci @thisMayhem tu as raison. J'ai juste supposé, que le point entier de remplissage d'une chaîne est d'avoir une chaîne de largeur fixe pas un zéro supplémentaire supplémentaire. – mfloryan

0

Votre problème est auto-coulée, où une variable peut être une chaîne ou une valeur numérique et php qui devine un vous ne pouvez pas. Votre variable de devise est utilisée comme une chaîne lorsque vous faites une contaténation de chaîne avec l'opérateur point, mais lorsque vous l'annulez, elle suppose qu'elle est un entier et vous renvoie la valeur entière. Vous pouvez echo (string)$currency ou utiliser la fonction str_pad() ou printf() pour obtenir des valeurs de sortie plus utiles.

EDIT: Le code dans la question fonctionne réellement comme prévu pour moi. Vous devez simplifier l'exemple et votre fonction de sortie réelle est autre chose que ce que vous présentez ici, car dans ce code, la fonction de typage automatique fonctionne correctement.

+0

OK Je vais poster plus de code – chchrist

+0

Je vois dans le code complet que vous venez de poster que vous ne faites pas écho à la variable du tout, vous le mettez dans une base de données. Si le problème concerne les données de la base de données, c'est parce que le type de colonne est défini sur float ou integereter ou sur autre chose qui enregistre des valeurs numériques, pour lesquelles 0900 est un non-sens et économise 900. C'est la bonne façon de faire. Vous devez enregistrer la valeur numérique, et seulement remplir la chaîne avec le formatage dans vos fonctions OUTPUT juste avant qu'il soit imprimé à l'utilisateur. – Caleb

+0

le problème est ici if ($ row ['currency_code']! = $ Devise). De la base de données je reçois 0900 qui ne peut pas être changé et je dois vérifier si c'est la même chose avec $ _POST [] – chchrist