IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Messages d'erreur Fonctions


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 92
    Points : 22
    Points
    22
    Par défaut Messages d'erreur Fonctions
    Bonjour,
    J'ai reçu l'aide d'un passioné du forum pour construire cette fonction.
    J'en explique rapidement l'utilité, elle permet de récuperer certaines variables dans un texte collé.
    Le problème c'est que j'ai quelques messages d'erreurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <html>
    	<head><title>Simulateur de Combats Spatiaux</title></head>
    	<body>
    	<FONT FACE="tahoma">
    	<CENTER>
    		<form name="formulaire" method="post" action="Complexe.php"
    		<CENTER><FONT COLOR="RED" SIZE=+2><B><U>Défenseur</COLOR="RED"></FONT COLOR="RED" SIZE=+2></B></U><br/><br/></CENTER>
    		<FONT SIZE=+1><B><U>Collez ici votre Rapport d'Espionnage</FONT SIZE=+1></B></U><br/><br/>		
    		<textarea name="formulaire" id="CadreFormulaire" rows="10" cols="40">
    		</textarea><br/><br/>
    		<input type="submit" name="valider" value="Envoyer"/>
    		</form>
    	</CENTER>
    	<FONT FACE="tahoma">
    	<?php
    	if(isset($_POST['valider'])){ 
     
    function recupVariables( $chaine , $data ){
    	//création du masque de sélection des lignes à traiter	
    	if( is_array( $data ) ) $mask = '`^(' . implode( '|' , $data ) . ')`i';
    	else $mask = '`^(' . $data . ')`i';
    	// on transforme la chaine d'entrée en tableau
    	$tabOriginal = explode( "\n" , $chaine );
    	// sélection des lignes intéressantes du tableau 	
    	$tab = preg_grep( $mask , $tabOriginal );
    	$out = array();	
    	foreach( $tab as $ligne ){
    		list( $var , $val ) = explode( ':' , $ligne );
    		if( !is_array( $data ) ) return trim( $val );
    		$out[  trim( $var ) ] = trim( $val );
    	}
    	return $out;
    }
    $tabRecherches = array( 'Tour de Combat' , 'Canon Laser' , 'Grand Canon Laser' , 'Rayon Tracteur' , 'Lanceur de Missiles' , 'Satellite à Ions' , 'Batterie Electromagnétique' , 'Canon à Plasma' , 'Canon Electromagnétique' ,  'Silos à Missiles HEM' , 'Complexe de Défense Orbital' , 'Missile d\'Interception Intelligent' , 'Technologie Amélioration de la Coque' , 'Technologie Amélioration de l\'Armement' , 'Technologie Bouclier de Protection' );
    $Défenses = recupVariables( $_POST['formulaire'] , $tabRecherches );
     
    echo $Défenses['Tour de Combat'] . '<br /><br />';
     
    function recupVaisseau( $chaine ){
    	//comme dans la fonction recupVariables, on transforme la chaine d'entrée en tableau	
    	$tabOriginal = explode( "\n" , $chaine );
    	//on sélectionne toutes les lignes contenant des parenthèses (à priori VAISSEAU( NOMBRE ) si j'ai bien capté)
    	$listeVaisseaux = preg_grep( '`\(`' , $tabOriginal );
    	$out = array();	
    	foreach( $listeVaisseaux as $key=>$val ){
    		//création d'un nouvel objet de données qui représentera le vaisseau		
    		$vaisseau = new stdClass();
     
    		// regex permettant de d'identifier le nom du vaisseau et le nombre	
    		preg_match( '`^(?P<nom>.+?)\s*\(\s*(?P<nombre>\d+?)\s*\)$`' , $val , $t );
    		$vaisseau->nom = trim( $t['nom'] );
    		$vaisseau->nombre = trim( $t['nombre'] );
    		$vaisseau->caracteristiques = array();		
    		$k = 0;
    		while( $tabOriginal[ $key + (++$k) ] != '' ){
    			if( strpos( $tabOriginal[ $key + $k ] , ':' ) == true ){
    				list( $var , $val ) = explode( ':' , $tabOriginal[ $key + $k ] );
    				$vaisseau->caracteristiques[ trim( $var ) ] = trim( $val );
    			}
    			else $vaisseau->caracteristiques[ trim( $tabOriginal[ $key + $k ] ) ] = 1;
    		}
    		$out[] = $vaisseau;
    	}
    	return $out;
    }
    		$tab = recupVaisseau( $_POST['formulaire'] );
    	foreach( $tab as $vaisseau ){
    		echo 'Nom : ' . $vaisseau->nom . '<br />';
    		echo 'Nombre : ' . $vaisseau->nombre . '<br />';
    		echo 'Attaque : ' . $vaisseau->caracteristiques['Attaque'] . '<br />';
    		echo 'Bouclier : ' . $vaisseau->caracteristiques['Bouclier'] . '<br/>';
    		echo 'Coque : ' . $vaisseau->caracteristiques['Coque'] . '<br/>';
    }
     
    }
    ?>
    Les messages sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Notice: Undefined index: nom in C:\Program Files\wamp\www\test.php\Complexe.php on line 51
     
    Notice: Undefined index: nombre in C:\Program Files\wamp\www\test.php\Complexe.php on line 52
     
    Notice: Undefined offset: 125 in C:\Program Files\wamp\www\test.php\Complexe.php on line 55
    Je remercie Petit Bidon pour le travail qu'il a fourni, mais j'ai préféré poster dans cette section pour bénéficier d'une aide un peu plus rapide car je comprend que petitbidon n'a pas que sa a faire !
    Je vous remercie d'avance

  2. #2
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Salut,

    Il manque un bout du code mais je peux te donner quelques pistes pour localiser les erreurs ( qui ne sont que des informations )

    Elles concernent toutes un tableau dans lequel tu essaie d'accéder à une case inexistante ( soit par nom, soit par index )

    Il faudrait tester l'existance de ces colones au sein du tableau avant de les récupérer pour éviter ces messages d'avertissements. Un simple isset($tableau[nom']); peut faire l'affaire

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 92
    Points : 22
    Points
    22
    Par défaut
    Pour les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Notice: Undefined index: nom in C:\Program Files\wamp\www\test.php\Complexe.php on line 51
     
    Notice: Undefined index: nombre in C:\Program Files\wamp\www\test.php\Complexe.php on line 52
    et ben c'est un peu comme les truc en dessous ($vaisseau->caracteristiques['Attaque'])
    Sauf que eux : $vaisseau->nom font rapport a un truc un peu plus compliqué : (les lignes 51 et 52:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $vaisseau->nom = trim( $t['nom'] );
    		$vaisseau->nombre = trim( $t['nombre'] );
    )
    Que J'ai du mal a saisir. Peut-etre faut-il les rentrer dans un tableau ou alors le regex n'est pas optimum. J'ai besoin de vous pour çà

  4. #4
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    En effet, le problème doit se situer au niveau de l'expression régulière.
    Elle ne doit pas fonctionner et comme tu ne vérifies pas qu'elle matche ou bien que le tableau $t contient des éléments, on a un tableau vide

    Il faudrait mettre en place un test sur le retour de preg_match pour vérifier que cela a bien fonctionné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (preg_match( '`^(?P<nom>.+?)\s*\(\s*(?P<nombre>\d+?)\s*\)$`' , $val , $t ) ){
    //traitement
    }
    else {
    //erreur recontrée
    }

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Le problème vient du fait que le preg_grep se limite à chercher une parenthèse pour séléctionner les index à traiter.

    Il est donc possible qu'il y ait une parenthèse en fin de texte qui fasse planter le truc... Aussi bizarre que ça puisse paraître, la fonction fonctionne parfaitement avec le texte que tu m'avais passé pour tester.

    Peut-être que raffiner la fonction permettra de résoudre le soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $listeVaisseaux = preg_grep( '`^.+?\(\s*\d+\s*\)$`' , $tabOriginal );
    remplacer la ligne dans la fonction recupVaisseau.

    Le test de FCYPBA apportera également une "sécurité" supplémentaire, même si le problème se situe en amont.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 92
    Points : 22
    Points
    22
    Par défaut
    Bonjour ,je vais tester, des que j'aurai un petit moment ^^ mais en modifiant le preg_grep, et en testant avec les deux rapports sur le topic débuter je n'ai plus de messages d'erreurs, sauf que je n'ai plus rien a part le nombre de tour de combat ou autre chose qui s'affiche, plus de caractéristiques de vaisseaux nada.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <html>
    	<head><title>Simulateur de Combats Spatiaux</title></head>
    	<body>
    	<FONT FACE="tahoma">
    	<CENTER>
    		<form name="formulaire" method="post" action="Complexe.php"
    		<CENTER><FONT COLOR="RED" SIZE=+2><B><U>Défenseur</COLOR="RED"></FONT COLOR="RED" SIZE=+2></B></U><br/><br/></CENTER>
    		<FONT SIZE=+1><B><U>Collez ici votre Rapport d'Espionnage</FONT SIZE=+1></B></U><br/><br/>		
    		<textarea name="formulaire" id="CadreFormulaire" rows="10" cols="40">
    		</textarea><br/><br/>
    		<input type="submit" name="valider" value="Envoyer"/>
    		</form>
    	</CENTER>
    	<FONT FACE="tahoma">
    	<?php
    	if(isset($_POST['valider'])){ 
     
    function recupVariables( $chaine , $data ){
    	//création du masque de sélection des lignes à traiter	
    	if( is_array( $data ) ) $mask = '`^(' . implode( '|' , $data ) . ')`i';
    	else $mask = '`^(' . $data . ')`i';
    	// on transforme la chaine d'entrée en tableau
    	$tabOriginal = explode( "\n" , $chaine );
    	// sélection des lignes intéressantes du tableau 	
    	$tab = preg_grep( $mask , $tabOriginal );
    	$out = array();	
    	foreach( $tab as $ligne ){
    		list( $var , $val ) = explode( ':' , $ligne );
    		if( !is_array( $data ) ) return trim( $val );
    		$out[  trim( $var ) ] = trim( $val );
    	}
    	return $out;
    }
    $tabRecherches = array( 'Tour de Combat' , 'Canon Laser' , 'Grand Canon Laser' , 'Rayon Tracteur' , 'Lanceur de Missiles' , 'Satellite à Ions' , 'Batterie Electromagnétique' , 'Canon à Plasma' , 'Canon Electromagnétique' ,  'Silos à Missiles HEM' , 'Complexe de Défense Orbital' , 'Missile d\'Interception Intelligent' , 'Technologie Amélioration de la Coque' , 'Technologie Amélioration de l\'Armement' , 'Technologie Bouclier de Protection' );
    $Défenses = recupVariables( $_POST['formulaire'] , $tabRecherches );
     
    echo $Défenses['Tour de Combat'] . '<br /><br />';
     
    function recupVaisseau( $chaine ){
    	//comme dans la fonction recupVariables, on transforme la chaine d'entrée en tableau	
    	$tabOriginal = explode( "\n" , $chaine );
    	//on sélectionne toutes les lignes contenant des parenthèses (à priori VAISSEAU( NOMBRE ) si j'ai bien capté)
    	$listeVaisseaux = preg_grep( '`^.+?\(\s*\d+\s*\)$`' , $tabOriginal );
    	$out = array();	
    	foreach( $listeVaisseaux as $key=>$val ){
    		//création d'un nouvel objet de données qui représentera le vaisseau		
    		$vaisseau = new stdClass();
     
    		// regex permettant de d'identifier le nom du vaisseau et le nombre	
    		preg_match( '`^(?P<nom>.+?)\s*\(\s*(?P<nombre>\d+?)\s*\)$`' , $val , $t );
    		$vaisseau->nom = trim( $t['nom'] );
    		$vaisseau->nombre = trim( $t['nombre'] );
    		$vaisseau->caracteristiques = array();		
    		$k = 0;
    		while( $tabOriginal[ $key + (++$k) ] != '' ){
    			if( strpos( $tabOriginal[ $key + $k ] , ':' ) == true ){
    				list( $var , $val ) = explode( ':' , $tabOriginal[ $key + $k ] );
    				$vaisseau->caracteristiques[ trim( $var ) ] = trim( $val );
    			}
    			else $vaisseau->caracteristiques[ trim( $tabOriginal[ $key + $k ] ) ] = 1;
    		}
    		$out[] = $vaisseau;
    	}
    	return $out;
    }
    		$tab = recupVaisseau( $_POST['formulaire'] );
    	foreach( $tab as $vaisseau ){
    		echo 'Nom : ' . $vaisseau->nom . '<br />';
    		echo 'Nombre : ' . $vaisseau->nombre . '<br />';
    		echo 'Attaque : ' . $vaisseau->caracteristiques['Attaque'] . '<br />';
    		echo 'Bouclier : ' . $vaisseau->caracteristiques['Bouclier'] . '<br/>';
    		echo 'Coque : ' . $vaisseau->caracteristiques['Coque'] . '<br/>';
    }
     
    }
    ?>

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 92
    Points : 22
    Points
    22
    Par défaut
    Bonjour, j'ai toujours le même problème, j'essayerai demain de tester.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 92
    Points : 22
    Points
    22
    Par défaut
    Bonjour, il y a du nouveau:
    PetitBidon, ta fonction recupVaisseau ne fonctionne pas, je viens de m'en rendre compte je n'avais pas fait attention aux valeurs affichées.
    En réalitée si je te donne :
    - Ressources
    Fer: 19.809.400
    Or: 716.358
    Cristal: 3.281.160
    Hydrogène: 7.538.910

    - Vaisseaux

    EXPLORER H ( 10 )
    Attaque : 3.000
    Bouclier : 1.220
    Coque : 3.250
    Vitesse : 170
    Hyperespace

    Teratos F ( 25 )
    Attaque : 300.000
    Bouclier : 150.100
    Coque : 100.080
    Vitesse : 170
    Furtivité : 1
    Hyperespace

    KRATOS F ( 7 )
    Attaque : 150.000
    Bouclier : 61.000
    Coque : 100.050
    Vitesse : 170
    Furtivité : 1
    Hyperespace

    Kiros ( 5 )
    Attaque : 1.250.000
    Bouclier : 630.000
    Coque : 720.000
    Vitesse : 200
    Furtivité : 1

    HORIZON ( 2 )
    Attaque : 5.000.000
    Bouclier : 1.260.000
    Coque : 1.440.000
    Vitesse : 170
    Furtivité : 1
    Hyperespace

    - Défenses
    Tour de Combat: 10
    Canon Laser: 1.000
    Grand Canon Laser: 10
    Rayon Tracteur: 30
    Lanceur de Missiles: 5
    Satellite à Ions: 30
    Batterie Electromagnétique: 30
    Canon à Plasma: 30
    Silos à Missiles HEM: 856

    - Bombe
    Bombe Electromagnétique: 1.000

    - Militaires
    Soldats: 143.970
    Colonels: 2.254
    Techniciens: 1.811.740
    Experts: 6.823
    Espions: 221
    Kamikazes: 31.858
    Androïde de Combat: 45

    - Bâtiments Ressources
    Centrale Thermique: 2
    Réacteur Thermonucléaire: 2
    Centrale Hydraulique: 10
    Centrale à énergie solaire: 18
    Mine de Fer: 18
    Mine d'Or: 20
    Mine de Cristal: 20
    Extracteur d’Hydrogène: 20
    Centre d'extraction de Fer: 7
    Centre d'extraction de l'Or: 2
    Centre d'extraction du Cristal: 1
    Extracteur d’Hydrogène Amélioré: 5
    Entrepôt de Fer: 11
    Entrepôt d'Or: 10
    Entrepôt de Cristal: 9
    Silo à Hydrogène: 10
    Chantier de Terraformation: 3

    - Bâtiments Militaires
    Caserne Militaire: 6
    Chantier Spatial: 14
    Centre de Défense: 12
    Plate-forme Spatiale: 1
    Complexe Militaire: 10

    - Bâtiments Scientifiques
    Usine Robotique: 12
    Département de Contrôle Psychique: 3
    Laboratoire Scientifique: 7
    Zone 51: 10

    - Laboratoire
    Technologie Salle de Contrôle: 12
    Technologie Maîtrise de l'énergie: 12
    Technologie Infrastructure des vaisseaux: 14
    Technologie Réacteurs à Combustion: 5
    Technologie Espionnage: 11
    Technologie Contre-Espionnage: 9
    Technologie Amélioration de la Coque: 12
    Technologie Camouflages: 5
    Technologie Capteurs Intrastellaires: 10
    Technologie Amélioration de l'Armement: 10

    - Zone 51
    Technologie Maîtrise de l'Hydrogène: 10
    Technologie Maîtrise du Laser: 10
    Technologie Maîtrise des Ions: 8
    Technologie Maîtrise du Plasma: 7
    Technologie Réacteurs SubLuminiques: 5
    Technologie Antimatière: 6
    Technologie Hyperespace: 5
    Technologie Capteurs Interstellaires: 10
    Technologie Bouclier de Protection: 13
    Savoir des Grands Sages: 11
    Génie Génétique: 10
    ou même un autre, mon script me renvoi 5 fois les mêmes caractéristiques qui sont celles du dernier vaisseau. Si il y avait donc un moyen que tu revoye cette fonction ... POur moi car cela ne fonctionne pas et de plus les erreurs sont récurrentes. Pour la fonction recupVariable il me semble que tout marche je vais faire plusieurs echo pour bien verifier mais il me semble que c'est tout bon pour celle la.
    Voici mon code actuel, si tu pouvais y consacrer un petit peu de temps encore un fois tu me ferait vraiment super plaisir. Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <html>
    	<head><title>Simulateur de Combats Spatiaux</title></head>
    	<body>
    	<FONT FACE="tahoma">
    	<CENTER>
    		<form name="formulaire" method="post" action="Complexe.php"
    		<CENTER><FONT COLOR="RED" SIZE=+2><B><U>Défenseur</COLOR="RED"></FONT COLOR="RED" SIZE=+2></B></U><br/><br/></CENTER>
    		<FONT SIZE=+1><B><U>Collez ici votre Rapport d'Espionnage</FONT SIZE=+1></B></U><br/><br/>		
    		<textarea name="formulaire" id="CadreFormulaire" rows="10" cols="40">
    		</textarea><br/><br/>
    		<input type="submit" name="valider" value="Envoyer"/>
    		</form>
    	</CENTER>
    	<FONT FACE="tahoma">
    	<?php
    	if(isset($_POST['valider'])){ 
     
    function recupVariables( $chaine , $data ){
    	//création du masque de sélection des lignes à traiter	
    	if( is_array( $data ) ) $mask = '`^(' . implode( '|' , $data ) . ')`i';
    	else $mask = '`^(' . $data . ')`i';
    	// on transforme la chaine d'entrée en tableau
    	$tabOriginal = explode( "\n" , $chaine );
    	// sélection des lignes intéressantes du tableau 	
    	$tab = preg_grep( $mask , $tabOriginal );
    	$out = array();	
    	foreach( $tab as $ligne ){
    		list( $var , $val ) = explode( ':' , $ligne );
    		if( !is_array( $data ) ) return trim( $val );
    		$out[  trim( $var ) ] = trim( $val );
    	}
    	return $out;
    }
    $tabRecherches = array( 'Tour de Combat' , 'Canon Laser' , 'Grand Canon Laser' , 'Rayon Tracteur' , 'Lanceur de Missiles' , 'Satellite à Ions' , 'Batterie Electromagnétique' , 'Canon à Plasma' , 'Canon Electromagnétique' ,  'Silos à Missiles HEM' , 'Complexe de Défense Orbital' , 'Missile d\'Interception Intelligent' , 'Technologie Amélioration de la Coque' , 'Technologie Amélioration de l\'Armement' , 'Technologie Bouclier de Protection' );
    $Défenses = recupVariables( $_POST['formulaire'] , $tabRecherches );
     
    echo $Défenses['Tour de Combat'] . '<br /><br />';
     
    function recupVaisseau( $chaine ){
    	//comme dans la fonction recupVariables, on transforme la chaine d'entrée en tableau	
    	$tabOriginal = explode( "\n" , $chaine );
    	//on sélectionne toutes les lignes contenant des parenthèses (à priori VAISSEAU( NOMBRE ) si j'ai bien capté)
    	$listeVaisseaux = preg_grep( '`\(`' , $tabOriginal );
    	$out = array();	
    	foreach( $listeVaisseaux as $key=>$val ){
    		//création d'un nouvel objet de données qui représentera le vaisseau		
    		$vaisseau = new stdClass();
     
    		// regex permettant de d'identifier le nom du vaisseau et le nombre	
    		preg_match( '`^(?P<nom>.+?)\s*\(\s*(?P<nombre>\d+?)\s*\)$`' , $val , $t );
    		$vaisseau->nom = trim( $t['nom'] );
    		$vaisseau->nombre = trim( $t['nombre'] );
    		$vaisseau->caracteristiques = array();		
    		$k = 0;
    		while( $tabOriginal[ $key + (++$k) ] != '' ){
    			if( strpos( $tabOriginal[ $key + $k ] , ':' ) == true ){
    				list( $var , $val ) = explode( ':' , $tabOriginal[ $key + $k ] );
    				$vaisseau->caracteristiques[ trim( $var ) ] = trim( $val );
    			}
    			else $vaisseau->caracteristiques[ trim( $tabOriginal[ $key + $k ] ) ] = 1;
    		}
    		$out[] = $vaisseau;
    	}
    	return $out;
    }
    		$tab = recupVaisseau( $_POST['formulaire'] );
    	foreach( $tab as $vaisseau ){
    		echo 'Nom : ' . $vaisseau->nom . '<br />';
    		echo 'Nombre : ' . $vaisseau->nombre . '<br />';
    		echo 'Attaque : ' . $vaisseau->caracteristiques['Attaque'] . '<br />';
    		echo 'Bouclier : ' . $vaisseau->caracteristiques['Bouclier'] . '<br/>';
    		echo 'Coque : ' . $vaisseau->caracteristiques['Coque'] . '<br/>';
    }
     
    }
    ?>
    J'ai un autre soucis, comment faire pour que php prenne en compte 10.000 comme 10000 ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 92
    Points : 22
    Points
    22
    Par défaut
    Bon, pour les Défenses tout va bien, sauf que lorsqu'il y en a certaines contenu dans l'array qui ne sont pas présent dans le rapport cela me renvoi "Notice: Undefined index: Missile d'Interception Intelligent in C:\Program Files\wamp\www\test.php\Complexe.php on line 48"
    Mais je pense que cela c'est possible de l'enlever. ? non ?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Difficile de déboguer un script qui fonctionne parfaitement chez moi

    Si quelqu'un veut testouiller et voir s'il obtient des messages d'erreur ou des retours erronés.
    Pour ce qui est des notice "undefined index", la fonction ne renvoie QUE ce qui a été trouvé. Il faut donc tester qu'un index existe avant de vouloir l'utiliser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if( isset( $var['index'] )){
    //blablabla...;
    Par exemple.

    Et pour retirer les . dans un chiffre style 150.000.000

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = str_replace( '.' , '' , $var );

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 92
    Points : 22
    Points
    22
    Par défaut
    Es tu sur qu'il fonctionne correctement ? Test avec le texte que j'ai mis au dessus et avec le code que j'ai posté. Peut-ètre ai-je bidouillé quelque chose ?
    M'enfin moi pour les récupDéfenses sa marche mais c'est le récupVaisseau qui plante.
    En plus de ne pas avoir les nom et nombres je n'ai que les caractéristiques du dernier vaisseau (juste avant les défenses). Cela m'étonne que je me rende compte de ça maintenant.. sans doute que le script bug, si quelqu'un pouvait le tester SVP

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 92
    Points : 22
    Points
    22
    Par défaut
    Petit Bidon ou quelqu'un d'autre pouvez vous s'il vous plait essayer le script que j'ai posté un peu plus haut avec le rapport qu'il y a ? S'il vous plait parce que cela m'embete quand même ! Je peux plus avancer !

Discussions similaires

  1. message d'erreur : Fonction indéfinie
    Par Kiko93 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/12/2011, 17h33
  2. Message d'erreur "Fonction indéfinie" anormal
    Par laurentSc dans le forum Langage
    Réponses: 2
    Dernier message: 23/06/2011, 13h56
  3. Message d'erreur fonction envoi touches dans macro
    Par isabelle b dans le forum IHM
    Réponses: 4
    Dernier message: 26/06/2008, 21h15
  4. Réponses: 2
    Dernier message: 10/01/2007, 23h28
  5. Réponses: 2
    Dernier message: 01/06/2006, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo