Formatage conditionnel et comparaison de valeurs

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 : Formatage conditionnel et comparaison de valeurs

Re: Formatage conditionnel et comparaison de valeurs

par rabiet » 24 févr. 2010, 02:14

Image@Ryle : Merci bcp pour ta réponse. Effectivement, le petit "bidouilleur" du PHP que je suis avait encore oublié ce vieux "global" :)
Je suis en déplacement, et je n'aurai pas la possibilité de travailler sur cette application avant la fin de la semaine. Je vous tiens au courant dès mon retour.

Re: Formatage conditionnel et comparaison de valeurs

par Ryle » 22 févr. 2010, 23:09

Ton problème vient du fait que tu es dans une fonction :)

Pour voir ce qui ne va pas, il faut procéder par étape. Ton problème est que la valeur de $color est toujours "red". Il faut donc regarder dans quel cas ta variable $color contient la valeur "red", ce qui est le cas lorsque ton test if ($dbsize > $alertlevel * 1024 * 1024) est vrai.

Cela veut donc dire que $dbsize est toujours supérieur à $alertlevel * 1024 * 1024. Hors si tu regardes la valeur de $alertlevel juste avant ton test tu verras que celle-ci est de 0.

Cela s'explique par le fait que tu es dans une fonction, et que ta fonction ne connait pas la variable $alertlevel (qui est déclarée en dehors de celle-ci). Elle considère donc qu'il s'agit d'une nouvelle variable qui n'a pas été initialisée, et lui donne par défaut la valeur 0.

Pour indiquer à ta fonction qu'elle doit utiliser la valeur de la variable externe, tu dois soit la passer en paramètre à ta fonction, soit la déclarer comme globale :
function db_size($maVariable){ ... } // déclaration de la fonction avec un paramètre
...
db_size($alertlevel); // appel de la fonction en lui passant une valeur en paramètre
function db_size(){ 
  global $alertlevel; // fait référence à ta variable externe
  ...
}

Re: Formatage conditionnel et comparaison de valeurs

par rabiet » 21 févr. 2010, 19:03

C'est bien ce que je suis en train de faire depuis 2 heures :cry:

et je m'arrache les cheveux ! :)

dans l'exemple suivant, j'obtiens bien le résulat escompté :
<?php
$alertlevel += 4;
echo "$alertlevel<br />";
$test += $alertlevel * 1024 * 1024;
echo "$test<br />";
$toto2 = $alertlevel + $test;
echo"La somme est : ".$toto2." €"; 
?>
à savoir :
4
4194304
La somme est : 4194308 €
alors que dans mon script, $test += $alertlevel * 1024 * 1024; me renvoit 0 :?: :?: :?:

et je ne vois pas du tout pourquoi, vu que ça m'a l'air d'exactement la même formule ???
<?php
// Alert level. Database size is shown in red if grater than this value.
// You can fit this value (in MB) to your conveniance.
$alertlevel += 4;

// Size Categories
function file_size_info($filesize) {$bytes = array('KB', 'KB', 'MB', 'GB', 'TB');

# values are always displayed

if ($filesize < 1024) $filesize = 1;

# in at least kilobytes.

for ($i = 0; $filesize > 1024; $i++) $filesize /= 1024;

$file_size_info['size'] = round($filesize,3);

$file_size_info['type'] = $bytes[$i];

return $file_size_info; } 

// Calculate DB size by adding table size + index size:
// This just echoes the db size, we'll position it later

function db_size(){

	$rows = mysql_query("SHOW table STATUS"); $dbsize = 0;

	while ($row = mysql_fetch_array($rows)) 
		{$dbsize += $row['Data_length'] + $row['Index_length']; } 
	
	if ($dbsize > $alertlevel * 1024 * 1024) {
	         $color = "red";}
	else {
	         $color = "green";}
	
		$test += $alertlevel * 1024 * 1024;
	
		$dbsize = file_size_info($dbsize); 
		echo "<p id='dbsize'>DataBase size is: {$dbsize ['size']} {$dbsize['type']}. $color .$test .$alertlevel </p>"; 
}

