Sondages en entreprise

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Sondages en entreprise

par pinpin » 21 juin 2005, 13:49

Salut :)
Voila mon projet avance bien mais j'ai un petit point noir. En effet j'ai cette question rédigé comme ceci :
<b><font color="#333399"> 
4 - Utilisez-vous souvent les communications types (macro, E-mails, courrier)? <br> 
</font></b> 
<input type="radio" name="Q4" value="1">Oui (passez à la question 5)<br>  
<input type="radio" name="Q4" value="2">Non (précisez ci-dessous)<br> <br> 
Si non pourquoi ? <br> 
<input type="checkbox" name="Q4bis[]" value="1">Ne répondent pas à la question <br> 
<input type="checkbox" name="Q4bis[]" value="2">Difficulté à trouver les réponses types dans la base <br> 
<input type="checkbox" name="Q4bis[]" value="3">Par méconnaissance de la base (titre et contenu des communications types) <br> 
<input type="checkbox" name="Q4bis[]" value="4">Autre <br> <br> <br>
Cela aura pour effet que si on coche les deux dernières cases par exemple on aura $Q4bis[3]=4 et $Q4bis[2]=3. J'ai fait des echo pour savoir si les résultats s'interprété comme je le voulais et j'ai bien ce que je voulais.

Ensuite le problème vient au moment de les exploiter, en gros j'ai ca :
if ( $Q4 == 1 ) 
{ 
$recup1=@mysql_query("SELECT reponse1 FROM testsonda"); 
$recup=@mysql_result($recup1,3);
$recup++;
@mysql_query("UPDATE testsonda SET reponse1 = $recup WHERE question = 4"); 
} 
if ( $Q4 == 2 ) 
{ 
$recup1=@mysql_query("SELECT reponse2 FROM testsonda"); 
$recup=@mysql_result($recup1,3);
$recup++;
@mysql_query("UPDATE testsonda SET reponse2 = $recup WHERE question = 4"); 
} 
if ( $Q4bis[0] == 1 ) 
{ 
$recup1=@mysql_query("SELECT reponse3 FROM testsonda"); 
$recup=@mysql_result($recup1,3);
$recup++;
@mysql_query("UPDATE testsonda SET reponse3 = $recup WHERE question = 4"); 
} 
if ( $Q4bis[1] == 2 ) 
{ 
$recup1=@mysql_query("SELECT reponse4 FROM testsonda"); 
$recup=@mysql_result($recup1,3);
$recup++;
@mysql_query("UPDATE testsonda SET reponse4 = $recup WHERE question = 4"); 
} 
if ( $Q4bis[2] == 3 ) 
{ 
$recup1=@mysql_query("SELECT reponse5 FROM testsonda"); 
$recup=@mysql_result($recup1,3);
$recup++;
@mysql_query("UPDATE testsonda SET reponse5 = $recup WHERE question = 4"); 
} 
if ( $Q4bis[3] == 4 ) 
{ 
$recup1=@mysql_query("SELECT reponse6 FROM testsonda"); 
$recup=@mysql_result($recup1,3);
$recup++;
@mysql_query("UPDATE testsonda SET reponse6 = $recup WHERE question = 4"); 
} 
Voile si vous regardez mes posts un peut plus haut vous pouvez voir la structure de ma table.
Pour les boutons de type radio tout marche comme je le souhaite, mais j'ai un problème avec les boutons checkbox ... En effet le résultat s'inscrit dans la base de donnée que si je coche la première case, puis la seconde etc ...
Pour donner un exemple on a 4 checkbox C1 C2 C3 et C4, si je coche C1 & C4, C1 s'enregistre mais pas C4. Si je coche C1 & C2 & C4, C1 & C2 s'enregistre mais pas C4. Si je coche C2 rien s'enregistre.

Voila je vois vraiment pas d'ou sa vient, si vous pouvez m'aider :X
merci :)

par pjl » 17 juin 2005, 12:09

Pourquoi 2 requetes alors qu'une devrait suffire ?

par pinpin » 17 juin 2005, 11:54

