Paramètres de fonction

Résolu
Bonjour,

Mon problème est simple mais je m'arrache les cheveux.. (car je ne trouve pas)

Voici la fonction de base:

function rating_bar($id,$units='',$static='') { ...

Quand je l'appel sur ma page PHP, je fais:

<?php rating_bar('1', ''); ?>

Là, ca marche, $id a une valeur, elle est fixé à 1.

Mais j'aimerai qu'à la place de '1' se soit une autre variable... C'est possible?

Si je mets ca:

<?php rating_bar($TOTO, ''); ?>

Le code génère qu'une seule nouvelle ligne dans ma table SQL nommé id="$TOTO"... Et pas tous les variables de $TOTO.

Merci d'avance pour votre aide, si vous voulez bien prendre le temps de me répondre.
Vincent.

13 réponses

  1. Tout fonctionne bien avec <?php rating_bar($cur_post['poster_id'], ''); ?>
    C'est moi qui faisais n'importe quoi...

    UN GRAND MERCI pour votre aide précieuse.

    Salutations!
    Vincent.
    1. Déjà), on voit qu'il ne faut pas de ' ' autour de ton $TOTO et que ton code plantera si tu envoies des données avec des apostrophes.

      -> retour à la case <?php rating_bar($cur_post['poster_id'], ''); ?>
      Par contre, ce qui serait intéressant, c'est le code qui appelle la fonction
      1. <?php
        
        function rating_bar($id,$units='',$static='') { 
        
        require('_config-rating.php'); // get the db connection info
        	
        //set some variables
        $ip = $_SERVER['REMOTE_ADDR'];
        if (!$units) {$units = 5;}
        if (!$static) {$static = FALSE;}
        
        // get votes, values, ips for the current rating bar
        $query=mysql_query("SELECT total_votes, total_value, used_ips FROM $rating_dbname.$rating_tableName WHERE id='$id' ")or die(" Error: ".mysql_error());
        
        
        // insert the id in the DB if it doesn't exist already
        // see: http://www.masugadesign.com/the-lab/scripts/unobtrusive-ajax-star-rating-bar/#comment-121
        if (mysql_num_rows($query) == 0) {
        $sql = "INSERT INTO $rating_dbname.$rating_tableName ('id','total_votes', 'total_value', 'used_ips') VALUES ('$id', '0', '0', '')";
        $result = mysql_query($sql);
        }
        
        $numbers=mysql_fetch_assoc($query);
        
        
        if ($numbers['total_votes'] < 1) {
        	$count = 0;
        } else {
        	$count=$numbers['total_votes']; //how many votes total
        }
        $current_rating=$numbers['total_value']; //total number of rating added together and stored
        $tense=($count==1) ? "vote" : "votes"; //plural form votes/vote
        
        // determine whether the user has voted, so we know how to draw the ul/li
        $voted=mysql_num_rows(mysql_query("SELECT used_ips FROM $rating_dbname.$rating_tableName WHERE used_ips LIKE '%".$ip."%' AND id='".$id."' ")); 
        
        // now draw the rating bar
        $rating_width = @number_format($current_rating/$count,2)*$rating_unitwidth;
        $rating1 = @number_format($current_rating/$count,1);
        $rating2 = @number_format($current_rating/$count,2);
        
        
        if ($static == 'static') {
        
        		$static_rater = array();
        		$static_rater[] .= "\n".'<div class="ratingblock">';
        		$static_rater[] .= '<div id="unit_long'.$id.'">';
        		$static_rater[] .= '<ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;">';
        		$static_rater[] .= '<li class="current-rating" style="width:'.$rating_width.'px;">Currently '.$rating2.'/'.$units.'</li>';
        		$static_rater[] .= '</ul>';
        		$static_rater[] .= '<p class="static">Note : <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.') <em>This is \'static\'.</em></p>';
        		$static_rater[] .= '</div>';
        		$static_rater[] .= '</div>'."\n\n";
        
        		return join("\n", $static_rater);
        
        
        } else {
        
              $rater ='';
              $rater.='<div class="ratingblock">';
        
              $rater.='<div id="unit_long'.$id.'">';
              $rater.='  <ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;">';
              $rater.='     <li class="current-rating" style="width:'.$rating_width.'px;">Currently '.$rating2.'/'.$units.'</li>';
        
              for ($ncount = 1; $ncount <= $units; $ncount++) { // loop from 1 to the number of units
                   if(!$voted) { // if the user hasn't yet voted, draw the voting stars
                      $rater.='<li><a href="db.php?j='.$ncount.'&amp;q='.$id.'&amp;t='.$ip.'&amp;c='.$units.'" title="'.$ncount.' sur '.$units.'" class="r'.$ncount.'-unit rater" rel="nofollow">'.$ncount.'</a></li>';
                   }
              }
              $ncount=0; // resets the count
        
              $rater.='  </ul>';
              $rater.='  <p';
              if($voted){ $rater.=' class="voted"'; }
              $rater.='>Note : <strong> '.$rating1.'</strong>/'.$units.' ('.$count.' '.$tense.')';
              $rater.='  </p>';
              $rater.='</div>';
              $rater.='</div>';
              return $rater;
         }
        }
        ?>
        1. Pourquoi ne donnes-tu pas le code du script ?
          Et bien je ne vois pas trop ce que je pourrai donner...
          La fonction marche déjàà un autre endroit, mais avec des valeurs fixe, du style :
          rating_bar('1', '')


          La tout ce qu'il me faut c'est que le '1' soit une variable.

          Avec <?php $TOTO = $cur_post['poster_id']; rating_bar("'".$TOTO."'", ''); ?>
          ca ne marche toujours pas..
          1. Si tu as une erreur SQL, c'est que ta requête est mal écrite, c'est un autre problème.
            Pourquoi ne donnes-tu pas le code du script ?
            1. rating_bar("'".$cur_post['poster_id']."'", '')


              - > Donne : Error: You have an error in your SQL syntax;
              1. ARG!!

                mon $TOTO c'est en fait un $cur_post['poster_id']

                Ca ne passe pas..
                1. mon $TOTO c'est en fait un $cur_post['poster_id']
                  À donner de mauvaises informations, on récolte de mauvaises réponses.
              2. Bonjour,

                <?php rating_bar(" ' ".$TOTO." ' ", ''); ?>

                peut etre non ?
                1. Pourquoi peut-être ?
                  Non, il y a des espaces en trop.
                2. ha oui j'ai oublié de les enlever c'etait pour mieux voir ><
              3. <?php rating_bar("'".$TOTO."'", ''); ?>

                ou bien
                <?php rating_bar("'$TOTO'",''); ?>

                entre autres possibilités
                1. J'ai compris comment résoudre le problème.

                  Il faut que si $TOTO vaut 5, ca retourne '5' et pas 5
                  afin d'obtenir
                  <?php rating_bar('5', ''); ?>

                  et pas
                  <?php rating_bar(5, ''); ?> 

                  sinon c'est mal interprété par la fonction.

                  Mais comment passer une variable de X à 'X' ?
                  En faisant ca:
                  <?php rating_bar("'"$TOTO"'", ''); ?>

                  ca ne marche pas...
                  1. Et que donne <?php rating_bar("$TOTO", ''); ?> ?!
                  2. Pourquoi répondre si tu ne le sais pas ?
                    Inutile, c'est la même chose que <?php rating_bar($TOTO, ''); ?>
                  3. C'est pas parce que je ne le sais pas, c'est que je n'en suis pas sûr, je me souviens qu'il y a des différences entre les ' et les " en PHP si on utilise le nom d'une variable mais le PHP c'est loin pour moi et que souvent, bon nombre d'erreurs se font à cause de ça.

                    Donc je réponds car c'est un forum d'entraide et que tu n'es pas le seul autorisé que ça te plaise ou non point barre.

                    Bref.
                2. Je n'ai aucune idée de ce que fait ta fonction rating_bar, mais d'après ce que tu décris, la variable $TOTO doit être vide.
                  Peux-tu montrer ton script (en cachant les mots de passe s'il y en a )
                  1. Bonjour le père et merci pour ton aide.

                    Si je mets :
                    <?php rating_bar('$TOTO', ''); ?>

                    le champ $id dans la table est alors rempli par $TOTO
                    (Expression... normal)

                    En revanche, si je mets
                    <?php rating_bar($TOTO, ''); ?>

                    Une seule ligne est créée et le champ $id dans la table est laissé vide, alors qu'il devrait y avoir création de plusieurs ligne pour toutes les valeurs de $TOTO.
                    1. Bonjour

                      Attention aux apostrophes autour de $TOTO...
                      tu es sûr que tu as vraiment essayé
                      <?php rating_bar($TOTO, ''); ?>
                      Ce ne serait pas plutôt
                      <?php rating_bar('$TOTO', ''); ?> 
                      que tu as fait ?