Récupérer des lignes de texte pour la bdd

Utilisateur anonyme -  
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai trouvé cette vidéo : http://simpledev.fr/tutoriels/tuto/recuperation-de-donnees-depuis-un-fichier-texte-en-php/145

Je voudrai réaliser la même chose sauf que ça passerai par un formulaire...

Mais je m'arrache les cheveux, une idée ?

formulaire :

<form action="insert.php" method="post">
<table border="0" bordercolor="#000000" style="background-color:" width="auto" align="center">
	<tr>
		<td>Nom : </td>
		<td><input type="text" name="author" size="35" value="Aranud"/></td>
	</tr>
	<tr>
		<td>Date : </td>
		<td><input type="text" name="date" size="35" value="<?php $date = date("Y-m-d"); Print("$date");?>"/></td>
	</tr>
	<tr>
		<td>Liste : </td>
		<td><TEXTAREA rows="25" name="liste" cols="50" value="<?php echo $lignes ?>"></TEXTAREA></td>
	</tr>
	<tr>
		<td>Classer comme : </td>
		<td><input type="radio" name="classified" value="B"/>Malware<br/>
		<input type="radio" name="classified" value="U"/>Inconnu<br/>
    <input type="radio" name="classified" value="G"/>Inoffensif<br/></td>
	</tr>
	<tr>
	<td></td>
		<td><input type="submit" value="Soumettre"/></td>
	</tr>
	  
	</table>



insert :

<?php
require("config.php");
if(!empty($_post));
{
extract($_post);
$lignes = $_POST['liste'];
$author = $_POST['author'];
$date = $_POST['date'];
$classified = $_POST['classified'];

}


foreach($lignes as $ligne){
$ligne=explode("*",$ligne);
$sql="INSERT INTO md5 (author, md5, name, description, date, classified) VALUES('$author','$ligne[0]','$ligne[1]','$ligne[2]','$date','$classified')";
$req=mysql_query($sql);


}

mysql_close();

?>


Merci beaucoup !!!!!

4 réponses

Utilisateur anonyme
 
Bonjour,

$lignes = $_POST['liste'];

cela signifie que vous récupérez un texte que vous mettez dans la variable $lignes, ce n'est pas un tableau, juste une chaine de caractères, vous êtes d'accord, donc le foreach($lignes as $ligne) ne va pas vous renvoyer les lignes saisies dans la zone de texte, mais à priori chaque caractère de la chaîne $lignes

Il faudrait que
$lignes = split($_POST['liste'],"\n"); (sous linux), à condition que vous mettiez des retours chariots dans le textatea
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
de plus, en php la casse des variable est importante alors mets $_POST au lieu de $_post

autre remarques:

foreach($lignes as $ligne){
$ligne=explode("*",$ligne);
$sql="INSERT INTO md5


- comme dit neoprog67 $lignes n'est pas un array donc tu ne peut pas le parcourir par foreach
- $ligne=explode("*",$ligne); ce qui voudrait dire que dans chaque ligne il y a en plus des * qui te servent a découper en sous array ?
- tu nomme ta table md5 ce n'est pas très judicieux ce mot étant le nom d'une fonction php
0
Utilisateur anonyme
 
Merci de vos commentaires je vais tenter ça cette nuit quand je rentrerai chez moi.

oui en faite j'ai un programme qui génère les MD5 des fichiers par une *
par exemple

lemd5 *lenomfichier
lemd5*lenomdufichier2
....

donc je vais découper par l'étoile.Le but étant de référencer les programme de la machine par les MD5 (qui est aussi la clé primaire)

Merci encore
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
si j'ai bien compris ton programme genere les lemd5 *lenomfichier
lemd5*lenomdufichier2 et les enregistre dans un fichier .txt
et tu veux lire ce fichier ligne par ligne et afficher dans un formulaire pour ensuite enregistrer dans la BDD avec le classement "malware" etc..

si c'est le cas voici une solution:
<?php
//on lit de contenu du fichier txt
//suposons qu'il se nomme liste_fichiers.txt et qu'il est dans le même repertoire que ce script php
$lignes_fichiers=file('liste_fichiers.txt'); //la fonction file lit le fichier et met dans un array ligne par ligne
//on va afficher chaque ligne dans le formulaire mais grace à un compteur on changera à chaque insertion dans la BDD pour passer à la ligne suivante

if(isset($_POST['compteur'])){
	$cpt=$_POST['compteur']); //recup du numéro precedent
	if($cpt < sizeof($lignes_fichiers)){
		$cpt ++; //tant qu'on a pas atteint la fin du fichier txt on passe à ligne suivante
	}else{
		echo "Fin du fichier atteint";
	}
}else{
	//au premier affichage
	$cpt=0; //l'index de l'array commence à 0  (égal première ligne)
}


if(isset($_POST['soumettre']));
{
	require("config.php");

	$lignes = $_POST['liste'];
	$author = $_POST['author'];
	$date = $_POST['date'];
	$classified = $_POST['classified'];
	//insertion dans la BDD
	$ligne=explode("*",$ligne); //array
	$sql="INSERT INTO md5 (author, md5, name, description, date, classified) VALUES('$author','$ligne[0]','$ligne[1]','$ligne[2]','$date','$classified')";
	$req=mysql_query($sql);

	mysql_close();
}



?>

Traitement de la ligne: <b><?php echo $cpt+1; ?> </b>en cours<br />
<form action="insert.php" method="post">
<table border="0" bordercolor="#000000" style="background-color:" width="auto" align="center">
	<tr>
		<td>Nom : </td>
		<td><input type="text" name="author" size="35" value="Aranud"/></td>
	</tr>
	<tr>
		<td>Date : </td>
		<td><input type="text" name="date" size="35" value="<?php $date = date("Y-m-d"); echo $date;?>"/></td>
	</tr>
	<tr>
		<td>Liste : </td>
		<!-- on affiche la ligne correspondante au compteur $cpt -->
		<td><TEXTAREA rows="25" name="liste" cols="50" value="<?php if($cpt < sizeof($lignes_fichiers)) {echo $lignes_fichiers[$cpt]} ?>"></TEXTAREA></td>
	</tr>
	<tr>
		<td>Classer comme : </td>
		<td>
			<input type="radio" name="classified" value="B"/>Malware<br/>
			<input type="radio" name="classified" value="U"/>Inconnu<br/>
			<input type="radio" name="classified" value="G"/>Inoffensif<br/></td>
	</tr>
	<tr>
	<td></td>
		<td><input name="soumettre" type="submit" value="Soumettre"/></td>
		<!-- par ce champ caché on va transmettre le numéro compteur en cours d'insertion -->
		<td><input name="compteur" type="hidden" value="<?php echo $cpt; ?>"/></td>
	</tr>
	  
	</table>
0
Utilisateur anonyme
 
lu merci pour ton commentaire, mais ça ne sera pas un fichier, car nous seront plusieurs et il faudra en rajouter régulièrement donc par simplicité le document txt sera coller dans un textarea mais merci encore je vais m'en inspirer
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
ha d'accord, donc ce que je t'ai fait ne sera pas bon

mais comment fais tu avec plusieurs noms de fichiers "collés" dans le textarea pour leur donner une catégorie différente ?.

si vous êtes plusieurs, pourquoi ne pas enregistrer la liste générée par le prog dans un fichier prenom.txt par exemple (un copier coller dans bloc note), fichier qui peut être supprimé à la fin du traitement par le formulaire, dans ce cas tu pourrait utiliser ce que je t'ai fait et mettre la catégorie fichier par fichier
0