11485 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

je me demandais comment faire pour soit envoyer une requête ajax, soit envoyer une requête PHP.

Dans un cas, quand je compte envoyer une requête ajax, c'est parce que je n'ai pas besoin de recharger la page. Dans l'autre cas, où je compte envoyer une requête PHP, le but est donc d'appler une autre page PHP et une fois que le traitement est terminé, je compte rappeler la page originale.

Merci d'avance pour votre aide.

Bonne soirée
Thierry
Bonjour Niuxe,

tout d'abord, merci pour votre réponse.

En fait, j'ai un menu déroulant avec les différentes actions qui sont possibles sur un article (supprimer, éditer, ...).

Pour certaines actions, j'aimerais bien exécuter une requête asynchrone (ajax) afin que la page PHP ne soit pas rechargée. Dans ce cas-ci, j'appelerais une page PHP qui viendrait faire une mise à jour au niveau de la DB et pour le retour ajax, il viendrait simplement supprimer l'article (la div dans laquelle l'article se trouve) sans recharger la page.
Pour d'autres actions, j'appelerais cette même page PHP mais dans le cadre de ces actions-là, je serais obligé de recharger la page d'origine car comme il y a eu des changements dans la DB, ce ne serait pas possible de retourner sur la page d'origine sans la recharger.
tout d'abord, merci pour votre réponse.

En fait, mon but est d'appeler la même page PHP que ce soit dans le cadre d'un appel ajax ou d'un appel php.

Dans ma page PHP que j'appelle dans les 2 cas de figure, j'ai une fonction pour tester si c'est de l'Ajax :


function isAjax()
{
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']);
}


Donc, je me demandais comment faire pour faire un appel ajax ou php à partir de mon script javascript ?

Merci d'avance

Bonne soirée
Thierry
Modérateur
C'est toujours pas explicite mais je connais un peu où tu en es.

Si j'étais toi, je ferai simple ! Si tu ne connais pas bien le sujet, c'est le mur assuré. Pour l'Ajax, tu n'es pas obligé pour le moment et c'est surtout une surcouche. Ça ne change pas grand chose. bref, pour ton delete :

1. À chaque itération de ta liste d'articles, tu lui colles un id. Cette id fait parti de l'url. On appelle ça une querystring ou passer des paramètres/valeurs dans l'url. regarde ce que je t'ai écris dans ce message

2. sur ce lien (avec la querystring), tu vas rajouter un comportement JS basique. Une popin basique indiquant à l'utilisateur, s'il veut bien supprimer cet article.
écriture crade mais qui devrait fonctionner :

<a onclick="confirm('voulez vous vraiment supprimer cet article ?')" href="delete.php?id=<?= $row->id ?>">Supprimer</a>

code fait de tête. Je peux m'être trompé. C'est une piste à suivre

3. Dans ton fichier delete.php, tu vérifies que tu reçois bien l'id via la superglobale $_GET. Après avoir vérifié cela, tu supprimes en base (Je pars du principe que tes données viennent de la base de données) . C'est un truc comme :

<?php 
    //connection à la base de données avec pdo (https://www.php.net/manual/fr/book.pdo.php)
    // ....
    // ....

    if(!empty($_GET['id']) && is_numeric($_GET['id'])){
        $sql = "
            DELETE FROM 
                une_table
            WHERE 
                id = :id
        ";
        $params = [
            'id' => $_GET['id']
        ];
        $query = $pdo->prepare($sql);
        $query->execute($params);
    }
    //redirection vers la page initiale
    header('location:'.$_SERVER['HTTP_REFERER']);
?>

code fait de tête. Je peux m'être trompé. C'est une piste à suivre

Je pars du principe que le code que je viens de te filer ne doit pas être publique. Si c'est le cas, c'est un code très sommaire et dans ce cas là, il va falloir le protéger (filtrer les données, un md5, etc.).

<<<EDIT
À noter que le code que tu as mis dans ton post précédent ne fonctionne pas toujours. la clef n'est pas toujours disponible suivant la config du serveur. De plus, lorsque l'on fait une requête ajax en utilisant ce genre de chose, il va falloir envoyer dans le header des paramètres supplémentaires.

lien annexe : http://phpdebutant.org/

EDIT;
Modifié par niuxe (17 Jul 2019 - 21:52)
Modérateur
Sinon c'est une fausse bonne idée appeler la même page pour une requête ajax et un appel standard.

Ta requête ajax peut rapidement se complexifier avec diverses données, ta page php ressemblera vite à un cauchemar sur pattes.

Garde des cibles et des URLs distinctes pour des retours de nature distincte, c'est une bonne pratique.

Après si tu as des éléments communs, rien ne t'empêche de ne les écrire qu'une fois et de les appeler des deux côtés grâce à des fonctions ou des includes.
kustolovic a écrit :
Sinon c'est une fausse bonne idée appeler la même page pour une requête ajax et un appel standard.

Ta requête ajax peut rapidement se complexifier avec diverses données, ta page php ressemblera vite à un cauchemar sur pattes.


C'est pour ça qu'il faut modulé son architecture ! Smiley langue