Résolu Script PHP de calcul d'écart-type et de variance

RhaegarNorka

Habitué
Bonjour à tous, :bounce:

J'ai un petit soucis avec un script PHP.

Laissez moi vous expliquer la situation :

Afin de calculer l'écart-type et la variance de "Files Systems", situés sur des serveurs, et insérer les données calculées dans une table d'une base de données dédiée à cet effet, je dois utiliser un script qui a été créé il y a 6-7 ans. J'y ai modifié les noms des fonctions (ex : mysql devient mysqli). Le souci est que le code, qui fonctionnait autrefois, paraît-il, ne fait que de me retourner des erreurs.:kaola:

Voici le code :
PHP:
<?php

///////////////////////////////////////////////////
// Script 2 = Calcul de Variance et d'Ecart-Type //
//////////////////////////////////////////////////

ERROR_REPORTING(E_ALL);

$host = "<nom du Host>";
$user = "<nom du User>";
$pwd = "<mot de passe du User>";
$bdd = "<nom de la base de données à utiliser>";

$connexion = mysqli_connect($host, $user, $pwd, $bdd) or die ("Connexion impossible a la base de donnees des Files Systems.");

if ($connexion == false)
{
	echo "<h4>Erreur : ".mysqli_error($connexion). "</h4>";
}
else
{
	echo "\n Connexion a la base de donnees : OK \n";
	
	$query_result = 'select id, date, hostname, fs_name, Total_Space, Used_Space, (80*Total_Space/100) as `Pourcentage Max (>=80%)` from MCO_fs where Used_Space >= (80*mco_fs.Total_Space/100) group by FS_name,date order by FS_name asc, date, hostname';

	$result = mysqli_query($connexion, $query_result);

	while ($donnee_result_FS = mysqli_fetch_array($query_result))
	{
		
		$ecart = 0;
		$sum_carre = 0;
		$ecart_carre = 0;
		
		// calcul du nombre d'enregistrements
		$sql_nb=" select * from  MCO_fs where hostname = '"  . $donnee_result_FS['hostname'] .  " ' and FS_name = '" . $donnee_result_FS['FS_name'] ."' ";

		$result_nb=mysqli_query($sql_nb);
		var_dump($result_nb);
		
		$donnee_result_nb=mysqli_num_rows($result_nb);

		// Somme des valeurs
		$sql_sum_FS="select sum(Used_Space) from MCO_fs where hostname = '"  . $donnee_result_FS['hostname'] .  " ' and FS_name = '" . $donnee_result_FS['FS_name'] ."' ";

		$result_sum_FS=mysqli_query($sql_sum_FS);
	
		$donnee_sum_FS=mysqli_fetch_array($result_sum_FS);
  
		// calcul de la moyenne
		$moyenne =$donnee_sum_FS['0']/$donnee_result_nb;
	
		//initialisation des variables
		while ($donnee_result_occup=mysqli_fetch_array($result_nb))
		{
			// calcul de l'ecart par rapport à la moyenne
			$ecart = $donnee_result_occup['Used_Space']-$moyenne;
 
			// on met l'ecart au carre
			$ecart_carre= $ecart*$ecart;

			// somme des carres
			$sum_carre=$sum_carre+$ecart_carre;
				
		}

		// calcul de la variance
		$variance=$sum_carre/$donnee_result_nb;
			
		$ecart_type_brut=sqrt($variance);
	
		$ecart_type=round($ecart_type_brut,2);

		echo $ecart_type;

		mysqli_query("insert into MCO_derive values('','" . $donnee_result_FS['date'] . "','" . $donnee_result_FS['hostname'] . "','" . $donnee_result_FS['FS_name'] . "','" . $donnee_result_FS['Used_Space'] . "','$ecart_type')");	
	}	
}
?>

Et voici l'erreur que je reçois dès que je lance le script :
"C:\Users\Toto>php C:\wamp\www\test\test-mysql3.php

Connexion a la base de donnees : OK

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, string given in C:\wamp\www\test\test-mysql3.php on line 28

Call Stack:
0.0000 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0
2.0492 286776 2. mysqli_fetch_array() C:\wamp\www\test\test-mysql3.php:28"

J'ai beau avoir regardé sur internet, je n'arrive pas à régler ces erreurs. Quoique je fasse il y a toujours des erreurs...

Si quelqu'un a la possibilité de m'aider sur ce script afin qu'il calcule l'écart-type et la variance des Files Systems se serait vraiment sympathique :)

Merci d'avance ! :wahoo:

Amicalement,

RhaegarNorka
 

BlackPage

Grand Maître
Salut,
C'est bien d'utiliser des scripts php en copier/coller mais apprendre le php c'est pas mal non plus...
Pour t'aider même si c'est un peu abusé de demander de l'aide sur ce coup là :

while ($donnee_result_FS = mysqli_fetch_array($query_result)) -> mysqli_fetch_array attend une ressource sql en paramètres et ton $query_result est une chaine de caractères :

$query_result = 'select id, date, hostname, fs_name, Total_Space, Used_Space, (80*Total_Space/100) as `Pourcentage Max (>=80%)` from MCO_fs where Used_Space >= (80*mco_fs.Total_Space/100) group by FS_name,date order by FS_name asc, date, hostname';

La ressource est ici :

$result = mysqli_query($connexion, $query_result);

donc la bonne ligne à corriger doit indiquer cela :

while ($donnee_result_FS = mysqli_fetch_array($result))

Ca devrait résoudre le souci.

La programmation, c'est un métier !

Bon courage quand même
 

RhaegarNorka

Habitué
Bonjour et merci BlackPage,