// Set that function up to execute when the admin_footer action is called
add_action('admin_footer', 'db_size');

//  CSS to position the paragraph

function db_size_css() {
		echo "
		<style type='text/css'>
		#dbsize {
		position: absolute;
		top: 4.5em;
		margin: 0;
		padding: 0;
		left: 225px;
		font-size: 11px;
		color: $color;
		}
		</style>
		";
}

add_action('admin_head', 'db_size_css');

?>

Re: Formatage conditionnel et comparaison de valeurs

par @rthur » 21 févr. 2010, 18:18

Là par contre c'est à toi de debuguer ton code.
Vérifie les variables que tu passes en condition par exemple en faisant un print juste avant...

Re: Formatage conditionnel et comparaison de valeurs

par rabiet » 21 févr. 2010, 17:05

YES ! ça marche. merci beaucoup pour la réponse express.

Je passe le test, par contre mon formatage conditionnel n'est pas pris en compte.

La valeur de $color est toujours 'red', quel que soit $alertlevel .

Verrais-tu pourquoi ?

Re: Formatage conditionnel et comparaison de valeurs

par @rthur » 21 févr. 2010, 16:48

Bonjour,

La condition juste après ton if doit être mise entre parenthèse :)

Formatage conditionnel et comparaison de valeurs

par rabiet » 21 févr. 2010, 16:43

Bonjour,

Débutant en PHP, j'ai écrit un petit bout de code qui a pour objectif de d'afficher la taille de ma BDD MySQL, en vert si inférieure ou égale à une valeur déterminée, en rouge si supérieure à cette valeur.

J'ai un pb de déclaration de variables que je n'arrive pas résoudre car mon code me retourne :

Parse error: syntax error, unexpected T_VARIABLE, expecting '(' in /homez.109/lesdemocs/www/blog/wp-content/plugins/db_size.php on line 47 (ligne du test if $dbsize > $alertlevel * 1024 * 1024 )

Voir code ci-dessous.

Si qqn pouvait m'aider à résoudre ce petit pb, ça me rendrait bien service. D'avance merci.
Chr.
<?php
// Alert level. Database size is shown in red if grater than this value.
// You can fit this value (in MB) to your conveniance.
$alertlevel *= 4;

// Size Categories
function file_size_info($filesize) {$bytes = array('KB', 'KB', 'MB', 'GB', 'TB');

# values are always displayed

if ($filesize < 1024) $filesize = 1;

# in at least kilobytes.

for ($i = 0; $filesize > 1024; $i++) $filesize /= 1024;

$file_size_info['size'] = round($filesize,3);

$file_size_info['type'] = $bytes[$i];

return $file_size_info; } 

// Calculate DB size by adding table size + index size:
// This just echoes the db size, we'll position it later

function db_size(){

	$rows = mysql_query("SHOW table STATUS"); $dbsize = 0;

	while ($row = mysql_fetch_array($rows)) 
		{$dbsize += $row['Data_length'] + $row['Index_length']; } 
	
	if ($dbsize > $alertlevel  * 1024 * 1024) {
	$color = "red";}
	else {
	$color = "green";}
	endif;
	
		$dbsize = file_size_info($dbsize); 
		echo "<p id='dbsize'>DataBase size is: {$dbsize ['size']} {$dbsize['type']}</p>"; 
}

// Set that function up to execute when the admin_footer action is called
add_action('admin_footer', 'db_size');

//  CSS to position the paragraph

function db_size_css() {
		echo "
		<style type='text/css'>
		#dbsize {
		position: absolute;
		top: 4.5em;
		margin: 0;
		padding: 0;
		left: 225px;
		font-size: 11px;
		color: $color;
		}
		</style>
		";
}

add_action('admin_head', 'db_size_css');

?>