[RESOLU] traitement variable avec soit des chiffres soit des lettres

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] traitement variable avec soit des chiffres soit des lettres

Re: traitement variable avec soit des chiffres soit des lett

par Invité » 01 oct. 2014, 14:57

ça y est j'ai trouvé !!!!

Merci les gars de votre aide..

en fait j'ai dans le fichier qui traite l'import du flux:
$result['quantity'] = (float)(string)$block->quantity; donc mes O et N disparraissaient !!

et moi je travaillé sur le fichier qui exporte dans la table.... pfff... je suis novice en même temps, j'apprends sur le tas !!

Merci, merci !

Re: traitement variable avec soit des chiffres soit des lett

par sirakawa » 01 oct. 2014, 14:30

Je persiste à dire que cette solution fonctionne:
<?PHP
$block = "n";
if(strtoupper($block) == 'N')  //bq  converti en majuscules vaut N     
{
         $block = 0;
}
else 
{
     if (strtoupper($block) == 'O')// bq converti en majuscules ne vaut pas N et vaut O
     {
             $block = 101;
     }
     else //bq converti en majuscules ne vaut ni O ni N  
     {       
     if(is_numeric ($block))//bq est un nombre
             {
                     if ($block < 3)
         			{   
                             $block = 0;
          			} 
                     elseif ($block < 100)
         			{
                                     $block = $block;
        			} 
                     else 
                     {
                             $block = 100;
                     }
             }
	}
}
print "$block ";
?>

Re: traitement variable avec soit des chiffres soit des lett

par Invité » 01 oct. 2014, 14:11

@ Ryle

J'ai fait un test, et le O me retourne toujours un 0

@ sirakawa

que veux tu dire par "Il faut tester o/n et O/N" ? rajouter de ifs avec 0 et n ?

Re: traitement variable avec soit des chiffres soit des lett

par sirakawa » 01 oct. 2014, 12:18

Il faut tester o/n et O/N
Je iens de vérifier et ça fonctionne.

en cas d'erreur, il faudrait ajouter AVANT tous les ifs:
var_dump($clock->quantity); die();

Re: traitement variable avec soit des chiffres soit des lett

par Ryle » 01 oct. 2014, 10:57

Suggestion :
if (is_numeric($block->quantity)) { // si numérique on test <3 et >100, dans les autres cas le nombre ne change pas

	if ($block->quantity < 3)
		$block->quantity = 0;

	if ($block->quantity > 100)
		$block->quantity = 100;

}
else { // si non numérique on test si "O" ou "N"

	if ($block->quantity == 'N') //bq vaut N
	        $block->quantity = 0;
	elseif ($block->quantity == 'O') //bq vaut O
	        $block->quantity = 100;
	else // toute autre valeur, gestion de l'erreur avec une valeur par défaut ?
	        $block->quantity = 0;

}

Re: traitement variable avec soit des chiffres soit des lett

par Invité » 01 oct. 2014, 09:50

Je viens de tester.. hélas pour le O j'ai eu un 0

JE récupère en fait cette valeur dans un flux xml que voici (si ça peut aider) :

Code : Tout sélectionner

<stocks><stock><product use-external-reference="1">633848</product><mode>set</mode><quantity>5</quantity></stock><stock><product use-external-reference="1">868787</product><mode>set</mode><quantity>O</quantity></stock><stock><product use-external-reference="1">675251</product><mode>set</mode><quantity>56</quantity></stock><stock><product use-external-reference="1">633625</product><mode>set</mode><quantity>N</quantity></stock><stock><product use-external-reference="1">868620</product><mode>set</mode><quantity>3</quantity></stock></stocks>
et mon fichier complet php :

Code : Tout sélectionner