Je suis d'accord avec toi, apprendre la programmation c'est mieux que de réclamer des réponses. Le souci étant que j'ai un timing serré pour faire ce projet et j'ai essayé de m'en sortir seul dans mon coin mais ça passe pas.

J'ai corrigé ce que tu m'as conseillé, il y a plein de messages d'erreurs qui apparaissent tels que :

Notice: Undefined index: FS_name in C:\wamp\www\test\test-mysql3.php on line 36

Call Stack:
0.0010 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0


Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\wamp\www\test\test-mysql3.php on line 38

Call Stack:
0.0010 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0
1.8882 330312 2. mysqli_query() C:\wamp\www\test\test-mysql3.php:38

NULL

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\wamp\www\test\test-mysql3.php on line 41

Call Stack:
0.0010 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0
1.8902 330336 2. mysqli_num_rows() C:\wamp\www\test\test-mysql3.php:41



Notice: Undefined index: FS_name in C:\wamp\www\test\test-mysql3.php on line 44

Call Stack:
0.0010 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0


Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\wamp\www\test\test-mysql3.php on line 46

Call Stack:
0.0010 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0
1.8922 330312 2. mysqli_query() C:\wamp\www\test\test-mysql3.php:46


Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in C:\wamp\www\test\test-mysql3.php on line 48

Call Stack:
0.0010 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0
1.8942 330336 2. mysqli_fetch_array() C:\wamp\www\test\test-mysql3.php:48


Warning: Division by zero in C:\wamp\www\test\test-mysql3.php on line 51

Call Stack:
0.0010 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0


Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in C:\wamp\www\test\test-mysql3.php on line 54

Call Stack:
0.0010 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0
1.8962 330304 2. mysqli_fetch_array() C:\wamp\www\test\test-mysql3.php:54


Warning: Division by zero in C:\wamp\www\test\test-mysql3.php on line 68

Call Stack:
0.0010 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0


Notice: Undefined index: FS_name in C:\wamp\www\test\test-mysql3.php on line 76

Call Stack:
0.0010 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0


Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\wamp\www\test\test-mysql3.php on line 76

Call Stack:
0.0010 242696 1. {main}() C:\wamp\www\test\test-mysql3.php:0
1.9002 330448 2. mysqli_query() C:\wamp\www\test\test-mysql3.php:76

Mais je vais me débrouiller.

Merci.
 

zeb

Modérateur
Salut,

Eh, il n'y a pas de "Je vais me débrouiller" !
C'est quoi ce chantage affectif ?

T'as 50000 erreurs ? Ce n'est pas 50000 problèmes.
Commence par corriger la première erreur.

>> Notice: Undefined index: FS_name in C:\wamp\www\test\test-mysql3.php on line 36
Qu'y-a-t-il à la ligne 36 de ton code ? T'aurais pas oublié un truc dans FS_name ?

>> mysqli_query() expects at least 2 parameters, 1 given in C:\wamp\www\test\test-mysql3.php on line 38
Et à la ligne 38, on te demande 2 paramètres, tu n'en mets qu'un. Lis les pages d'aide de mysql_query() et de mysqli_query().
Oh, il fallait 2 paramètres dans l'ancienne mais l'un n'était pas obligatoire. Maintenant il l'est et en plus, les paramètres sont inversés.
 

BlackPage

Grand Maître
Meilleure réponse
Re,

$donnee_result_FS['FS_name'] -> $donnee_result_FS['fs_name'] -> sensible à la casse
$result_sum_FS=mysqli_query($sql_sum_FS); -> $result_sum_FS=mysqli_query($connexion, $sql_sum_FS);

Avec ca tu peux avancer et débrouiller au moins 75% de tes soucis

Il faut chercher un peu avant d'appeler au secours, sinon je vais exiger une part du ca :p
 

RhaegarNorka

Habitué
Re-bonjour,

Merci de vos réponses à tous les deux.

Je pigeai pas bien mes erreurs mais là ça commence à être bon.

Donc alors :
- pour la "notice" par rapport à FS_name, ligne 36 ---> je ne vois pas vraiment où est l'erreur. D'aprês le post de BlackPage ce doit être la casse. Je vais modifier et on verra bien.

- pour ce qui est de "mysqli_query() expects at least 2 parameters, 1 given in C:\wamp\www\test\test-mysql3.php on line 38" ---> j'ai mis le paramêtre de connexion en premier suivi de $sql_nb, ça à l'air de fonctionner.

- $donnee_result_FS['FS_name'] -> $donnee_result_FS['fs_name'] ---> sensible à la casse ? j'ai modifié le code pour que ce soit régler.

- $result_sum_FS=mysqli_query($sql_sum_FS); -> $result_sum_FS=mysqli_query($connexion, $sql_sum_FS); ---> ok c'est modifié, je pensais pas qu'il fallait le paramêtre de connexion à chaque fois en fait.

Merci à vous deux pour le temps que vous m'avez consacré.

Je sens que ça va le faire pour la suite, je vous tiens au courant :)

Amicalement,

RhaegarNorka.
 

zeb

Modérateur
@BlackPage : Ne cède pas au chantage, Il est des cas où un bon RTFM est plus utile que la solution (*).

_____________________
(*) Ce n'est pas une injonction de la part d'un modérateur, c'est une proposition de la part d'un habitué du forum ;)
 

RhaegarNorka

Habitué
Bonjour à tous,

Pour vous dire que j'ai réussi a faire tourner le code sans erreur. C'est beau quand ça fonctionne :D

L'erreur des index non trouvés était dans un fichier sql à part. Je l'ai trouvée, isolée et modifiée afin que le code tourne.

Merci encore à BlackPage et à Zeb pour leurs réponses !

ps: Résolu ^^
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 839
Membres
1 586 370
Dernier membre
Flo In Groove
Partager cette page
Haut