Amélioration d'un script PHP.

Fermé
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 - 13 janv. 2023 à 17:47
yg_be Messages postés 23480 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mars 2025 - 16 janv. 2023 à 10:22

Bonjour,

Je suis actuellement en cours d'amélioration de mon site Q-C-M en y apportant une option pour les utilisateurs.

C'est ainsi que j'ai commencé à créée ce script qui fonctionne:

<?php
/*
print_r($x); //affichage du contenu $x
var_dump($x); //affichage du type et du contenu
exit("<br/> Stop");
echo "</br>";     
*/
include 'connexion.php';

$jour=3; //Lecture de la table coeffi tous les 3 jours.

$selectLast = $connection->prepare('SELECT id FROM coeffi ORDER BY id DESC LIMIT 0, 1');// dernière ligne de la table.
$selectLast->execute();
$resultat=$selectLast->fetch(PDO::FETCH_ASSOC);
	if(!empty($resultat)){  
    foreach($resultat as $id){
        //echo $id; // $id est le dernier id de la table.
    }
  }
############################# Sélection des identifiants et dates ######################################
$x = 0;
while($x <= $id){
                    $requete = $connection->prepare("SELECT id, date_debut FROM coeffi WHERE id=:id ");
											$requete->execute(array(											
											':id' => $x
											));										
											while ($row = $requete->fetch(PDO::FETCH_ASSOC))
											{									
												$_SESSION['identifiant']=($row['id']);	
												$date=($row['date_debut']);	
											}	
                    if(!empty($_SESSION['identifiant'])){										
                    echo $_SESSION['identifiant'];	
                    }
                    echo "</br>"; 
                    if(!empty($date)){	
                    echo $date;
                    }
                    echo "</br>";
$x=$x+$jour; //$x+3jours
}
echo "fin";
echo "</br>";

?>

Néanmoins ne serait il pas possible de l'améliorer en réunissant les codes de la table coeffi ensemble?

Ou tout autre solution permettant une meilleure lecture de ce script?

Merci d'avance pour votre aide.
Windows / Firefox 108.0

A voir également:

7 réponses

yg_be Messages postés 23480 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mars 2025 Ambassadeur 1 568
13 janv. 2023 à 18:02

bonjour,

Je ne comprends pas l'utilité de ce script.  A quoi sert-il?

0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
13 janv. 2023 à 18:25

Il sert, en s'intégrant dans un ensemble beaucoup plus complexe mettant en œuvre des temps, de rappels aux utilisateurs de mon site sur les Q-C-M.

Néanmoins en restant uniquement sur ce script (qui fonctionne) as tu trouver comment par exemple le créer moins dense?

Voilà qui devrait être intéressant comme recherche! ?

0
yg_be Messages postés 23480 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mars 2025 1 568
Modifié le 13 janv. 2023 à 19:51

Je n'ai pas dû chercher longtemps pour trouver comment le créer moins dense: le faire écrire par quelqu'un de compétent.

Je me demande si, au lieu de te former, tu essaies de nous faire corriger tes erreurs.

De plus, tu nous présentes cela comme une recherche intéressante!

0
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 737
13 janv. 2023 à 18:44

Bonjour,

A quoi te sert ta première requête ?

A quoi te sert ta première boucle ?

Pourquoi "sauter" 3 jours ?

Pourquoi ne pas faire une seule requête ....  ?

Enfin bon.... améliorer un code... sans savoir ce qu'il est sensé faire... c'est difficile .... Si tu n'es pas plus clair dans tes explications, je doute qu'on puisse te venir en aide.

Et puis.. si c'est si "amusant" .. autant qu'on te laisse jouer avec....


0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
14 janv. 2023 à 12:05

J'ai trouvé une amélioration à ce script de cette façon:

##################### Sélection de la dernière ligne de la table coeffi #############################
$req = $connection->query('SELECT * FROM coeffi ORDER BY id DESC');
$données = $req->fetch();
$id= $données['id']; 

############################# Sélection des identifiants et dates ######################################
$x = 0;
while($x <= $id){
                    $requete = $connection->prepare("SELECT id, date_debut FROM coeffi WHERE id=:id ");
											$requete->execute(array(											
											':id' => $x
											));										
											while ($row = $requete->fetch(PDO::FETCH_ASSOC))
											{									
												$_SESSION['identifiant']=($row['id']);	
												$date=($row['date_debut']);	
											}	
$x=$x+$jour; //$x+3jours
}
echo $x; // est le dernier jour de la table + $jour.

