Compréhension et ajout de règles dans un script

Résolu/Fermé
julien2810 Messages postés 33 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 mai 2018 - Modifié le 22 janv. 2018 à 21:22
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 - 24 janv. 2018 à 17:40
Bien le bonjour à la communauté

Je suis en pleine recherche pour trouver une règle pour finaliser un script.
C'est un script utilisé dans le composant RSForm avec le CMS Joomla.

A la base le script est fait pour compter combien de formulaires ont été envoyé et limiter le nombre possible d’envois en désactivant celui-ci si le nombre est atteint.

Le script :

// Define the maximum number of submissions. For this example we'll use 50.
$max = 50;

// Get a database connection.
$db = JFactory::getDbo();

// Setup the query. This query counts the number of submissions for the current form.
// $formId contains the ID of the current form.
$db->setQuery("SELECT COUNT(`SubmissionId`) FROM #__rsform_submissions WHERE `FormId`='".(int) $formId."'");
$submissions = $db->loadResult();

if ($submissions >= $max) {
$formLayout = 'Bravo vous etes le 50ème ';

}


De ce que je comprend, il va recherché le nombre de soumission faite dans la table " _rsform_submissions " pour le formulaire courant avec le " WHERE `FormId`='".(int) $formId."'"); " et les comptes.

Une fois au nombre il envoie le message et il n'est plus possible de faire d'autre soumissions.



Je souhaiterais ajouter une règle ou la changer à ce script.

Il faudrait qu'il aille faire une vérification dans une autre table de la base de donnée.
Je voudrais qu'il compte le nombre de " _STATUS " qui sont à " 1 " et qu'il se base la dessus au lieu de la première règle.

Qu'une fois que 10 " _STATUS " sont à " 1 " il stoppe le formulaire.



En sachant que certaines fois il y en aurait qui resterait à " 0 "

Je vous remercie d'avance pour les éclaircissements que la communauté pourrait m'apporter.
A voir également:

2 réponses

yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 Ambassadeur 1 556
22 janv. 2018 à 21:22
bonsoir, je suggère ceci:
$db->setQuery(" SELECT COUNT(*) FROM autretabledelabasededonnée WHERE _STATUS = 1 "); 
$submissions = $db->loadResult(); 

if ($submissions >=10) {  
0
julien2810 Messages postés 33 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 mai 2018 11
22 janv. 2018 à 21:34
Super pour la rapidité mais cela ne fonctionne pas.

Le " SELECT COUNT(*) " il ne faut pas que ce soit une *, il doit reprendre le nom de la colonne ou il doit compter non ?


A la base j'avais pensé à ceci :


// Define the maximum number of submissions. For this example we'll use 50.
$max = 50;

// Get a database connection.
$db = JFactory::getDbo();

// Setup the query. This query counts the number of submissions for the current form.
// $formId contains the ID of the current form.
$db->setQuery("SELECT COUNT(`FieldName`) FROM #__rsform_submission_values WHERE `FormId`='".(int) $formId."'");

$submissions = $db->loadResult();

if ($submissions >= $max) {
$formLayout = 'Bravo';

}


Ici je lui demande de compter le nombre dans la colonne " FieldName " de la table " #__rsform_submission_values " du formulaire " WHERE `FormId`='".(int) $formId."'"); "

Le problème de ce script et de celui du dessus, c'est qu'il compte le nombre dans la colonne de la table.

Il faudrait réussir à lui spécifier qu'il doit vérifier que dans la colone " FieldName " dans le champ " _STATUS " combien sont avec la valeur " 1 "


Héhé je suis loin d'être un as, mais pour le moment je comprend bien ?
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556 > julien2810 Messages postés 33 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 mai 2018
22 janv. 2018 à 21:39
"cela ne fonctionne pas": message d'erreur, résultat inattendu, ?
0
julien2810 Messages postés 33 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 mai 2018 11
22 janv. 2018 à 22:00
En fait quand je mettait simplement vos lignes de code, juste écran blanc.
Donc j'ai ajouté " ' " avant et après _STATUS ce qui fait que le formulaire fonctionne de nouveau.
Mais il ne compte pas le nombre, après 11 formulaires envoyé et en ayant activé les 11 formulaires on peut continuer à en envoyé tant que l'on veux.

