Menu

Compréhension et ajout de règles dans un script [Résolu]

julien2810 32 Messages postés jeudi 20 décembre 2007Date d'inscription 20 avril 2018 Dernière intervention - 22 janv. 2018 à 21:09 - Dernière réponse : yg_be 5603 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

12 réponses

yg_be 5603 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - 22 janv. 2018 à 21:22
0
Utile
bonsoir, je suggère ceci:
$db->setQuery(" SELECT COUNT(*) FROM autretabledelabasededonnée WHERE _STATUS = 1 "); 
$submissions = $db->loadResult(); 

if ($submissions >=10) {  
julien2810 32 Messages postés jeudi 20 décembre 2007Date d'inscription 20 avril 2018 Dernière intervention - 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 ?
yg_be 5603 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention > julien2810 32 Messages postés jeudi 20 décembre 2007Date d'inscription 20 avril 2018 Dernière intervention - 22 janv. 2018 à 21:39
"cela ne fonctionne pas": message d'erreur, résultat inattendu, ?
julien2810 32 Messages postés jeudi 20 décembre 2007Date d'inscription 20 avril 2018 Dernière intervention - 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.
julien2810 32 Messages postés jeudi 20 décembre 2007Date d'inscription 20 avril 2018 Dernière intervention - 22 janv. 2018 à 22:04
julien2810 32 Messages postés jeudi 20 décembre 2007Date d'inscription 20 avril 2018 Dernière intervention - 22 janv. 2018 à 22:26
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.
Commenter la réponse de yg_be
julien2810 32 Messages postés jeudi 20 décembre 2007Date d'inscription 20 avril 2018 Dernière intervention - 23 janv. 2018 à 07:41
0
Utile
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.
yg_be 5603 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention - 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?
julien2810 32 Messages postés jeudi 20 décembre 2007Date d'inscription 20 avril 2018 Dernière intervention - 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é.
yg_be 5603 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention > julien2810 32 Messages postés jeudi 20 décembre 2007Date d'inscription 20 avril 2018 Dernière intervention - 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?
julien2810 32 Messages postés jeudi 20 décembre 2007Date d'inscription 20 avril 2018 Dernière intervention - 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.
yg_be 5603 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 22 mai 2018 Dernière intervention > julien2810 32 Messages postés jeudi 20 décembre 2007Date d'inscription 20 avril 2018 Dernière intervention - 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
"
Commenter la réponse de julien2810