2009-09-22 7 views
5

J'essaie d'obtenir une chaîne de php pour décomposer en mots, rechercher dans une base de données, puis ajoutez les résultats dans une autre base de données ..briser les cordes avec exploser et foreach

J'ai actuellement la chaîne comme ce

"SDGCC, ARISE, SDGFS"

Je veux rechercher dans les balises de login table pour balises comme ces mots j'utilise ce

SELECT * FROM logintagstag LIKE « % string% »

de sorte que chaque étiquette est tirée de la chaîne que j'ai essayé d'utiliser explosera et foreach, mais il ne semble pas obtenir l'effet désiré.

$ chaîne = $ _POST ['tags'];

$ tags = exploser (',' $ chaîne);

foreach ($ balises as $ key) {

$ query = mysql_query ("SELECT * FROM dept_logintagstag LIKE '%" $ key "%.'."); $ r = mysql _fetch _object ($ query);

insert $ = mysql_query ("INSERT INTO briefings_logintags (id, briefing_id, logintag_id) VALUES (NULL, '$ id', '" ")" $ r-> id..);

}

l'effet que je suis en train de créer est pour chaque balise créer une référence entre l'identifiant de l'étiquette et l'ID d'information ...

Cependant, il semble que la mise à une entrée correcte dans la base de données.

Répondre

3

S'il y a un espace après la virgule dans votre chaîne d'origine, alors explode() retournera quelque chose comme ["SDGCC", "ARISE", "SDGFS"].

Cela entraînera votre clause LIKE à correspondre uniquement au premier mot. Essayez d'utiliser trim():

$word=trim($key); 
$safe=mysql_real_escape_string($word); 
$query=mysql_query("SELECT * FROM dept_logintags WHERE tag LIKE '%".$safe."%'"); 

EDIT: Comme mentionné Artelius, toujours échapper à des données soumises par les utilisateurs pour éviter l'injection SQL.

24

Essayez

$tags = explode(',',$string); 

foreach($tags as $key) {  
    echo '"'.$key.'"<br/>';  
} 

Je pense que vous obtenez un espace avant et ARISE SDGFS.

Aussi, assurez-vous toujours escape strings correctement avant de les mettre dans les requêtes MySQL !! Sinon, quelqu'un peut envoyer une entrée viciée à votre serveur et faire des ravages sur votre base de données. (Ceci s'appelle un SQL injection.)

+0

Devrait être la réponse acceptée. – Sandhu

-6

S'il vous plaît, pour l'amour d'Internet, ne construisez pas vous-même une requête SQL. Utilisez PDO.