Page 1 sur 1

Générer une liste numéroté en php

Posté : 02 oct. 2013, 09:26
par Ziyak
Bonjour,

J'ai besoin de votre aide pour pouvoir générer une liste numéroté. Je possède une page dans laquelle des utilisateurs rentrent leurs adresse email, un fichier .txt stocke alors les informations rentrées par l'utilisateur. Les informations sont enregistrées sous cette forme :

Adresse email : [email protected]
Ip: 127.0.0.1
Heure de connexion : 16:00

Adresse email : [email protected]
Ip: 123.0.0.2
Heure de connexion : 15:03

J'aimerais pouvoir numéroté cette liste de façon à ce que les informations s'affichent sous cette forme, dans un soucis d'organisation :

1. Adresse email : [email protected]
Ip: 127.0.0.1
Heure de connexion : 16:00

2. Adresse email : [email protected]
Ip: 123.0.0.2
Heure de connexion : 15:03

Jusqu'à présent je n'ai pas trouvé de solution à mon problème. Pouvez vous m'aidez ? Voici le code de mon fichier email.php

Code : Tout sélectionner

<?php $FICHIER = "log.txt"; header("Location: xxxxx"); $handle = fopen($FICHIER, "a"); date_default_timezone_set('Europe/Paris'); $date = date("d/m/Y"); $heure = date("H"); $minute = date("i"); $seconde = date("s"); $time = $heure ." : ".$minute." : ".$seconde ; $ip = $_SERVER ['REMOTE_ADDR'] ; $navi = $_SERVER ['HTTP_USER_AGENT'] ; fwrite($handle, "Email/Username: "); fwrite($handle, $_POST["user"]); fwrite($handle, "\r\n"); fwrite($handle, "Adresse ip: "); fwrite($handle, $ip); fwrite($handle, $_POST["REMOTE_ADDR"]); fwrite($handle, "\r\n"); fwrite($handle, "Connecté le "); fwrite($handle, $date ); fwrite($handle, " à "); fwrite($handle, $time); fwrite($handle, "\r\n"); fwrite($handle, "OS : "); fwrite($handle, $_POST["HTTP_USER_AGENT"]); fwrite($handle, $navi); fwrite($handle, "\r\n"); fwrite($handle, "\r\n"); fclose($handle); exit; ?>

Re: Générer une liste numéroté en php

Posté : 02 oct. 2013, 09:35
par computarelier
Bonjour,

Une solution pourrait être de positionner ton curseur à l'avant-avant dernière ligne de ton fichier texte.
1. Adresse email : [email protected]
Tu mets le quote ci-dessus en string. Tu extraits ce qu'il y a avant le point. Ici 1. Tu l'incrémentes. Et après tu sais à combien tu repars pour écrire la suite ...

Si quelqu'un a une idée plus propre... :-)

Computarelier

Re: Générer une liste numéroté en php

Posté : 02 oct. 2013, 10:24
par Ziyak
Je suis débutant en php, je suis pas sure de bien comprendre ce que tu veux dire. Quel type de code dois-je rentrer pour pouvoir faire une liste numéroté ?

Re: Générer une liste numéroté en php

Posté : 02 oct. 2013, 16:28
par orenx22
Bonjour, dans un premier temps, si tu es débutant en php il serait fortement intéressant de poster ta demande dans la branche de forum qui correspond, cad "débutant", car la tu es dans la section "avancé" donc si je commence une explication devrait logiquement être adapté à ton niveau.

Pour faire simple, en php tu peux stocker des informations dans la mémoire de ton ordinateur / serveur grâce a plusieurs procédés.

La variable simple :

$var = "du text" ;

un tableau à clé numérique :

! important : les tableaux à clé numérique commence par 0.

$table = array( "premième cellule", "deuxième cellule", "etc" );

exploitation des données :

echo $table[1] ; // affichera "deuxième cellule"

un tableau à clé alphanumérique :

$table = array( "cle_1" => "premième cellule", "cle_2" => "deuxième cellule", "cle_n" => "etc" );

exploitation des données :

echo $table["cle_2"] ; // affichera "deuxième cellule"

pour interpreter le résultat d'un tableau je t'invite a exploiter la fonction "print_r($table)"

De manière plus générale, si tu début en développement je t'invite fortement à posséder un IDE (application pour développer), je te conseille vivement NetBeans, il est gratuit.

Si tu dois développer de manière plus pousser en php, consulte http://php.net/manual/fr/index.php, bible du débutant !

dans ton cas par exemple : http://php.net/manual/fr/language.types.array.php

Après comme tu veux manipuler des informations qu'un client pourrait enregistrer à un moment T, tu as plusieurs possibilités, par l'intermédiaire d'un fichier ini par exemple, ou par un base de donnée (qui est à mon goût la meilleur solution).

je t'invite à comprendre le fonctionnement de la fonction "parse_ini_file()" qui dans ton cas pourrais t'aider :

http://php.net/manual/fr/function.parse-ini-file.php

Je vais te montrer comment je ferai :

EN MODE FICHIER :
<?php

// j'initialise la variable $erreur à 'faux' ;
$erreur = false ;

// Constante de répertoire qui défini le répertoire racine quand je vais appeller PATH_ROOT
define( 'PATH_ROOT', dirname( __FILE__ ) );

