Problème de SELECT * INSERT INTO

Résolu
clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024 - Modifié le 8 oct. 2024 à 22:45
clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024 - 3 nov. 2024 à 09:46

Bonjour

je galère sur une syntaxe que je n'arrive pas à corriger. Je voudrais faire la sauvegarde de mes données annuelles en fichier csv, excel ou autre. J'ai parcouru les sites et tous semblent indiquer la même chose, mais de façon incomplète. Merci de corriger ma requête si possible. Mon dossier reste désespéramment vide mais je n'ai aucun message d'erreur. Je précise que ceci avec ou sans le while, et que si je ne mets pas le  into outfile etc.. elle fonctionne

Merci d'avance

$myreq = "select * from adherents where annee = $exer into outfile 'C:\\temp\\CSV.csv'";
	$result = mysqli_query($conn, $myreq);
	while ($row = mysqli_fetch_array($result)) 
	{
    echo "ID".$row[0]." ". $row[2]." ".$row[3]." ".$row[4]."  ".$row[5]." ".$row[6]." ".$row[7]." ".$row[8]." ".$row[9]." ".$row[10]." ".$row[11]." ".$row[12]." ".$row[13]."<br>";
	}

5 réponses

jordane45 Messages postés 38297 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024 4 704
9 oct. 2024 à 07:21

bonjour 

commence par mettre des quotes autour de l'année 

$myreq = "select * from adherents where annee = '$exer' into outfile 'C:\\temp\\CSV.csv'";

et si ca ne marche toujours pas, fais un echi de ta variable $myreq pour voir à quoi elle ressemble puis teste la directement dans ta bdd via phpmyadmin par exemple.

n'hésite pas non plus à afficher les eventuelles erreurs après l'exécution de la requête via

echo("Error description: " . mysqli_error($conn));
}

0
clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024 1
10 oct. 2024 à 19:15

Non, j'ai tenté tes conseils... Aucune erreur sur la condition

echo("Error description: " . mysqli_error($conn));
}
et $exe fonctionne bien (int)
0
clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024 1 > clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024
10 oct. 2024 à 19:22

je vais chercher encore un peu puis je ferai des sauvegardes directement sur la table...

Connais tu la syntaxe pour sauvegarder les données d'une table (le contraire de DROP).

Mais ce n'est pas le but du jeu car je compte déléguer au président de l'association (qui est plus nul que moi en informatique) une version quasi automatique

Merci quand même

0
clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024 1
10 oct. 2024 à 20:37

le description error reste à nul. mais ma requête s'affiche... je continue à creuser. Merci quand même de t'être penchée sur mon problème. Si je trouve je mets la solution dans mon post

0
yg_be Messages postés 23338 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 novembre 2024 Ambassadeur 1 551
9 oct. 2024 à 08:34

bonjour,

si tu supprimes la cause into, la page affiche bien tes enregistrements? 

0
clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024 1
9 oct. 2024 à 13:28

Oui... tout est nickel tant que je ne tente pas le into outfile. C'est pour cela que je me suis même surpris a supprimer le while.

0
yg_be Messages postés 23338 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 novembre 2024 1 551 > clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024
9 oct. 2024 à 15:02

Tu as bien vérifié que le fichier n'existait pas avant d'exécuter la requête?

Le fichier est donc créé par la requête, mais est vide?

0
clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024 1
9 oct. 2024 à 13:26

Oui... tout est nickel tant que je ne tente pas le into outfile

0
jee pee Messages postés 40463 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 20 novembre 2024 9 421
9 oct. 2024 à 13:52

Bonjour,

Une suggestion. Il est fort probable que php ne puisse pas écrire par défaut hors du contexte du serveur web et de sa racine /, et même les dossiers du serveur web devraient par sécurité être interdits en écriture. Tu peux au moins vérifier avec un nom de fichier

into outfile 'CSV.csv' 

que tu pourrais retrouver dans le même répertoire que le source php.

Après pour régler les droits d'accès aux répertoires cela doit se faire dans ton serveur web (apache ?).


0
yg_be Messages postés 23338 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 novembre 2024 1 551
9 oct. 2024 à 15:01

Je pense que c'est la db qui écrit dans le fichier, par le php.

0
clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024 1
11 oct. 2024 à 22:45

J'ai essayé en vain... mais j'ai trouvé une solution de rem^placement avec fwrite qui fonctionne très bien. Création de fichier en SPV dans la racine. Il ne me reste plus qu'à trouver comment rapatrier automatiquement ce document pour transmettre un site fonctionnel.

Merci pour l'aide, l'ami

0

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

Posez votre question
clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024 1
Modifié le 11 oct. 2024 à 22:02

Voili, voila! J'ai trouvé comment détourner ce fichu outfile.

J'ai créé un fichier sauvegarde.doc puis avec fwrite je complète mon fichier.

Pour le moment j'ai une seule ligne (la dernière) qui s'écrit mais je vais peaufiner.la requête pour avoir toutes mes lignes et séparation en SPV.

Le fichier sera plus facile à rapatrier.

$file = "./sauvegarde.doc";
    $fh = fopen($file, 'r+');
    while ($row = mysqli_fetch_array($result)) 
    {
    $donnees="ID".$row[0].", ". $row[2]." ,".$row[3].", ".$row[4]." , ".$row[5]." ,".$row[6].", ".$row[7].", ".$row[8].", ".$row[9].", ".$row[10]." ,".$row[11].", ".$row[12].", ".$row[13]."/n";
    fwrite($fh, $donnees);
    }
    fclose($fh);

0
clé de 12 Messages postés 139 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 3 novembre 2024 1
3 nov. 2024 à 09:46

Version finale qui fonctionne très bien :

<?php  
$conn=mysqli_connect($DBserveur, $DBlogin, $DBpassword,$DBbase);
$lines = file("https://pmcc.wf/fichier-2024.csv");
// Affiche toutes les lignes du tableau comme code HTML
foreach ($lines as $line_num => $line) 
{
$myfile= explode(';', htmlspecialchars($line));
    $prenom= $myfile[0]; 
    $nom= $myfile[1]; 
    $adhes= $myfile[2];
    $don= $myfile[3];
///le nom est obligatoire ///////
    if (strlen($nom)>2)
    {
    $myreq="INSERT INTO `adherents`(prenom, nom, annee, adhesion) VALUES ('$prenom','$nom','2324', '$adhes')";
 //On vérifie la connexion
            if($conn->connect_error)
            {
                die('Erreur : ' .$conn->connect_error);
            } 
    $exec=mysqli_query($conn,$myreq);
    }
}
// Utilisation de drapeau
$trimmed = file('somefile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
?>

C'est peut être scolaire et on doit trouver mieux; mais c'est ma solution pour ce input outfile qui ne doit écrire que dans le fichier parent...si on a l'autorisation pour ce faire.

Merci à tous

0