<?php require_once(_PS_MODULE_DIR_.'advancedimporter/classes/objectimporterabstract.php'); require_once(_PS_MODULE_DIR_.'advancedimporter/classes/ean13.php'); require_once(_PS_MODULE_DIR_.'advancedimporter/classes/reference.php'); require_once(_PS_MODULE_DIR_.'advancedimporter/classes/externalreference.php'); class StockImporter extends ObjectImporterAbstract { /** * Import products */ public static function execute($block) { if (isset($block->product_external_reference)) { try { $external_reference = ExternalReference::getByExternalReference((string)$block->product_external_reference, 'Product'); $block->product = $external_reference->id_object; } catch (ExternalReferenceException $e) { throw new Exception("External Reference {$block->product_external_reference} for a product is unknow"); } } else if ($block->ean13) { $ean = new AdvancedImporterEan13($block->ean13); $block->product = $ean->id_product; if ($ean->id_product_attribute) $block->combination = $ean->id_product_attribute; } else if ($block->reference) { $reference = new AdvancedImporterReference($block->reference); $block->product = $reference->id_product; if ($reference->id_product_attribute) $block->combination = $reference->id_product_attribute; } if (isset($block->combination_external_reference)) { try { $external_reference = ExternalReference::getByExternalReference((string)$block->combination_external_reference, 'Combination'); $block->combination = $external_reference->id_object; } catch (ExternalReferenceException $e) { throw new Exception("External Reference {$block->combination_external_reference} for a combination is unknow"); } } // $block->quantity = N; if($block->quantity == 'N') //bq vaut N { $block->quantity = 0; } else { if ($block->quantity == 'O')// bq ne vaut pas N et vaut O { $block->quantity = 100; } else //bq ne vaut ni O ni N { if(is_numeric ($block->quantity))//baq est un nombre { if ($block->quantity < 3) { $block->quantity = 0; } elseif ($block->quantity < 100) { $block->quantity = $block->quantity; } else { $block->quantity = 100; } } } } //echo $block->quantity; if ($block->mode == 'set') StockAvailable::setQuantity((int)(string)$block->product, (int)(string)$block->combination, (int)(string)$block->quantity, self::getShopList($block)); else StockAvailable::updateQuantity((int)(string)$block->product, (int)(string)$block->combination, (int)(string)$block->quantity, self::getShopList($block)); Log::sys(self::$id_advancedimporter_block, "Quantity of product {$block->product}({$block->combination}) updated"); } }

Re: traitement variable avec soit des chiffres soit des lett

par sirakawa » 01 oct. 2014, 09:03

essaie ça:
if($block->quantity == 'N') //bq vaut N     
{
	$block->quantity = 0;
}
else 
{
	if ($block->quantity == 'O')// bq ne vaut pas N et vaut O
	{
		$block->quantity = 100;
	}
	else //bq ne vaut ni O ni N  
	{       
    	if(is_numeric ($block->quantity))//baq est un nombre
   		{
			if ($block->quantity < 3)
            {	
				$block->quantity = 0;
             } 
			elseif ($block->quantity < 100)
            {
					$block->quantity = $block->quantity;
            } 
			else 
			{
				$block->quantity = 100;
			}
		}
   }
}

traitement variable avec soit des chiffres soit des lettres

par phonidal » 01 oct. 2014, 08:15

Bonjour,

Voilà quelques jours que je galère sur ce problème...

voici le code que j'ai fait :

Code : Tout sélectionner

if($block->quantity == 'N') {$block->quantity = 0;} else { if(is_numeric ($block->quantity)) {if ($block->quantity < 3) {$block->quantity = 0; } elseif ($block->quantity < 100) {$block->quantity = $block->quantity; } else {$block->quantity = 100;} } else {$block->quantity = 100;} }
$block->quantity peut avoir comme valeur soit des nombres entre 0 et 1000 soit N soit O (la lettre)

pour les nombres, cela semble fonctionner, par contre pour le N ou le O ça merdouille...
pour le N il faut que $block->quantity prenne la valeur 0
pour le O il faut que $block->quantity prenne la valeur 100

Si quelqu'un peut me dépatouiller de cette histoire....

MErci !!