// Si le post n'est pas vide, en gros si un formulaire a été lancé
// Et que le input avec le name "email" n'est pas vide
if( !empty( $_POST )
and !empty( $_POST['email'] ) )
{
    // Je charge le fichier user.ini dans un tableau
    $users = parse_ini_file( PATH_ROOT.'/user.ini', true );

    // Je compte combien il y a d'utilisateur enregistrer dans le tableau
    $count = count( $users );
    
    // Je défini le fuseau horraire
    date_default_timezone_set('Europe/Paris'); 

    // Je charge la date et l'heure en gardant la norme timestamp
    $now = date( "Y-m-d H:i:s" );

    // Je charge l'ip du client
    $ip = $_SERVER ['REMOTE_ADDR'] ;
    
    // Je charge l'explorateur
    $navi = $_SERVER ['HTTP_USER_AGENT'] ;
    
    // Je créer un chaine de caractère qui sera mon nouveau client
    $new_user = "[$count]\n" ;
    $new_user.= "mail = '{$_POST['email']}'\n" ;
    $new_user.= "ip = '$ip'\n" ;
    $new_user.= "date = '$now'\n" ;
    $new_user.= "nav = '$navi'\n" ;
    
    // J'insert ce nouveau client dans le fichier user.ini
    file_put_contents( PATH_ROOT.'/user.ini', $new_user, FILE_APPEND );
}
// sinon la variable $erreur vaut 'vrai'
else
{
    $erreur = true ;
}

// Je réouvre le fichier ini pour actualiser la dernière entré
$users = parse_ini_file( PATH_ROOT.'/user.ini', true );

// HTML :

?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Site</title>
    </head>
    <body>
        <?php if( $erreur == true ): ?>
        <h1 style="color: red;">Le formulaire ne peut être vide</h1>
        <?php endif ?>
        <form method="POST" action="index.php">
            <legend>Email :</legend>
            <input type="text" name="email" />
            <input type="submit" value="Valider" />
        </form>
        <pre><?php print_r( $users ) ?></pre>
    </body>
</html>
EN MODE BASE DE DONNÉES qui est au niveau de PHP avancé :
<?php 

/*
 * 

BASE DE DONNEE A INSERER :

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `exemple` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `exemple` ;

-- -----------------------------------------------------
-- Table `exemple`.`user`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `exemple`.`user` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `email` VARCHAR(45) NULL ,
  `ip` VARCHAR(45) NULL ,
  `nav` VARCHAR(45) NULL ,
  `date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;

USE `exemple` ;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

 */

$erreur = false ;

$dbhost = "127.0.0.1" ;
$dbname = "exemple" ;
$dbuser = "root" ;
$dbpass = "" ;

$database = new PDO( "mysql:host=$dbhost;dbname=$dbname;", $dbuser, $dbpass );

// Gestion du formulaire :

if( !empty( $_POST )
and !empty( $_POST['email'] )
and filter_var( $_POST['email'], FILTER_VALIDATE_EMAIL ) )
{
    $sql = "INSERT INTO user(email,ip,nav) VALUES (?,?,?)" ;
    $req = $database-> prepare( $sql );
    $req-> execute( array( $_POST['email'], $_SERVER ['REMOTE_ADDR'], $_SERVER ['REMOTE_ADDR'] ) );
}
else
{
    $erreur = true ;
}

// Récupération des clients :

$sql = "SELECT * FROM user" ;
$req = $database-> prepare( $sql );
$req-> execute();

$result = $req-> fetchAll( PDO::FETCH_OBJ );

// Code html

?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php if( $erreur == true ): ?>
        <h1 style="color: red;">L'email est invalide</h1>
        <?php endif ?>
        <form method='POST' action='index.php'>
            <input type='text' name='email' />
            <input type='submit' value='Valider'/>
        </form>
        <pre>
            <?php print_r( $result ) ?>
        </pre>
    </body>
</html>

Salut

Re: Générer une liste numéroté en php

Posté : 02 oct. 2013, 23:16
par Ziyak
Merci pour ta réponse orenx22! :-) Je préfère ne pas utiliser de base de données et rester sur du php. Dois je mettre le code php que tu m'as donné à la suite du mien dans mon fichier email.php ? A quoi sert le fichier user.ini ? J'avoue être assez perdu, je pensais que ça serait beaucoup plus simple de créer une listé numéroté...

Re: Générer une liste numéroté en php

Posté : 03 oct. 2013, 01:42
par orenx22
Remplace tout ton code par le miens :

Image

Pour un résultat de ce type :

Image

Un liens pour télécharger les fichiers :

http://www.e-system.fr/data/result3.rar

Si tu ne t'en sort pas, envoi moi un message perso, je t'aiderai sur skype.

Ciao

Re: Générer une liste numéroté en php

Posté : 03 oct. 2013, 10:39
par sirakawa
Fichier 1:
Au début
<?PHP
//création
$ligne = file_put_contents("./nombre_inscrits.txt", "0");
?>
Fichier 2 mise à jour
<?PHP

// à chaque inscription
error_reporting (E_ALL);
$ligne = file_get_contents("nombre_inscrits.txt");
print "nombre actuel $ligne"; //simple vérification
$ligne = intval($ligne) +1;
$res = file_put_contents("nombre_inscrits.txt", $ligne);
print "<br />nombre à venir $ligne"; //simple vérification
//tu ouvres ton fichier de données comme tu sais le faire
$FICHIER = "log.txt";
$handle = fopen($FICHIER, "ab");
fwrite($handle, "$ligne\n");
fwrite($handle, "ce qu'il faut");
fclose ($handle);
?>
à adapter tant soit peu