ok je vais essayer ca merci beaucoup.
Normalement j'ai tout ce qu'il me faut pour finir, mais je laisse le topic dans l'état actuel pour le moment au cas ou :)

par Cyrano » 17 juin 2005, 11:51

Non, $update n'est même pas une chaine de caractère, c'est une ressource retournée par MySQL.

Si le résultat est numérique, il faut commencer par le récupérer pour ensuite l'incrémenter:
<?php
if ( $Q2 = 2 )
{
    $recherche = "SELECT `reponse2` FROM `sondagetable` WHERE `question` = ". $Q2 .";";
    $recup = mysql_query($update);
    while($resultat = mysql_fetch_assoc($recup))
    {
        $resultat['reponse2']++;
        $miseajour = "UPDATE `sondagetable` SET `reponse2` = ". $$resultat['reponse2'] ." WHERE `question` = ". $Q2 .";";
        $maj = mysql_query($miseajour);
        if($maj != false)
        {
            echo("<p>Mise à jour de la réponse effectuée.</p>\n");
        }
    }
}
?>

par pinpin » 17 juin 2005, 11:46

Je n'avais pas interprété cela comme ca :/

Moi dans $update je veux juste rajouter une valeur numérique en fait ! (un entier). Et en gros donner une valeur à $update je vais prendre la case qui m'interesse dans ma BDD. Mais apparament c'est pas trop ca la syntaxe :X

par pjl » 17 juin 2005, 11:41

Prends la peine de relire ton code.
$update correspond à une chaine de caractères et là, tu veux ajouter une unitée à une chaine de caractères.

par pinpin » 17 juin 2005, 11:20

Heu oui je veux juste incrémenter le résultat que je récupère, et le re enregistré, pour le $update++ c'est juste pour incrémenter une variable (C'est comme ça que je fais en C++ du moin :/)

par Cyrano » 17 juin 2005, 11:14

ok merci pour les conseils :)
Donc tout cela devrait me donner ceci dans un cas précis:
if ( $Q2 = 2 )
{
$update=SELECT `reponse2` FROM `sondagetable` WHERE `question` = 2;
$update++;
UPDATE `sondagetable` SET `reponse2` = $update WHERE `question` = 2 ;
}
Voila je pense que cela devrait être bon, je vais refaire mes tables et tester :)
Non, ça ne marchera pas ton script: qu'est-ce que tu veux faire avec $update++ : ça va te renvoyer une erreur, je ne comprends pas ce que tu veux incrémenter au juste ? le résultat ?

par pinpin » 17 juin 2005, 11:14

Alors pour mon code j'en suis arrivé sur quelque chose comme ca :
@mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données");      
@mysql_select_db($bdd,$table) or die("Impossible de se connecter à la base de données");     

if ( $_POST["Q1"] = 1 ) 
{ 
$update=SELECT `reponse1` FROM `sondagetable` WHERE `question` = 1;
$update++; 
UPDATE `sondagetable` SET `reponse1` = $update WHERE `question` = 1; 
} 
J'ai donc une première erreur : Parse error: parse error, unexpected '`' in *****/Sondage/index.php on line 219

J'essaye de lever les ` donc pour tester et j'ai encore une erreur : Parse error: parse error, unexpected T_STRING in *****/Sondage/index.php on line 219

Je me dis que sa doit venir de $update mais je vois pas comment régler ceci :/

par pinpin » 17 juin 2005, 10:34

ok merci pour les conseils :)
Donc tout cela devrait me donner ceci dans un cas précis:
if ( $Q2 = 2 )
{
$update=SELECT `reponse2` FROM `sondagetable` WHERE `question` = 2;
$update++;
UPDATE `sondagetable` SET `reponse2` = $update WHERE `question` = 2 ;
}
Voila je pense que cela devrait être bon, je vais refaire mes tables et tester :)

par Cyrano » 17 juin 2005, 10:26

Pour ta première interrogation: fichier texte ou base de données: si tu as le choix,il n'y a pas photo: la base de données va te donner infiniment plus de souplesse et de possibilités de traitement des informations;

