2009-11-10 9 views
1

Je tente d'extraire des données à partir de SQL, puis de les écrire dans un fichier texte. Cela fait que, dans une certaine mesure, mais il tire seulement 1 de la table, qui lit test:test<br> sur le fichier texte.Extraction de données à partir de SQL et écriture dans un fichier texte

Je veux être en mesure de tirer toutes les données de la table, puis poster le fichier texte dans un format de liste tels que cette ...

test:test 
    test2:test2 
    test3:test3 

I besoin de savoir ce que je fais mal.

<?php 
$sql = mysql_query("SELECT * FROM _$setprofile ORDER BY fc DESC"); 
while($row = mysql_fetch_array($sql)){ 
$user = $row['user']; 
$pass = $row['pass']; 

$accounts = "$user:$pass<br>"; 

//Functionsss! 
$file = "backups/$newcode.txt"; 
file_put_contents($file, $accounts); 
} 

echo "<a href=backups/$newcode.txt>TEST!</a>"; 
?> 

Répondre

3

La fonction file_put_contents() écrase le fichier entier - c'est pourquoi vous vous retrouvez avec seulement le dernier enregistrement à chaque fois. Vous pouvez utiliser fopen() et fwrite() à la place.

Bien qu'un peu plus compliqué que la construction d'une grande chaîne et en utilisant un seul appel à file_put_contents, cela ne manquera pas de mémoire si vous avez beaucoup d'enregistrements.

<?php 

$file = "backups/$newcode.txt"; 
$f = fopen($file, 'w'); // Open in write mode 

$sql = mysql_query("SELECT * FROM _$setprofile ORDER BY fc DESC"); 
while($row = mysql_fetch_array($sql)) 
{ 
    $user = $row['user']; 
    $pass = $row['pass']; 

    $accounts = "$user:$pass<br>"; 
    // Or "$user:$pass\n" as @Benjamin Cox points out 

    fwrite($f, $accounts); 
} 

fclose($f); 

echo "<a href=backups/$newcode.txt>TEST!</a>"; 
?> 
+0

Vous pouvez utiliser le 'drapeau FILE_APPEND' avec file_put_contents pour ajouter au lieu de Ecraser –

+0

vrai, mais peut-être pas ce que vous voulez si vous exécutez le script deux fois de suite. – Greg

+0

@Greg C'est la réponse la plus approfondie, merci! – Homework

1

file_put_contents remplace le fichier existant. Avec le code ci-dessus, vous n'obtiendrez qu'une seule ligne.

Essayez ceci:

<?php 

$sql = mysql_query("SELECT * FROM _$setprofile ORDER BY fc DESC"); 
$content = ""; 

while($row = mysql_fetch_array($sql)){ 
    $user = $row['user']; 
    $pass = $row['pass']; 

    $accounts = "$user:$pass<br>"; 
    $content .= $accounts; 

} 

$file = "backups/$newcode.txt"; 
file_put_contents($file, $content); 

echo "<a href=backups/$newcode.txt>TEST!</a>"; 
?> 
1

Vous n'êtes pas annexant les résultats de la base de données à la chaîne des comptes $; vous créez à partir de zéro à chaque fois. Essayez quelque chose comme ceci:

<?php 
$accounts = ""; 
$sql = mysql_query("SELECT * FROM _$setprofile ORDER BY fc DESC"); 
while($row = mysql_fetch_array($sql)) { 
    $user = $row['user']; 
    $pass = $row['pass']; 

    $accounts .= "$user:$pass<br>"; 
} 

//Functionsss! 
$file = "backups/$newcode.txt"; 
file_put_contents($file, $accounts); 

echo "<a href=backups/$newcode.txt>TEST!</a>"; 
?> 

si vous ajoutez, puis une fois que vous avez tous vos résultats dans la chaîne de comptes $, vous l'écrire dans le fichier.

1

Il semble que vous réouvrez et réécrivez tout le contenu du fichier à chaque passage de votre boucle while.

Essayez ceci:

<?php 
$sql = mysql_query("SELECT * FROM _$setprofile ORDER BY fc DESC"); 
$file = "backups/$newcode.txt"; 
$fh = fopen($file, 'a') or die("can't open file"); 

while($row = mysql_fetch_array($sql)){ 
    $user = $row['user']; 
    $pass = $row['pass']; 

    $accounts = "$user:$pass<br>"; 

    fwrite($fh, $accounts); 
} 

fclose($fh); 

echo "<a href=backups/$newcode.txt>TEST!</a>"; 
?> 

De plus, si vous ne voulez pas < br>, mais une véritable rupture de ligne, utilisez:

$accounts = "$user:$pass\n"; 
+0

Merci pour la rupture de lien, j'ai oublié à ce sujet. – Homework

2

D'autres ont répondu à la raison pour laquelle il est seulement écrire un contenu dans le fichier, c'est plus une suggestion, mais si vous voulez enregistrer l'utilisateur et le mot de passe, au lieu de:

$accounts = "$user:$pass<br>";

utilisation

$accounts = $user . ":" . $pass . "\n";

mais si vous le saviez déjà et que vous utilisiez que pour des fins de débogage ne pas tenir compte que cela.

Bonne chance

1

Si c'est un fichier texte, la balise <br> ne sera pas particulièrement utile pour vous, aussi bien. Vous devrez utiliser \n pour provoquer un saut de ligne dans un fichier texte. Si c'était html, alors nous aurions une situation différente.

$accounts = "$user:$pass<br>"; 

devrait être

$accounts .= "$user:$pass\n"; 

et vous devriez certainement tirer le file_put_contents hors de la boucle ou vous allez écraser le fichier chaque fois que vous passez par la boucle.

0

echo "select concat(user,':',pass,'<br>') from table order by fc desc" | mysql <database>

Je préfère faire ce genre de chose en bash;)

Questions connexes