web-dev-qa-db-fra.com

Comment appeler un PHP fichier HTML ou Javascript

J'ai longtemps regardé autour de moi et je ne trouve aucun endroit qui réponde à cette question apparemment fondamentale. Peu m'importe si la page recharge ou affiche les résultats immédiatement; Je veux juste qu'un bouton sur mon site fasse un fichier PHP. C'est tout. Et j'ai constaté que tous les sites Web vous expliquent comment utiliser directement le code PHP dans votre code HTML ou vous demandent d'utiliser ajax. J'utiliserai ajax si cela s'avère nécessaire, mais il y avait eu un temps, avant l'existence de ajax, où PHP était utilisé, donc je pense qu'il existe un moyen plus simple. Si je peux très bien écrire le code dans HTML, pourquoi ne puis-je pas simplement référencer le fichier dans celui-ci ou en faire un simple appel en Javascript?

S'il s'avère que l'ajax est le seul moyen d'avancer, que dois-je savoir à ce sujet pour appeler un fichier PHP qui créera un fichier texte lors d'une pression sur un bouton? Je fais un site de blog simple pour moi-même et j'ai le code pour le site et le javascript qui peut prendre le message que j'écris dans une variable textarea et l'afficher immédiatement. Je veux juste le lier à un fichier PHP qui créera la publication de blog permanente sur le serveur afin que, lorsque je recharge la page, la publication soit toujours là. 

Merci d'avoir pris le temps de lire et de répondre.

12
Jackery

Comment faire un bouton appeler PHP?

Peu m'importe si la page recharge ou affiche les résultats immédiatement;

Bien!

Note: Si vous ne voulez pas rafraîchir la page, voir "Ok ... mais comment puis-je utiliser Ajax quand même?} _" Ci-dessous.

Je veux juste qu'un bouton sur mon site fasse un fichier PHP.

Cela peut être fait avec un formulaire avec un seul bouton:

<form action="">
  <input type="submit" value="my button"/>
</form>

C'est tout.

Plutôt. Notez également qu'il existe des cas où l'ajax est vraiment la voie à suivre.

Cela dépend de ce que vous voulez. En termes généraux, vous n'avez besoin d'ajax que lorsque vous souhaitez éviter de recharger la page. Vous avez toujours dit que vous vous en ficheiez.


Pourquoi je ne peux pas appeler PHP directement à partir de JavaScript?

Si je peux très bien écrire le code dans HTML, pourquoi ne puis-je pas simplement référencer le fichier dans celui-ci ou en faire un simple appel en Javascript?

Parce que le code PHP n'est pas dans le HTML just fine. C'est une illusion créée par le fonctionnement de la plupart des langages de script côté serveur (y compris PHP, JSP et ASP). Ce code n'existe que sur le serveur et il n'est pas possible d'atteindre le client (le navigateur) sans un appel distant quelconque.

Vous pouvez en voir la preuve si vous demandez à votre navigateur de montrer le code source de la page. Là, vous ne verrez pas le code PHP, car le code PHP n'est pas envoyé au client, il ne peut donc pas être exécuté à partir du client. C'est pourquoi vous devez effectuer un appel à distance pour que le client puisse exécuter l'exécution du code PHP.

Si vous n'utilisez pas de formulaire (comme indiqué ci-dessus), vous pouvez effectuer cet appel distant à partir de JavaScript avec une petite chose appelée Ajax. Vous voudrez peut-être aussi savoir si ce que vous voulez faire dans PHP peut être fait directement en JavaScript.


Comment appeler le fichier autre _ PHP?

Utilisez un formulaire pour faire l'appel. Vous pouvez l'avoir pour diriger l'utilisateur vers un fichier particulier:

<form action="myphpfile.php">
  <input type="submit" value="click on me!">
</form>

L'utilisateur se retrouvera dans la page myphpfile.php. Pour que cela fonctionne pour la page en cours, définissez action sur une chaîne vide (comme je l’ai déjà fait dans l’exemple que je vous ai donné plus tôt).

Je veux juste le lier à un fichier PHP qui créera la publication de blog permanente sur le serveur afin que, lorsque je recharge la page, la publication soit toujours là.