$db->setQuery(" SELECT COUNT(*) FROM #__rsform_submission_values WHERE '_STATUS' = 1 ");
$submissions = $db->loadResult();

if ($submissions >=10) {

Il faut aussi lui ajouter le : `FormId`='".(int) $formId."'"); sinon il ne saura pas que c'est uniquement dans le formulaire concerné je pense.

Ne peut-on pas imaginé quelque chose comme ceci ?

$db->setQuery("SELECT COUNT(`SubmissionId`) FROM #__rsform_submissions WHERE `FormId`='".(int) $formId."'") AND FROM #__rsform_submission_values WHERE '_STATUS' = 1 ");

$submissions_STATUS >=10) {

Ce qui bien entendu me ramène de nouveau à un écran blanc ^^

Je suis une purge en code hein donc tout ce que je propose est sans doute de la pure Mer... :)

Je pense qu'il faut garder la règle de base et simplement ajouté une variable qui dit de vérifier aussi que le champ dans la colonne de la table de la base de donnée est = ou > au nombre voulus.
0
julien2810 Messages postés 33 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 mai 2018 11
22 janv. 2018 à 22:04
0
julien2810 Messages postés 33 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 mai 2018 11
Modifié le 22 janv. 2018 à 22:27
Peut-être plus simplifié expliqué comme ça :)

Il faut qu'il compte :

Combien de FieldName qui se nommes _STATUS avec le FieldValue qui est = à 1 dans la table _rsform_submission_values venant du FormId concerné.

Les additionnes et dise stoppe une fois arrivé à un nombre fixe.
0
julien2810 Messages postés 33 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 mai 2018 11
23 janv. 2018 à 07:41
Finalement j'ai trouvé une solution qui me convient pour le moment :)

// Get a database connection.
$db = JFactory::getDbo();

// Setup the query. This query counts the number of submissions for the current form.
// $formId contains the ID of the current form.

$db->setQuery("SELECT COUNT(*) FROM #__rsform_submission_values WHERE FieldValue = 1 AND FormId = 4 ");

$submissions = $db->loadResult();


if ($submissions >=2) {

$formLayout = 'Le tirage est terminé ';

}


Du coup ça calcule combien de soumission dans la colonne Fieldvalue avec l'ID du formulaire.
C'est un peut barbare mais bon c'est déjà ça.

Ca aurais été super de pouvoir définir une donnée de la colonne au lieu de devoir toutes les prendre en comptes.

En tout cas merci pour ton aide, tu m'as bien mis sur le chemin.
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556
23 janv. 2018 à 09:55
Je ne comprends pas ce qui te déplais dans count(*): cela retourne le nombre d'éléments sélectionnés, présents dans le résultat de la requête. Souhaites-tu obtenir autre chose?
0
julien2810 Messages postés 33 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 mai 2018 11
24 janv. 2018 à 10:21
En fait à la base je souhaitait que ça ne compte que les valeurs du fildname _STATUS.
Mais apparemment on ne peux que faire un count de la colonne sans spécifier de champs.
De ce que j'ai compris hein :)
En tout cas un grand merci à toi pour tes explications et le temps que tu m'as accordé.
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556 > julien2810 Messages postés 33 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 mai 2018
24 janv. 2018 à 12:16
veux-tu ne compter que les enregistrements qui ont une valeur non nulle dans _STATUS, ou bien le nombre de valeurs distinctes de _STATUS, ou bien encore autre chose?
0
julien2810 Messages postés 33 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 mai 2018 11
24 janv. 2018 à 12:24
Je souhaite compter les enregistrements avec une valeur non nulle dans _STATUS et qui sont relié à l'ID du formulaire.
Je ne sais simplement pas comment lui dire que c'est uniquement dans _STATUS et non dans toute la colonne qu'il doit vérifier.
0
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 1 556 > julien2810 Messages postés 33 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 26 mai 2018
24 janv. 2018 à 17:40
si tu veux compter des enregistrements, count(*) est parfait.
si tu veux éliminer les enregistrements où _STATUS est NULL, tu peux ajouter "
AND _STATUS is not null
"
0