Fichier .txt

ViPHP
ViPHP | 2291 Messages

12 janv. 2009, 16:40

Bonjour,
Je crée un fichier .txt jusque là pas de soucis
$sql = 'SELECT id_lm, adresse FROM ampli_lm';
$result = mysql_query($sql) or die('Ne trouve pas tout les données : ' .
    mysql_error());
while ($row = mysql_fetch_array($result)) {
    $generation = '&' . $row['id_lm'] . '&' . $row['adresse'] . '&';


    $f = 'Reseau_600_mhz.txt';
    $text = $generation;
    $handle = fopen($f, "w");

    // regarde si le fichier est accessible en écriture
    if (is_writable($f)) {
        // Ecriture
        if (fwrite($handle, $text) === false) {

            echo 'Impossible d\'écrire dans le fichier ' . $f . '';
            exit;
        }


        fclose($handle);

    } else {
        echo 'Impossible d\'écrire dans le fichier ' . $f . '';
    }
}
echo 'Génération du fichier terminé avec succés pour le télécharger merci de <a href="' .
    $f . '">cliquez ici</a>';
Par contre je ne comprend pas pourquoi il n'écrie qu'une seule ligne alors que ma table en comprend plus de 500 :?:

D'avance merci

Eléphant du PHP | 170 Messages

12 janv. 2009, 16:55

Salut,

fopen(), extrait du manuel :
'w' Ouvre en écriture seule ;
place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0.
Si le fichier n'existe pas, on tente de le créer.
fopen() est à l'intérieur de la boucle "while".

Le fichier est donc "écrasé" à chaque tour.
Il ne contient que la dernière occurrence de $generation.

ViPHP
ViPHP | 2291 Messages

12 janv. 2009, 23:56

Ok imaginons que le soucis viennent de là j'ai modifier ma méthode comme ceci
include '../include/config.php';
$sql = 'SELECT id_lm, adresse FROM ampli_lm';
$result = mysql_query($sql) or die('Ne trouve pas tout les données : ' .
    mysql_error());
$a = array();
$b = array();
while ($row = mysql_fetch_array($result)) {

    $id_lm = $row['id_lm'];
    $adresse = $row['adresse'];
    array_push($a, $id_lm);
    array_push($b, $adresse);
}


$f = 'Reseau_600_mhz.txt';
$handle = fopen($f, 'w');
$generation = '&' . $a . '&' . $b . '&';

// regarde si le fichier est accessible en écriture
if (is_writable($f)) {
    // Ecriture
    if (fwrite($handle, $generation) === false) {

        echo 'Impossible d\'écrire dans le fichier 1' . $f . '';
        exit;
    }


    fclose($handle);

} else {
    echo 'Impossible d\'écrire dans le fichier ' . $f . '';
}

echo 'Génération du fichier terminé avec succés pour le télécharger merci de <a href="' .
    $f . '">cliquez ici</a>';
Alors là ci je fais un print_r() j'ai mes données mais par contre dans mon fichier j'ai rien, là je comprend plus :twisted:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 janv. 2009, 00:04

Tu n'as rien dans le fichier ? où tu as juste "&Array()&Array()&" ?

Dans ton fichier, tu vas ecrire le contenu de $generation. Assure toi donc juste que ce contenu correspond bien à ce que tu souhaites avoir dans ton fichier, fwrite() fera le reste :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 209 Messages

13 janv. 2009, 00:05

Normal, $a et $b sont des tableaux et tu les concatène avec une chaîne de caractères.
De plus ton fopen doit être avant le while alors que le fwrite doit être dedans et le fclose après.
Et à mon avis tu aurais du garder
    $generation = '&' . $row['id_lm'] . '&' . $row['adresse'] . '&'; 

ViPHP
ViPHP | 2291 Messages

13 janv. 2009, 00:21

Normal, $a et $b sont des tableaux et tu les concatène avec une chaîne de caractères.
De plus ton fopen doit être avant le while alors que le fwrite doit être dedans et le fclose après.
Et à mon avis tu aurais du garder
    $generation = '&' . $row['id_lm'] . '&' . $row['adresse'] . '&'; 
J'ai créer un tableau pour sortir mes variable de ma boucle WHILE parce ci je place fopen ds ma boucle j'ai une erreur il ne sais pas écrire ds le fichier

Eléphant du PHP | 209 Messages

13 janv. 2009, 00:23

C'est pas ton fopen qui doit être dans la boucle, mais le fwrite, non ?

ViPHP
ViPHP | 2291 Messages

13 janv. 2009, 00:33

Bon ok ça fonctionne, je testais un nv editeur et cette :tir2: ne rafraichit pas