comparer un tableau et une table mysql

Petit nouveau ! | 2 Messages

02 avr. 2007, 12:02

Bonjour à tous

Je cherche a vérifier s'il n'y a pas de gros mots saisis dans un textarea de formulaire,
pour cela je fais un tableau avec le contenu du textarea comme ça:
$tableau1 = explode(" ",$letexte);

J'ai par ailleur une table mysql avec une liste de mots interdits que j'ai créé comme ça:
CREATE TABLE interdit (
lesmots TEXT
);

j'essai de faire un tableau avec ma table mysql comme ça:
$requete = "SELECT * FROM interdit";
$resultat = mysql_db_query ($nombase, $requete, $lien);
$tableau2 = mysql_fetch_array($resultat);

puis j'utilise ce code pour comparer les deux tableaux:
for($i = 0; $i < count($tableau1); $i++)
{
if (in_array($tableau1[$i],$tableau2))
{
echo "mot interdit";
}

}

Le probleme c'est que cela ne fonctionne qu'avec le premier mot interdit de ma table mysql

Avez vous une idée pour me dépanner

Merci d avance
Mathieu

Mammouth du PHP | 1353 Messages

02 avr. 2007, 12:30

Bonjour,

ceci est tout a fait logique, il faut que tu boucles autour du mysql_fetch_array pour parcourir les résultats. En effet mysql_fetch_array() te renvoie le premier résultat, si tu veux avoir les suivants il faut refaire un mysql_fetch_array...

Je te conseille la boucle
while ($tableau2 = mysql_fetch_array($resultat)) {
//ta comparaison
}
Modifié en dernier par guilt92 le 02 avr. 2007, 12:32, modifié 2 fois.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

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

02 avr. 2007, 12:31

C'est normal, la fonction mysql_fetch_array() ne te retourne que le premier enregistrement trouvé, puis place son pointeur sur le prochain. Il te faut donc boucler dessus pour lire tous les enregistrement qu'elle contient :
while ($row = mysql_fetch_array($resultat)) {
  $tableau2[] = $row['ton_champ'];
} 
Mais il y a sans doute des façons plus optimisées de faire cette comparaison :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 170 Messages

02 avr. 2007, 12:48

Le test des gros mots dans un zone de texte n'est pas très efficace.
Néanmoins, une méthode est plus efficace que les autres mais passe par les expressions régulières.
Source 1 et 2 à adapter à tes besoins
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Petit nouveau ! | 2 Messages

02 avr. 2007, 13:50

Super :-)

Merci ça marche !!
mais il faut rajouter exit; pour arrêter la boucle sinon j'ai autant de echo mots interdit qu'il ya de comparaisons positives.

Je vais m'interesser aux regex pour voir, j adore apprendre

Mathieu

Mammouth du PHP | 19672 Messages

02 avr. 2007, 13:56

Je vais m'interesser aux regex pour voir, j adore apprendre
C'est une excellente idée. Les regex ne sont pas forcément la solution à tout et n'importe quoi, mais ça permet en revanche beaucoup de choses et c'est très puissant. J'ajoute qu'on ne les utilise pas uniquement en PHP : tu trouveras les regex également en SQL ou en JavaScript. L'apprentissage est parfois un peu ardu, mais une fois assimilés les principes de base, tu verras que ça ouvre des perspectives de traitement beaucoup plus simples :)

Fais le tour des tutos, il y a ceux de expreg ainsi que ceux de Ripat (sur le site de PHPFrance) et de Naholyr (lien dans le tuto de Ripat) : avec tout ça, tu devrais trouver ton chemin :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 170 Messages

02 avr. 2007, 15:42

Fais le tour des tutos, il y a ceux de expreg ainsi que ceux de Ripat (sur le site de PHPFrance) et de Naholyr (lien dans le tuto de Ripat) : avec tout ça, tu devrais trouver ton chemin :)
Et sur expreg, il y a même, et aussi, un lien vers les tutos de Ripat et de Naholyr.
Qu'est ce que le peuple demande de plus ? :wink:
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

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

02 avr. 2007, 15:48

Une bière bien fraiche ? ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...