Page 1 sur 1

[résolu] logique construction d'un script

Posté : 27 déc. 2011, 00:10
par juliette
salut a tous, je cherche de l'aide sur les étapes et le déroulement d'un script que j'ai fait (avec l'aide de Calimero)...
voici le code:
<script type="text/javascript" src="webroot/vote/jquery-1.4.1.min.js"></script>
<script type="text/javascript" src="webroot/vote/jquery.rater.js"></script> 
        
  
<?php
// l'array suivant sera créée d'une requete sur la table questionnaire
// declatation de l'array
$question=array(
  array(
    'id' => 1,
    'titre' => "...",
  ),
  array(
    'id' => 2,
    'titre' => "...",
  ),
  array(
    'id' => 3,
    'titre' => "...",
  ),
  array(
    'id' => 4,
    'titre' => "...",
  ),
  array(
    'id' => 5,
    'titre' => "...",
  ),
  array(
    'id' => 6,
    'titre' => "...",
  ),
  array(
    'id' => 7,
    'titre' => "...",
  ),
  array(
    'id' => 8,
    'titre' => "...",
  ),
  array(
    'id' => 9,
    'titre' => "...",
  ),  
  array(
    'id' => 10,
    'titre' => "...",
  ),      
);

echo '<table border="1">';

foreach($question as $k=>$question)
{  
    $parite=(int)($k/2) == $k/2;

    if($parite)
    {
        $ligne_ouverte=true;
        echo "<tr>";
    }
    ?>  
    <!--Dans les deux cas on affiche la cellule-->
    <td>
        <?php echo $question[id]; ?> 
    </td>
    <td>
        <div id="<?php echo $question[id]; ?>" class="vote"></div>	
        <script type='text/javascript'>
            $('#<?php echo $question[id]; ?>').rater("webroot/vote/ratingsdemo.php?id_question=3&id_chien=<?php echo $donnees['id_chien'];?>");
        </script>  
    </td>

    <?php  
    // Si le $k est impair, on ferme la ligne après avoir affiché la cellule.
    if(!$parite)
    {
        echo "</tr>";
        $ligne_ouverte=false;
    }
} // fin de boucle.

if($ligne_ouverte)
{
    echo "<td>&nbsp;</td><td>&nbsp;</td></tr>";
}

echo '</table>';       
?>
donc, je crée un tableau, avec le foreach je construit le tableau avec les nom des questions le soucis maintenant est de lié les résultats d'un individu a ces 10 questions ??? et aussi le moment dans le script ou je dois le faire...

perso je pense a un nouveau foreach, mais rien de sur, avez vous quelques Infos svp ?

Re: logique construction d'un script

Posté : 27 déc. 2011, 00:26
par juliette
je me pose une question, les resultats de votes et moyennes, ne devrait ils pas être dans le tableau déjà existant ?
genre:
$question=array(
  array(
    'id' => 1,
    'titre' => "...",
    'id_chien' => "...",
    'moyenne' => "...",
    'nb_votes' => "...",
  ),
    
);

Re: logique construction d'un script

Posté : 27 déc. 2011, 02:14
par juliette
je pense bien que c'est ca, en y ajoutant quelques infos,j'obtiens le comportement que je désire :D mais ais-je raison ?
$question=array(
    array(
        'id'       => 1,
        'titre'    => "question",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "5",        
        'moyenne'  => "8",    
    ),
    array(
        'id'       => 2,
        'titre'    => "question",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "5",        
        'moyenne'  => "3",    
    ),   
    array(
        'id'       => 3,
        'titre'    => "question",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "2",        
        'moyenne'  => "8",    
    ),
    array(
        'id'       => 4,
        'titre'    => "question",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "5",        
        'moyenne'  => "3",    
    ),     
);
et l’affichage:
    <td>
        &nbsp;<?php echo $question[id];?>&nbsp; 
    </td>
    <td>
        <div id="<?php echo $question[id]; ?>" class="vote"></div>	
        <script type='text/javascript'>
            $('#<?php echo $question[id];?>').rater("webroot/vote/ratingsdemo.php?id_question=<?php echo $question[id];?>&id_chien=<?php echo $question[id_chien];?>", {curvalue:<?php echo $question[moyenne];?>});
        </script>  
    </td>

Re: logique construction d'un script

Posté : 27 déc. 2011, 10:09
par xTG
Le chien est la réponse n'est-ce pas ?
Dans ce cas dans id_chien il conviendrait mieux de stocker un tableau des différentes réponses ?
On peut étendre par la suite à un index supplémentaire par chien avec le nombre de fois que ce chien a été sélectionné pour un vote.

Ainsi tu as le recoupement :
- nombre de vote pour chaque chien
- totale des votes
- moyenne des votes

