Vérifier qu'une chaine de caractère est un entier

Fermé
nguim - 5 mars 2014 à 16:29
 Utilisateur anonyme - 5 mars 2014 à 18:43
Bonsoir à tous !

J'ai écrit un petit code pour vérifier que toutes les lignes de mon fichier texte sont des entiers.
Et s'il existe une ligne qui contient un caractère alphabétique, il me redirige vers une autre page et affiche un message d'erreur.
Mais lorsque j'exécute le code, il me redirige toujours vers cette page, même si toutes les lignes sont des entiers.
Lorsqu'il y'a un caractère alphabétique, il affiche le message d'erreur avec la ligne correspondante.
Mais lorsqu'il n'y a pas de caractère alphabétique dans le fichier, il me redirige toujours vers cette page prévue et affiche toujours le message d'erreur et ne met aucune ligne correspondante.

Voici mon code:

<?php

set_time_limit(0);
error_reporting(E_ALL ^ E_NOTICE);

mysql_connect('localhost','root','');
mysql_select_db('gestnum');


//on mesure la longueur des différentes lignes du fichier

$handle = fopen("fichiernumcr.txt", "r");
$i=0;

while (($taille = fgetcsv($handle, 0, "\n")) !== FALSE)
        {
$i++;        
$nul = strlen($taille[0]);


// On verifie que le fichier ne contient que des entiers

if (ctype_digit($taille[0]))
    {
      //$entier=1;
	  //$ligne=$i;
	  //echo 'La chaîne '. $entier .' est bien un entier<br/>';
    }
    else
    {
	  $entier1=0;
	  $ligne=$i;	
    }
		  
         } 
		 
		 
	 //Erreur fichier quand il contient des lettres

   if($entier1 ==0)
   {
   header('Location: ../gestionnaire-mdn/gerer-les-mdn-a-creer.php?er3=fstr1');
 
   }


?>




Je ne comprends plus rien.
S'il vous plait aidez moi.
Merci d'avance.
A voir également:

8 réponses

petitpiel Messages postés 16 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 5 mars 2014 2
5 mars 2014 à 16:51
Salut,
Je n'ai jamais employé la fonction fgetcsv, mais manifestement elle est faite pour lire les fichiers csv, et tu ouvre un fichier texte.
et un retour charriot comme délimiteur me parait pas être une bonne idée.
Peut-être devrais-tu plutôt utiliser fgets.
0
Mon problème n'est pas à ce niveau là.
ça fonctionne bien de plus vous la structure de mon fichier texte:

33830009
33830010
33830011
33830012
33830013
33830014
33830015

Ici fgetcsv c'est pour faciliter le traitement.
Regardez encore s'il vous plait.
0
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
5 mars 2014 à 17:14
Salut,

Pour essayer de localiser à quelle ligne il met ton bit à 1 pour la redirection, tu peux faire un :

die(var_dump($taille[0]));

Juste au dessus de $entier1=0; dans ton else.

De cette manière, le script s'arrêtera dès qu'il trouvera une valeur qui ne renvoit pas d'entier pour lui, et tu pourras mieux debugger pour savoir ce qui se passe :)
0
Utilisateur anonyme
5 mars 2014 à 17:23
Bonjour

As-tu bien initialisé $entier1 à autre chose que 0 quelque part ?
Et qu'est-ce qui affiche la ligne erronée quand il y en a une ? Je ne vois pas le code ici.
Enfin, il n'y a pas de exit après ton header(). Pas très normal
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Voici mon nouveau code après initialisation $entier:

<?php

set_time_limit(0);
error_reporting(E_ALL ^ E_NOTICE);

mysql_connect('localhost','root','');
mysql_select_db('gestnum');


//on mesure la longueur des différentes lignes du fichier

$handle = fopen("fichiernumcr.txt", "r");
$i=0;

while (($taille = fgetcsv($handle, 0, "\n")) !== FALSE)
        {
$i++;        
$nul = strlen($taille[0]);


// On verifie que le fichier ne contient que des entiers

if (ctype_digit($taille[0]))
    {
      //$entier=1;
	  //$ligne=$i;
	  //echo 'La chaîne '. $entier .' est bien un entier<br/>';
    }
    else
    {
	  $entier1=0;
	  $ligne=$i;	
    }
		  
         } 
		 
		 
	 //Erreur fichier quand il contient des lettres

   if($entier1 ==0)
   {
   header('Location: ../gestionnaire-mdn/gerer-les-mdn-a-creer.php?er3=fstr1');
 
   }


?>


Voici le code de la page qui affiche l'erreur:

       <?php 
         error_reporting(E_ALL ^ E_NOTICE);

  if(isset($_GET['er3']) and $_GET['er3'] = 'fstr1')
 {
$handle = fopen("../Blog Posts/fichiernum.txt", "r");
$i=0;
$entier1=0;
while (($taille = fgetcsv($handle, 0, "\n")) !== FALSE)
        {
  $i++;        
$nul = strlen($taille[0]);


if (ctype_digit($taille[0]))
    {
      //$entier=1;
	  //$ligne=$i;
	  //echo 'La chaîne '. $entier .' est bien un entier<br/>';
    }
    else
    {
	  $entier1=1;
	  $ligne=$i;	
      }
	  
         } 

 
 echo '<span style="font-style: italic; font-size: 15px; text-shadow: rgb(25, 25, 255) 1.4px 1.4px 0px, 
rgba(23, 23, 23, 0.792969) 2.1px 2.1px 0px; color: red;">
Erreur de Traitement : La structure du fichier est incorrecte, la ligne " N° '.$ligne.' "  contient un caractère alphabétique. Or le Numéro d\'Abonné un nombre entier';

$ecrire = fopen('../Blog Posts/fichiernum.txt',"w");
ftruncate($ecrire,0);
 }
		 ?>


S'il vous plait regardez encore.
0
Utilisateur anonyme
5 mars 2014 à 17:47
Il y a deux trucs que je ne comprends pas...
où est l'initialisation de $code1 dans ton nouveau code après initialisation $entier ?
Quand tu veux afficher la ligne en erreur, tu recommences tout le travail de lecture du fichier et de vérification dans la page qui affiche l'erreur ? Alors que tu l'as déjà fait dans la première page ?
0
C'est fait, je initialisé $entier=0; mais ça ne change rien.
J'ai repris le code dans la deuxième page parce que tous ces fichiers ne sont pas dans le même dossier.
0
Utilisateur anonyme
5 mars 2014 à 18:43
je initialisé $entier=0;
Pourquoi ? Et ne réponds pas que c'est moi qui l'ai de mandé, je n'ai jamais demandé ça.
Désolé de ne pas pouvoir t'aider, je ne comprends rien à ce que tu fais.
0