Si vous souhaitez effectuer une opération sur le serveur, vous devez faire en sorte que votre formulaire comporte les champs dont vous avez besoin (même si type="hidden" et que vous utilisez POST):

<form action="" method="POST">
  <input type="text" value="default value, you can edit it" name="myfield">
  <input type="submit" value = "post">
</form>

Que dois-je savoir à ce sujet pour appeler un fichier PHP qui créera un fichier texte lors d’une pression sur un bouton?

voir: Comment écrire dans un fichier dans PHP .


Comment recevez-vous les données du POST sur le serveur?

Je suis content que tu demandes ... Depuis que tu es un newb débutant, je vais vous donner un petit modèle que vous pouvez suivre:

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    {
        //Ok we got a POST, probably from a FORM, read from $_POST.
        var_dump($_PSOT); //Use this to see what info we got!
    }
    else
    {
       //You could assume you got a GET
       var_dump($_GET); //Use this to see what info we got!
    }
 ?>
 <!DOCTYPE html>
 <html lang="en">
   <head>
     <meta char-set="utf-8">
     <title>Page title</title>
   </head>
   <body>
     <form action="" method="POST">
       <input type="text" value="default value, you can edit it" name="myfield">
       <input type="submit" value = "post">
     </form>
   </body>
 </html>

Note: vous pouvez supprimer var_dump, c'est uniquement à des fins de débogage.


Comment puis-je ...

Je sais que la prochaine étape, vous demanderez comment:

  1. comment passer des variables forment un fichier PHP à un autre?
  2. comment se souvenir de l'utilisateur/se connecter?
  3. comment éviter ce message ennuyeux lorsque vous rechargez la page?

Il n'y a qu'une seule réponse à cela: les sessions.

Je donnerai un modèle plus complet pour Post-Redirect-Get

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    {
        var_dump($_PSOT);
        //Do stuff...
        //Write results to session
        session_start();
        $_SESSION['stuff'] = $something;
        //You can store stuff such as the user ID, so you can remeember him.
        //redirect:
        header('Location: ', true, 303);
        //The redirection will cause the browser to request with GET
        //The results of the operation are in the session variable
        //It has empty location because we are redirecting to the same page
        //Otherwise use `header('Location: anotherpage.php', true, 303);`
        exit();
    }
    else
    {
        //You could assume you got a GET
        var_dump($_GET); //Use this to see what info we got!
        //Get stuff from session
        session_start();
        if (array_key_exists('stuff', $_SESSION))
        {
           $something = $_SESSION['stuff'];
           //we got stuff
           //later use present the results of the operation to the user.
        }
        //clear stuff from session:
        unset($_SESSION['stuff']);
        //set headers
        header('Content-Type: text/html; charset=utf-8');
        //This header is telling the browser what are we sending.
        //And it says we are sending HTML in UTF-8 encoding
    }
 ?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta char-set="utf-8">
    <title>Page title</title>
  </head>
  <body>
    <?php if (isset($something)){ echo '<span>'.$something.'</span>'}?>;
    <form action="" method="POST">
      <input type="text" value="default value, you can edit it" name="myfield">
      <input type="submit" value = "post">
    </form>
  </body>
</html>

S'il vous plaît regardez php.net pour tout appel de fonction que vous ne reconnaissez pas. De plus, si vous ne l'avez pas déjà fait, procurez-vous un bon tutoriel sur HTML5.

Utilisez également UTF-8 car UTF-8 !


Remarques:

Je fais un site de blog simple pour moi-même et j'ai le code pour le site et le javascript qui peut prendre le post que j'écris dans un textarea et l'afficher immédiatement.

Si vous utilisez un CMS (Codepress, Joomla, Drupal ... etc)? Cela fait peser des contraintes sur la façon de faire les choses.

De plus, si vous utilisez un framework, vous devriez consulter leur documentation ou demander à leur forum/liste de diffusion/page de discussion/contact ou essayer de demander aux auteurs.


Ok ... mais comment utiliser Ajax quand même?

Eh bien ... Ajax est rendu facile par certaines bibliothèques JavaScript. Puisque vous êtes un débutant, je recommanderai jQuery .