Re: logique construction d'un script

Posté : 27 déc. 2011, 11:57
par juliette
non, le chien n'est pas la réponse, les réponse sont des votes de 1 a 10 sur 10 questions pour chaque chien enregistré...
moi je cherche les moyennes des votes des 10 questions pour un chien donné pour afficher sur mon système de led:
http://www.servimg.com/image_preview.ph ... u=13059060

Re: logique construction d'un script

Posté : 27 déc. 2011, 12:23
par xTG
Dans ce cas si tu as plusieurs chiens sur la même page je ferrais plutôt en array principal les chiens et pour chaque chien les questions.
Mais si tu n'as qu'un chien, l'un ou l'autre ne change rien donc à ta guise comme qui dirait. :D

Re: logique construction d'un script

Posté : 27 déc. 2011, 18:50
par juliette
désolé xTG, je trouve pas, est i possible de me cité les étapes du script...
du genre:
// connexion
// array truc
// requete truc

sachant que j'ai une table questionnaire (id, nom_question, libeller), une table vote qui contient un champ par votes (id, id_user,id_question, note) et donc je cherche les moyennes de toutes les questions concernant 1 chien que je connais déjà avant le script...

Re: logique construction d'un script

Posté : 27 déc. 2011, 18:52
par xTG
désolé xTG, je trouve pas, est i possible de me cité les étapes du script...
Ta requête est floue car je ne sais pas quel est ton contexte. Comme je te l'ai énoncé il y a plusieurs possibilités suivant ton cas de figure.
Comme je n'ai pas forcement suivi tes autres sujets je n'ai aucune information sur ce que tu veux mettre en place.

Re: logique construction d'un script

Posté : 27 déc. 2011, 19:06
par juliette
comme c'est la, j'ai le comportement que je cherche:
<?php

// declaration de l'array
// id correspond a l'id de la question
$question=array(
    array(
        'id'       => 1,
        'libeller' => "ce chien est il bon",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "5",        
        'moyenne'  => "8",    
    ),
    array(
        'id'       => 2,
        'libeller' => "ce chien est il beau",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "5",        
        'moyenne'  => "3",    
    ),   
    array(
        'id'       => 3,
        'libeller' => "ce chien est il en bonne santé",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "2",        
        'moyenne'  => "8",    
    ),
    array(
        'id'       => 4,
        'libeller' => "ce chien est il gardien",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "5",        
        'moyenne'  => "3",    
    ),     
    array(
        'id'       => 5,
        'libeller' => "ce chien est il gentil",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "5",        
        'moyenne'  => "8",    
    ),
    array(
        'id'       => 6,
        'libeller' => "...",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "5",        
        'moyenne'  => "3",    
    ),   
    array(
        'id'       => 7,
        'libeller' => "...",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "2",        
        'moyenne'  => "8",    
    ),
    array(
        'id'       => 8,
        'libeller' => "...",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "5",        
        'moyenne'  => "3",    
    ), 
    array(
        'id'       => 9,
        'libeller' => "...",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "5",        
        'moyenne'  => "8",    
    ),
    array(
        'id'       => 10,
        'libeller' => "...",
        'id_chien' => $donnees['id_chien'],
        'nb_votes' => "5",        
        'moyenne'  => "3",    
    ),    
);

echo '<table border="1">';

foreach($question as $k=>$question)
{  
    $parite=(int)($k/2) == $k/2;

    if($parite)
    {
        $ligne_ouverte=true;
        echo "<tr>";
    }
    ?>  
    <!--Dans les deux cas on affiche la cellule-->
    <td>
        &nbsp;<?php echo $question[id];?>&nbsp; 
    </td>
    <td>
        <div id="<?php echo $question[id]; ?>" class="vote"></div>	
        <script type='text/javascript'>
            $('#<?php echo $question[id];?>').rater("webroot/vote/ratingsdemo.php?id_question=<?php echo $question[id];?>&id_chien=<?php echo $question[id_chien];?>", {curvalue:<?php echo $question[moyenne];?>});
        </script>  
    </td>

    <?php  
    // Si le $k est impair, on ferme la ligne après avoir affiché la cellule.
    if(!$parite)
    {
        echo "</tr>";
        $ligne_ouverte=false;
    }
} // fin de boucle.

if($ligne_ouverte)
{
    echo "<td>&nbsp;</td><td>&nbsp;</td></tr>";
}

echo '</table>';   

?>
et ça donne ça a l’écran: http://i45.servimg.com/u/f45/13/05/90/60/captur17.png
et ce que je veux en fin de compte, c'est dynamiser l'array mais comment, j'ai essayer avec foreach mais pas réussi...

