Recherche dans une table à partir d'une liste copiée collée

Eléphanteau du PHP | 38 Messages

10 déc. 2010, 12:31

Bonjour à tous,

Merci tout d'abord à ceux m'ayant aidé dans mon autre sujet. Ce fut dur mais j'ai compris pas mal de chose et j'avance toujours à petits pas !

Le contexte:

Je dois chercher une liste de nom prénom dans une table.
TOTO Bidule
TATA Machin
TITI Truc
....
etc

Cette liste est récupérée sur un fichier excel quelconque, un mail ou toutes autres sources et incorporée avec un copié collé.

Est il possible d'avoir un formulaire ou je puisse copier coller totalement cette liste et ensuite de me renvoyer les résultats de ma requête ?

(La partie requête etc pas de soucis j'ai contourné mon ignorance en important un fichier texte dans une table spécifique mais j'aimerais simplifier l'opération)

Merciii de votre aide

Eléphant du PHP | 209 Messages

10 déc. 2010, 12:51

Tu dois chercher si "TOTO Bidule" apparait dans la base de données, c'est bien ca ?
--
Eric

Eléphanteau du PHP | 38 Messages

10 déc. 2010, 13:19

Bah en gros avec mon resultat est un export CSV et me donne les résultats suivants:

Ma table "information"
comprend comme champ (avec 50 000 personnes environ)
Nom
Prenom
Date de Naissance

TOTO Bidule 11/01/1983
TATA Machin 03/12/1990
TITI Truc 4/11/1974
etc ...

et donc je veux faire une recherche dedans avec ma liste copiée collée simplement dans un formulaire sur une page html.

au lieu d'importer un fichier externe etc etc ...

La requete et l'export des résultats pas de soucis

C'est juste le formulaire et le copié collé en fait ...

Eléphant du PHP | 209 Messages

10 déc. 2010, 13:29

Hum, je comprend pas trop....

En copiant/collant la liste dans un textarea ?
<textarea name='data'>
</textarea>
--
Eric

ViPHP
xTG
ViPHP | 7331 Messages

10 déc. 2010, 13:47

Le gros soucis de l'export par copier/coller c'est que tu n'auras aucun délimiteur...
Comment savoir différencier les différentes données, telle est la question. :)
Car à ce que l'on peut voir le nom peut comporter des espaces, donc ce n'est pas un délimiteur viable.

Eléphanteau du PHP | 38 Messages

10 déc. 2010, 15:16

epommate> Le soucis c'est est ce que la requete va interpréter chaque ligne du text area ???

xTG> Dans mon copié collé il n'y aura que le nom et le prénom donc à la limite dans ma requête peut être faire recherche sur l'ensemble "nom prenom" qui ira chercher dans ma table l'ensemble "nom" et "prenom" ?

Eléphant du PHP | 209 Messages

10 déc. 2010, 15:59

> Dans mon copié collé il n'y aura que le nom et le prénom donc à la limite dans ma requête peut être faire recherche sur l'ensemble "nom prenom" qui ira chercher dans ma table l'ensemble "nom" et "prenom" ?

C'est possible mais c'est sale ....
SELECT * FROM table WHERE concat(nom," ",prenom) = $data
Je suis désolé, mais je n'ai toujours pas compris ce que tu cherches à faire ...
--
Eric

Eléphanteau du PHP | 38 Messages

10 déc. 2010, 17:27

En fait

j'ai ma table principale qui reprend nom prenom date de naissance avec plein de nom

J'aimerais coller dans mon textaera une liste

nom prenom

et que le résultats me donne

nom prenom date de naissance


LIGNE 1 du textarea: Nom prenom 1
LIGNE 2 du textaera: Nom prenom 2

et qu'ensuite je puisse faire la correspondance entre ma table et mon textarea pour trouver les date de naissance des individus collés dans le textarea

Eléphant du PHP | 209 Messages

10 déc. 2010, 18:56

Ok, dans ce cas, lorsque tu récupère le contenu de ton textarea, essaye ceci :
$tab = explode("\n",$data);

foreach($tab as $nomPrenom){
//Faire la requête SQL précédente sur nomPrenom
}

--
Eric

Eléphanteau du PHP | 38 Messages

10 déc. 2010, 22:05

Ahhhh mais que je suis bête (je débute) un explode ....

Merciiiiii ça oriente carrément ma recherche !!!!!
Bon allez au boulot ;)

Eléphanteau du PHP | 38 Messages

11 déc. 2010, 00:12

Bon petit soucis ..... il ne me renvoit que la dernière ligne ... étrange ....

<HTML>
<form name='liste' method='post' action=''>
<textarea name='liste' cols='60' rows='20'></textarea>
<input type='submit' name='Submit' value='Envoyer'>
</form>
</HTML>


<?php

include 'connectbase.php';
conectbase();

$data=trim($_POST['liste']); 

$tab = explode("\n",$data);

foreach($tab as $nomPrenom)
{
$reponse=mysql_query("SELECT * FROM licences JOIN clubs ON licences.club = clubs.club WHERE CONCAT (Nom,' ',Prenom)='$nomPrenom'")or die (mysql_error ());
}


while($data=mysql_fetch_array($reponse))
{
echo ''.$data['Nom'].' '.$data['Prenom'].' '.$data['Naissance'].' '.$data['usuelclub'].'<br/></br>';
}
echo '<a href="exportliste.php">Exporter resultats</a>'
?>

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

11 déc. 2010, 01:17

a vue de nez je dirais que c'est normal vu qu'il ne peut y avoir qu'un seule tuple avec cette requete (il n'y a qu'une licence qui a le couple nom/ prenom).

il te faut boucler sur les lignes insérées dans la textarea !

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 38 Messages

11 déc. 2010, 02:10

J'avais pensé a une boucle for
En gros j'utulise un count pour compter le nombre de ligne
et utiliser une boucle for
Ou alors pourquoi pas insérer les résultats dans une table
je vais essayer ça rapidos

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

11 déc. 2010, 02:12

heu nan tu met ça : echo ''.$data['Nom'].' '.$data['Prenom'].' '.$data['Naissance'].' '.$data['usuelclub'].'<br/></br>'; dans le foreach (avec le $data= mysql_fecth_assoc aussi hein ;) )

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 38 Messages

11 déc. 2010, 02:52

J'ai essayé en changeant les accolades mais rien
voilà un nouveau code
<?php

include 'connectbase.php';
conectbase();

$data2=$_POST['liste']; 

$tab = explode("\n ",$data2);


$nblignes=count($tab);
for ($i=0;$i<=$nblignes;$i++)

{
$reponse=mysql_query("INSERT INTO liste SELECT Nom, Prenom FROM licences JOIN clubs ON licences.club = clubs.club WHERE CONCAT (Nom,' ',Prenom)='$tab[$i]'")or die (mysql_error ());
echo $tab[$i].'</br>';

}



echo '<a href="exportliste.php">Exporter resultats</a>'
?>
le echo a la fin c'était pour vérifier mes valeurs retournée et en fait j'ai remarqué qu'il y a un espace de trop pour toutes les entrées du texte area en fin de ligne SAUF pour la dernière ligne ....

j'ai bien essayé la fonction trim mais bon ... rien donné ...