Page 1 sur 1

séparer classe du reste du php

Posté : 01 oct. 2019, 10:52
par Newb
J'ai un code, register.php dont la fonction sera d'insérer des infos dans une DB (via des POST qui ne figurent pas encore dans le code, c'est normal). Voici les instruction de mon maître de stage (que j'ai moyennement comprises) :

"" Ajouter les vérifications et les retours.
Je m'explique:
Il me faudrait une page à part en php qui recevrait les infos email, nom et prénom.
En gros, reprendre le contenu mis en dehors de la classe et le mettre à part
Ce fichier appellerait la classe d'enregistrement et la fonction d'enregistrement, donc on lui passe les infos en paramètres dans la fonction.

étape 1 : séparer la classe et le reste du php en 2 fichiers
étape 2 : mettre les retours d'erreur avec la classe Report ""

C'est un peu vague pour moi (très débutant).
Quelqu’un d'autre peut-être, comprendrais mieux la demande et pourrait m'aider à la comprendre? et des pistes a creuser pour l'accomplir?

Voici le code d'origine:


<?php
class Registration
{
public $variable = "test";
function RegisterUser($email, $name, $firstName )
{
echo($score);

$config = array(
"db" => "mysql:host=127.0.0.1;dbname=db_datasystem",
"username" => "root",
"password" => ""
);

$db = new PDO($config["db"], $config["username"], $config["password"]);

$sql = "INSERT INTO t_users ( u_email, u_name, u_firstname) VALUES(:useremail, :username, :userfirstname)";

$q = $db->prepare($sql);
$q->bindParam("useremail", $email, PDO::PARAM_STR);
$q->bindParam("username", $name, PDO::PARAM_STR);
$q->bindParam("userfirstname", $firstName, PDO::PARAM_STR);

if($q->execute())
{
echo("ok");
}
else
{
echo("not ok");
}
$q->closeCursor();
}
}

$registration = new Registration();

$myEmail = "[email protected]";
$myName = "Th";
$myFirstName = "Fr";

$registration->RegisterUser($myEmail, $myName, $myFirstName);
$registration->RegisterUser("[email protected]", $myName, $myFirstName);

$myEmail = "[email protected]";

?>

Re: séparer classe du reste du php

Posté : 01 oct. 2019, 11:55
par Naroth
Bonjour,

L'idée est de te retrouver avec deux fichiers .php :

Le premier contiendra uniquement la classe :
class Registration
{
    public $variable = "test";
    function RegisterUser($email, $name, $firstName )
    {
        echo($score);

        $config = array(
            "db" => "mysql:host=127.0.0.1;dbname=db_datasystem",
            "username" => "root",
            "password" => ""
        );

        $db = new PDO($config["db"], $config["username"], $config["password"]);

        $sql = "INSERT INTO t_users ( u_email, u_name, u_firstname) VALUES(:useremail, :username, :userfirstname)";

        $q = $db->prepare($sql);
        $q->bindParam("useremail", $email, PDO::PARAM_STR);
        $q->bindParam("username", $name, PDO::PARAM_STR);
        $q->bindParam("userfirstname", $firstName, PDO::PARAM_STR);

        if($q->execute())
        {
            echo("ok");
        }
        else
        {
            echo("not ok");
        }
            $q->closeCursor();
    }
}

Le deuxième contiendra le reste :
$registration = new Registration();

$myEmail = "[email protected]";
$myName = "Th";
$myFirstName = "Fr";

$registration->RegisterUser($myEmail, $myName, $myFirstName);
$registration->RegisterUser("[email protected]", $myName, $myFirstName);

$myEmail = "[email protected]";

Pour réaliser ça je te conseille de regarder du côté de include : https://www.php.net/manual/fr/function.include.php
Bien sur en l'état ça ne marchera surement pas. Il y aura sans doute des petites modifications à effectuer

Re: séparer classe du reste du php

Posté : 01 oct. 2019, 14:01
par Newb
En suivant ce que j'ai cru comprendre des instructions, j’obtiens quelque chose comme ça:

Code : Tout sélectionner

<?php class Registration { public $variable = "test"; function RegisterUser($email, $name, $firstName ) { echo($score); $config = array( "db" => "mysql:host=127.0.0.1;dbname=db_datasystem", "username" => "root", "password" => "" ); $db = new PDO($config["db"], $config["username"], $config["password"]); $sql = "INSERT INTO t_users ( u_email, u_name, u_firstname) VALUES(:useremail, :username, :userfirstname)"; $q = $db->prepare($sql); $q->bindParam("useremail", $email, PDO::PARAM_STR); $q->bindParam("username", $name, PDO::PARAM_STR); $q->bindParam("userfirstname", $firstName, PDO::PARAM_STR); if($q->execute()) { echo("ok"); } else { echo("not ok"); } $q->closeCursor(); } } class Report { public $report_type; public $report_message; } ?>

Code : Tout sélectionner

<?php include "register.php"; $registration = new Registration(); $myEmail = "[email protected]"; $myName = "Theunis"; $myFirstName = "Francois"; $registration->RegisterUser($myEmail, $myName, $myFirstName); $registration->RegisterUser("[email protected]", $myName, $myFirstName); if(isset($_POST["useremail"]) && isset($_POST["username"]) && isset($_POST["userfirstname"]) { if(($_POST["useremail"] === myEmail)) { if(($_POST["username"] === myName)) { if(($_POST["userfirstname"] === myEmail)) { echo("Registration is completed"); } else { $report = new Report(); $report->report_type = "error"; $report->report_message = "missing firsname info to register user"; $encodedjson = json_encode($report); echo($encodedjson); } } else { $report = new Report(); $report->report_type = "error"; $report->report_message = "missing name info to register user"; $encodedjson = json_encode($report); echo($encodedjson); } } else { $report = new Report(); $report->report_type = "error"; $report->report_message = "missing email info to register user"; $encodedjson = json_encode($report); echo($encodedjson); } } else { $report = new Report(); $report->report_type = "error"; $report->report_message = "all inputs are not completed"; $encodedjson = json_encode($report); echo($encodedjson); } ?>

Est ce que tout cela à du sens pour quelqu'un?

Re: séparer classe du reste du php

Posté : 01 oct. 2019, 14:14
par Naroth
Pour ce qui est de la séparation en deux fichier ça fait sens.
Néanmoins j'aurais tendance à mettre chaque classe dans un fichier séparé, mais ne pas le faire n'empêchera pas le bon fonctionnement

Par contre tel qu'est le code tu enregistrera toujours le même utilisateur et tu n'utilises pas les informations renvoyés par un formulaire

Exemple :
fichier.html
<form action="script.php" method="post">
      <input name="nom" value="MARTIN" />
      <input name="prenom" value="Michel" />
      <input type="submit"/>
</form>
En appuyant sur le bouton "envoyer" de la page HTML on obtient

script.php
 //Affiche "MARTIN"
echo $_POST["nom"];

 //Affiche "Michel"
echo $_POST["prenom"];

Re: séparer classe du reste du php

Posté : 01 oct. 2019, 14:52
par Newb
Oui je sais c'est normal.

Mon chef de stage me fait travailler par étape. Je connais bien les POST.

Une des rare choses bien couverte par la formation courte que je viens de faire.

Merci pour ton aide.

Re: séparer classe du reste du php

Posté : 01 oct. 2019, 14:54
par Naroth
Okep pas de soucis.

Bonne continuation

Re: séparer classe du reste du php

Posté : 01 oct. 2019, 15:20
par Saian
Hahem, moi je suis pas trop d'accord avec le code de contrôle du formulaire.
Logiquement tu devrais tester si les variables POST sont définies, non vides, éventuellement si le mail est bien un mail et en fonction de tout ça faire les reports ou l'enregistrement.

Re: séparer classe du reste du php

Posté : 01 oct. 2019, 15:24
par @rthur