La première requête sert à lire la dernière entrée de la table coeffi. C'est ainsi qu'en sélectionnant qu'une seule entrée, je n'ai pas eu besoin de faire une boucle que j'ai finalement supprimé.

3 jours n'est qu' un exemple. Cette donnée sera (si je parviens à réaliser mon petit projet) définie par chacun des participants de mon jeu lors d'un formulaire mis à leurs dispositions.

Celui ci leur servira à définir un jour de rappel aux questions qui sont posées chaque jour.

Ainsi au bout de X jours un e-mail sera envoyé à la personne ayant opté pour cette option si elle oublie de venir participer.

Justement, le but de ma demande est d'améliorer encore ce script.

Si possible, cela me plairait bien de réunir ces lignes de codes dans une seule requête!

Je pense que pour des gens passionnés il peut être intéressant de résoudre des petits problème comme celui que je vous présente.

Loin de moi à toujours été l'idée de profiter du travail des autres.

Mais simplement une aide sous la forme de services pour le bien des internautes qui me font l'honneur de se distraire sur mes sites. Voilà c'est "dit".

Comme vous le savez, je suis limité dans mes connaissances. Cependant, il ne s'agit plus pour moi de me former. Mais d'améliorer l'ordinaire et de faire face aux nouveautés technologiques.

Cordialement.

0
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 737
14 janv. 2023 à 12:16

Tu sais que tu peux faire, dans une requête SQL, une condition sur les dates... ?

Et donc avec une seule requête SQL, récupérer les informations qui ont plus de x jours si tu le souhaites...

Cela évitera cette bidouille de boucler sur la table en fonction du dernier id récupéré...

Dans l'idéal, il faudrait stocker en base, pour chaque utilisateur, la date du dernier envoi.

Puis dans ton script, comparé si cette date d'envoi est supérieur ou égal à ton x.. si oui, récupérer les derniers messages supérieur à date du dernier envoi.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
14 janv. 2023 à 12:09

J'ai oublié cette ligne que voici:

$jour=3;

Elle doit être situé au début du script.

0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
14 janv. 2023 à 14:44

Je n'ai jamais rencontré une condition sur les dates dans une requête SQL.

Pourrais tu me présenter un exemple aboutissant si possible au résultat fourni par $x à la fin de mon script (ligne 20) ?

En sachant que la variable $x (nombre de jours) est un entier pouvant être traduit en un timestamp par (86400 secondes (1jour) X $x).

Ainsi lorsque le timestamp  de la colonne date_debut correspondant à la dernière entrée de la table + le timestamp ajouté par le participant (ici 3 jours pour l'exemple : 86400 x 3) deviendrait inférieur au moment présent par la fonction time().

Ainsi:

$t=time();

if($x<$t)

// Envoi e-mail de rappel à participer au Q-C-M

}

Lorsque la condition devient vrai au moment du parcours de ce script, le code que j'aurai inclus dans la condition permettra d'envoyer un e-mail au participant ayant opté pour cette option de rappel.

0
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 737
14 janv. 2023 à 17:28
0
yg_be Messages postés 23480 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mars 2025 1 568
14 janv. 2023 à 17:51

Pour chaque participant, l'option de rappel, ainsi que le délai avant le rappel (que tu appelles à tort timestamp), sont enregistrés dans la table des participants?

Pourquoi ne pas écrire en français?  Tu peux utiliser "délai" ou "période de temps".  Le mot anglais "timestamp" signifie "moment", pas du tout délai.

0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
15 janv. 2023 à 14:31

yg_be, loin de me répondre utilement à chacune de tes interventions depuis déjà bien longtemps maintenant, je souhaiterai qu' à l'avenir (si je reviens sur ce forum),  que tu ne t'adresses plus à moi !

Je ne m'en porterai pas plus mal.

Bien au contraire !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

0
yg_be Messages postés 23480 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 mars 2025 1 568
16 janv. 2023 à 10:22

Pour chaque participant, l'option de rappel, ainsi que le délai avant le rappel, sont-ils enregistrés dans la table des participants?

0