Bonjour, je suis en ce moment en Stage dans une entreprise et mon mentor me donne des taches a faire. Ce qu'il me demande est simple.

Je suis entrain de crée un plugin Wordpress, et ce que je dois faire c'est: une fois que une de mes pages sur wordpress son refresh, cela doit prendre mon adresse ip, la date + heure et le lien de la page ou on a refresh. Et puis cela l'afficher dans mon plugin.

Voici mon code pour le moment:

/
Plugin Name: Plugin
Author: Quentin Houiller
Description: Premier plugin pour le stage
Version: 1.0.0
/
add_action('admin_menu','admin_menu');

function admin_menu(){
    add_menu_page(
        'Home',     //page title
        'Home',     //Menu title
        'manage_options',   //capability
        'admin_menu',   //slug 
        'home1'     //callable function (appeller la fonction)

    );

    add_submenu_page(
        'admin_menu',
        'settings',
        'Settings',
        'manage_options',
        '',
        'setting1'

    );
}

function home1()
{
    $_SERVER['HTTP_REFERER'];
    $ip = $_SERVER['REMOTE_ADDR'];
    $heure = date("h:i:s");
    $web = $_SERVER['SCRIPT_FILENAME'];

    ?>
    <table border="1">
        <tr>
            <td width="100">
                IP
            </td>
            <td width="50">
                date
            </td>
            <td width="400">
                page web
            </td>
        </tr>

    <?php
    $servername = 'localhost:3306';
    $user = 'root';
    $dbname= 'informations';
    $pass = '';

    $conn = new mysqli($servername, $user, $pass, $dbname);

    if ($conn->connect_error) 
    {
        die('Connexion perdu ' .$conn->connect_error);
    }else{
        echo 'connexion réussi !' . "<br>" . "<br>";
    }

    $resultat =$conn->query("SELECT * FROM test1"); //query = prepare
    if ($resultat->num_rows > 0) {
        // output data of each row
        while($row = $resultat->fetch_assoc()) {
        ?>
    <tr>
        <td>
            <?php echo $row["ip"]?>
        </td>
        <td>
            <?php echo $row["date"] . "<br>" . $heure?>
        </td>
        <td>
            <?php echo $row["web"]?>
        </td>
    <tr>
        <?php
        }
    }
    ?>
    </table>

    Ce qu'il me manque maintenant c'est d'avoir une fonction que une fois que je refresh ca envoie les données dans la BDD. 

    J'ai essayer avec la fonction header comme ce si: 

    header("Location: http://localhost/wordpress1/");

    if (header('Refresh:0; url=http://localhost/wordpress1/')) 
    {
        $insertion = "INSERT INTO informations (ip, datee, web,) VALUES ($ip . $heure . $web) ";
    }

    Mais cela ne fonctionne pas, voici ce que l'erreur me mets:  Warning: Cannot modify header information - headers already sent by (output started at C:\wamp64\www\wordpress1\wp-includes\script-loader.php:2585) in C:\wamp64\www\wordpress1\wp-content\plugins\premierplugin\home.php on line 93

    Sauriez-vous m'aider ? 

    Cordialement Quentin

1 réponse


Salut,

Les en-têtes (header) sont envoyées avant le contenu HTML, c'est pour ça que tu ne peux pas mettre de header après du contenu HTML.
Ce qu'il faut que tu faces, c'est qu'à chaque chargement d'une page, tu inserts ta ligne de log en bdd.

Renseigne toi aussi côté RGPD/CNIL, je suis pas en pro là dedans, mais stocker des ip doit se faire dans les règles.