Pour la requête, c'est assez simple: tu veux la troisième réponse à le seconde question. Donc on a besoin de deux identifiants:
- 1 - à quel identifiant est raccordée la seconde question et dans quel champ je trouve cet identifiant ? Réponse : dans le champ "question" et c'est la clé 2;
- 2 - Dans quel champ vais-je pouvoir trouver la troisième réponse ? Réponse : dans le champ "reponse2"

On peut donc formuler la requête:

Code : Tout sélectionner

SELECT `réponse2` FROM `sondagetable` WHERE `question` = 2;
Petite remarque: renomme tes champs: pas d'accents, pas de caractères spéciaux ni espace non plus: sous Windows, ça ne posera pas de problème, mais si tu mets en ligne chez un hébergeur avec un système UNIX/Linux, tu vas avoir des surpsises des plus désagréables.

par pinpin » 17 juin 2005, 10:17

Donc j'ai regardé sur quelques sites pour savoir comment faire, j'ai vu quelques trucs pouvant m'aider :
$Q2BIS = SELECT * FROM sondagetable WHERE question=3 AND réponse2
$Q2BIS++;
UPDATE sondagetable SET réponse2=$Q2BIS WHERE question=3 
Bon pour la première ligne j'en suis vraiment pas sur, moi je veux juste enregistrer dans Q2BIS la valeur qui de la réponse 2 pour la question 3

par pinpin » 17 juin 2005, 09:59

Salut,
J'ai pas mal avancé dans ce que je voulais faire, et j'ai selon moi réalisé le principal. C'est à dire que ma page affichage toutes les questions, avec un bouton valider à la fin. Et après avoir répondu au questionnaire j'ai chaque variable qui enregistre un numéro correspondant à la réponse. Par exemple pour la question 1 j'ai une variable Q1 et si j'ai répondu à la question 3 j'aurais donc 3 dans la variable Q1 :)

Maintenant je dois interpréter tout ces résultats, le problème c'est que je ne sais pas quel méthode choisir entre fichier txt ou BDD et je ne sais pas vraiment comment faire. En fait cela sera fastidieu, mais j'ai encore pas mal de temps pour le faire et écrire plusieurs fois la même chose me dérange pas...

Donc pour procéder je compte faire quelque chose dans ce style :
if ($Q1 = 1)
{
    //On récupère la valeur qui correspond à cette question dans un fichier texte ou une BDD, on l'incrémente, et on l'enregistre sur la même ligne
}
if ($Q1 = 2)
{
    //On récupère la valeur qui correspond à cette question dans un fichier texte ou une BDD, on l'incrémente, et on l'enregistre sur la même ligne
}
Voila et pour finir il y aura une partie affichage mais qui sera sur une autre page, mais si je sais faire cela, la troisième partie ne posera pas de problème ;)

Je pense que la base de donnée serait une bonne solution car pour une question j'aurais 7 réponses grand maximum, donc voila un petit screenshot pour vous montrer comment j'imagine cela :
Image

Donc j'ai 3 questions dans mon cas. Pour la première et deuxième question j'ai 7 réponses possibles, pour la troisième j'en ai 4 mais sa n'a pas vraiment d'importance.

Voila je voudrais savoir comment faire une fois connecté à la BDD pour récupérer la valeur exact que je veux (disons la réponse 2 de la question 3 dans mon cas) pour l'enregistrer dans une variable, l'incrémenter (ca je sais faire ^^), puis actualiser la BDD avec la nouvelle valeur. Limite si il est possible de l'incrémenter directement sa m'arrangeré :)

Voila voila =)

par pinpin » 10 juin 2005, 14:08

ok merci beaucoup je regarde ca

par Cyrano » 10 juin 2005, 14:03

Si tu veux voir comment traiter un formulaire en PHP, récupères CECI, c'est un formulaire maison qui traite de la validation des données et tu verras comment traiter presque toutes les formes de champ de formulaire à l'exception de champs de type "file"