[RESOLU] Un métro de retard avec AJAX

Eléphant du PHP | 138 Messages

03 mars 2019, 08:24

Couiiin ! :)

Nouvelle énigme du canard !

Voilà, en gros, j'ai une liste de dédicaces dans le panneau d'admin du site.
Chaque dédi a son IP.

Malheureusement, il y a toujours des boulets qui font que j'ai quelques IP fixes à bannir.

Du coup, j’ai ajouté un point vert devant chaque IP .
Quand je clique sur le point, ca déclenche une fonction que voici :

Code : Tout sélectionner

function ipban(status,ip) { if ( status == 0 ) { toset = 1; icofile = "red.png"; } else { toset = 0; icofile = "green.png"; } $.ajax({ type: 'POST', url: 'ipbanchange.php?type=dedis', data: { ipaddress: ip , value: toset }, success: function(data){ idarray = data.idarray; ipadd = data.ipadd; } }); idarray.forEach(function(idto) { document.getElementById("ipico_" + idto).src = icofile; }); }
La page php appelée :

Code : Tout sélectionner

header('Content-Type: text/json; charset=UTF-8'); $ipaddress = $_POST['ipaddress']; $idarray = array(); $sql = "SELECT id FROM dedis WHERE address LIKE '$ipaddress'"; $requete = mysqli_query( $dbwrite, $sql ); while( $result = mysqli_fetch_object( $requete ) ) { $idarray[] = $result->id; } $sql = "SELECT COUNT(*) AS YES FROM ipban WHERE ipaddress LIKE '$ipaddress'"; $requete = mysqli_query( $dbwrite, $sql ); $result = mysqli_fetch_object( $requete ); $YES = $result->YES; if ( $_GET['type'] == 'dedis' ) { $value = $_POST['value']; if ( $YES != 0 ) { $sql = "UPDATE ipban SET dedis = '$value' WHERE ipaddress = '$ipaddress'"; } else { $sql = "INSERT INTO ipban SET dedis = '$value', ipaddress = '$ipaddress'"; } mysqli_query( $dbwrite, $sql ); } $data = array( 'idarray' => $idarray, 'ipadd' => $ipaddress ); exit(json_encode($data));
Le clic sur l'image appelle la fonction ipban, avec comme paramètre , le statut (si IP bannie ou non) et l'IP .
Si l'IP n'est pas bannie, une variable (toset) est définie sur 1, le nom de fichier image du point (icofile) est défini sur red.png .
Si l'IP est bannie, la variable toset est définie sur 0, icofile est défini sur green.png .
Ensuite, j'appelle la page php via ajax, en envoyant l'IP et le statut de bannissement (toset) à lui appliquer.

La page PHP récupère l'IP et le statut, rempli un array avec les ID des dédis ayant cette IP.
Ensuite, on regarde si cette IP existe dans la table ipban (c'est juste pour savoir si on fait un insert ou un update en fait), puis on ajoute ou modifie la valeur de bannissement dans la table.

La page php envoie en finalité, un array data, comprenant le array d'ID rempli plus haut et (ca c'est pour tests) l'IP que la page a reçu depuis Ajax.

De retour sur l'Ajax, je récupère les ID et l'IP . Pour chaque ID, je change le src de l'image (pour que toutes les dédis ayant la même IP aient le point qui change de couleur).

Pourquoi les tests ? Bien parce que cela marche pas.
En fait, tout est décalé d'un cran.

Sur la partie HTML, j'affiche (pour les tests) , une première ligne avec l'IP envoyée et une ligne en dessous avec l'IP revenue.
Au premier clic , voici le résultat affiché (les IP sont au pif pour l'exemple) :

Code : Tout sélectionner

Envoi 188.175.238.153 Retour
Deuxième clic :

Code : Tout sélectionner

Envoi 78.129.251.42 Retour 188.175.238.153
Troisième clic :

Code : Tout sélectionner

Envoi 109.28.248.146 Retour 78.129.251.42
Ainsi de suite...

Forcément, de là, rien ne peut marcher correctement.

Par contre, je ne comprends absolument pas se décalage d'un cran ?

Si quelqu'un a une idée, je suis preneur :)

Merki :)
Couin
Un Couin vaut mieux que Deux tu couineras :D

Eléphant du PHP | 138 Messages

04 mars 2019, 03:40

Pouik !

Alors en mettant le foreach dans la zone Ajax, , il n'y a plus le décalage .
Je mets donc en résolu mais par contre ca ne me dit pas pourquoi ca décalait d'un cran quand c'était à la suite d'Ajax .

Si quelqu’un a une réponse , afin que je puisse mourir (un peu) moins bête lol

Merki
Un Couin vaut mieux que Deux tu couineras :D