Donc, envoyons quelque chose au serveur via Ajax avec jQuery, je vais utiliser $ .post au lieu de $ .ajax pour cet exemple.

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    {
        var_dump($_PSOT);
        header('Location: ', true, 303);
        exit();
    }
    else
    {
        var_dump($_GET);
        header('Content-Type: text/html; charset=utf-8');
    }
 ?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta char-set="utf-8">
    <title>Page title</title>
    <script>
        function ajaxmagic()
        {
            $.post(                             //call the server
                "test.php",                     //At this url
                {
                    field: "value",
                    name: "John"
                }                               //And send this data to it
            ).done(                             //And when it's done
                function(data)
                {
                    $('#fromAjax').html(data);  //Update here with the response
                }
            );
        }
    </script>
  </head>
  <body>
    <input type="button" value = "use ajax", onclick="ajaxmagic()">
    <span id="fromAjax"></span>
  </body>
</html>

Le code ci-dessus enverra une demande POST à la page test.php.

_ {Note _: Vous pouvez mélanger sessions avec ajax et d'autres choses si vous le souhaitez.


Comment puis-je ...

  1. Comment puis-je me connecter à la base de données?
  2. Comment puis-je empêcher l'injection SQL?
  3. Pourquoi ne devrais-je pas utiliser les fonctions Mysql_ *?

... pour ceux-ci ou pour un autre, veuillez poser une autre question. C'est trop pour celui-ci.

51
Theraot

Je veux juste avoir un bouton sur mon site Web pour faire un PHP exécution du fichier

<form action="my.php" method="post">
    <input type="submit">
</form>

En règle générale, toutefois, vous ne devez utiliser qu'un lien, à moins d'envoyer de nouvelles données au serveur.

<a href="my.php">run php</a>

(Bien que vous deviez utiliser un texte de lien décrivant ce qui se passe du point de vue de l'utilisateur, pas des serveurs)


Je fais un site de blog simple pour moi-même et j'ai le code pour le site et le javascript qui peut prendre le post que j'écris dans un textarea et l'afficher immédiatement. Je veux juste le lier à un fichier PHP qui créera la publication de blog permanente sur le serveur afin que, lorsque je recharge la page, la publication soit toujours là.

C'est plus difficile. 

Tout d’abord, vous devez utiliser un formulaire et POST (puisque vous envoyez des données à stocker).

Ensuite, vous devez stocker les données quelque part. Cela se fait normalement en utilisant une base de données. Consultez la bibliothèque PDO pour PHP. C'est le moyen standard d'interagir avec les bases de données.

Ensuite, vous devez extraire à nouveau les données. La méthode la plus simple consiste à utiliser la chaîne de requête pour transmettre la clé primaire de la ligne de base de données avec l’entrée que vous souhaitez afficher.

<a href="showBlogEntry.php?entry_id=123">...</a>

Assurez-vous également de lire sur l'injection SQL et XSS.

0
Quentin

Comme vous l'avez déjà indiqué dans votre question, vous avez plus d'une option. Une approche très basique consiste à utiliser la balise référençant votre fichier PHP dans l'attribut de méthode. Cependant, aussi ésotérique que cela puisse paraître, AJAX est une approche plus complète. Considérant qu'un appel AJAX (en combinaison avec jQuery) peut être aussi simple que:

$.post("yourfile.php", {data : "This can be as long as you want"});

Et vous obtenez une solution plus flexible, par exemple en déclenchant une fonction une fois la requête du serveur terminée. J'espère que cela t'aides.

0
ferret96

Il vous suffit de poster les données du formulaire dans la fonction Insérer un fichier php, voir ci-dessous :)

class DbConnect
{
// Database login vars
private $dbHostname = '';
private $dbDatabase = '';
private $dbUsername = '';
private $dbPassword = '';
public $db = null;

public function connect()
{

    try
    {
        $this->db = new PDO("mysql:Host=".$this->dbHostname.";dbname=".$this->dbDatabase, $this->dbUsername, $this->dbPassword);
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {
        echo "It seems there was an error.  Please refresh your browser and try again. ".$e->getMessage();
    }
}

public function store($email)
{
    $stm = $this->db->prepare('INSERT INTO subscribers (email) VALUES ?');
    $stm->bindValue(1, $email);

    return $stm->execute();
}
}
0
Luke