je ne sais pas si je répond correctement a ta question car c'est encore très abstraie pour moi...

les infos sont dans ces 2 tables:
CREATE TABLE IF NOT EXISTS `questionnaire` (
  `id_question` int(11) NOT NULL auto_increment,
  `libelle` varchar(255) collate utf8_bin NOT NULL,
  PRIMARY KEY  (`id_question`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=11 ;

--
-- Contenu de la table `questionnaire`
--

INSERT INTO `questionnaire` (`id_question`, `libelle`) VALUES
(1, 'Standard, aspect général ?'),
(2, 'Caractère et comportement ?'),
(3, 'Instinct de chasse et jeu'),
(4, 'Capacité au dressage'),
(5, 'Capacité aux sauts'),
(6, 'Santé général'),
(7, 'Instincts de garde et de defense'),
(8, '...'),
(9, '...'),
(10, '...');


CREATE TABLE IF NOT EXISTS `vote` (
  `id_vote` int(11) NOT NULL auto_increment,
  `id_question` int(11) NOT NULL,
  `id` int(11) NOT NULL,
  `ip` varchar(64) collate utf8_bin NOT NULL,
  `id_chien` int(11) NOT NULL,
  `note` int(11) NOT NULL,
  `signup_date` date NOT NULL,
  PRIMARY KEY  (`id_vote`),
  KEY `fk_questionnaire1` (`id_question`),
  KEY `fk_user2` (`id`),
  KEY `fk_chien3` (`id_chien`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
et que j'ai déjà id_chien

Re: logique construction d'un script

Posté : 27 déc. 2011, 19:23
par xTG
Une seule boucle devrait être suffisant pour le construire si on ne prend pas en compte la moyenne (car je vois pas comment la faire en une seule requête avec ce qu'on doit déjà récupérer).
$donnees['id_chien'] = 1;
$sql = 'SELECT questionnaire.id_question AS question_id, questionnaire.libelle AS libeller, count(vote.id_vote) AS nb_votes
FROM questionnaire LEFT JOIN vote
    ON vote.id_question = questionnaire.id_question AND vote.id_chien = ' . $donnees['id_chien'] .'
GROUP BY vote.id_question
ORDER BY questionnaire.id_question';
$res = mysql_query($sql);
$questions = array();
if( $res !== false && mysql_num_rows($res) > 0 )
while( $data = mysql_fetch_row($res) ){
  $questions[] = array(
      'id' => $data['question_id'],
      'libeller' => $data['libeller'],
      'id_chien' => $donnees['id_chien'],
      'nb_votes' => $data['nb_votes'],
      'moyenne' => $moyenne
  );
}

Re: logique construction d'un script

Posté : 27 déc. 2011, 19:57
par juliette
ok, je comprend et ça ressemble plus a mes 1ere idées...
sur google: je dois chercher quoi pour trouver de la lecture sur mon soucis ?

Re: logique construction d'un script

Posté : 27 déc. 2011, 23:35
par juliette
je pense que j'ai ce que je veux:
 $data = $bdd->prepare("SELECT qt.id_question,
                                  vt.id_chien, 
                           COUNT( vt.note ) AS nb_notes, 
                           IFNULL( ROUND(AVG( vt.note )), 0.00 )   AS moyenne 
                           FROM questionnaire      qt 
                           LEFT OUTER JOIN vote    vt  ON qt.id_question = vt.id_question AND vt.id_chien = ".$donnees['id_chien']."
                           GROUP BY qt.id_question 
                           ORDER BY qt.id_question");
$data->execute();

/* Récupération de toutes les lignes d'un jeu de résultats */
$result = $data->fetchAll();
et le print_r donne:
Array
(
[0] => Array
(
[id_question] => 1
[0] => 1
[id_chien] => 10
[1] => 10
[nb_notes] => 1
[2] => 1
[moyenne] => 6.00
[3] => 6.00
)

[1] => Array
(
[id_question] => 2
[0] => 2
[id_chien] => 10
[1] => 10
[nb_notes] => 1
[2] => 1
[moyenne] => 7.00
[3] => 7.00
)
ce qui me semble correct...

j'ai encore une question, comment je récupère une seul info ex: la moyenne de l'array[1] #-o

Re: logique construction d'un script

Posté : 28 déc. 2011, 09:50
par xTG
$result[1]['moyenne']
;)

Re: logique construction d'un script

Posté : 28 déc. 2011, 12:10
par juliette
ok, c'est bien ce qu'il me semblais, $result[1]['moyenne'] mais ça ne marche pas, je viens de comprendre pour quoi:

dans mon cas, $result[1]['moyenne'] = 8.0 et il me fraudais = 8

un grand merci a tous, maintenant ca marche :D