Page 1 sur 1

comparer un tableau et une table mysql

Posté : 02 avr. 2007, 12:02
par Mathieu
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

Posté : 02 avr. 2007, 12:30
par guilt92
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
}

Posté : 02 avr. 2007, 12:31
par Ryle
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 :)

Posté : 02 avr. 2007, 12:48
par Expreg
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

Posté : 02 avr. 2007, 13:50
par Mathieu
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

Posté : 02 avr. 2007, 13:56
par Cyrano
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 :)

Posté : 02 avr. 2007, 15:42
par Expreg
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:

Posté : 02 avr. 2007, 15:48
par Ryle
Une bière bien fraiche ? ;)