séparer classe du reste du php

Newb
Invité n'ayant pas de compte PHPfrance

01 oct. 2019, 10:52

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]";

?>

Eléphant du PHP | 176 Messages

01 oct. 2019, 11:55

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
Cordialement
Naroth

Newb
Invité n'ayant pas de compte PHPfrance

01 oct. 2019, 14:01

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?

Eléphant du PHP | 176 Messages

01 oct. 2019, 14:14

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"];
Cordialement
Naroth

Newb
Invité n'ayant pas de compte PHPfrance

01 oct. 2019, 14:52

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.

Eléphant du PHP | 176 Messages

01 oct. 2019, 14:54

Okep pas de soucis.

Bonne continuation
Cordialement
Naroth

Avatar du membre
Mammouth du PHP | 1609 Messages

01 oct. 2019, 15:20

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.
Développeur web depuis + de 20 ans

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

01 oct. 2019, 15:24

Quand tout le reste a échoué, lisez le mode d'emploi...