[RESOLU] Appel de fonction avec une variable

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 : [RESOLU] Appel de fonction avec une variable

Re: Appel de fonction avec une variable

par Thomasfkc » 17 mai 2014, 13:42

Utilises intval() sur tes variables comme écrit par sirakawa.
Merci beaucoup, ça marche maintenant !
$requetetableau2 = $bdd->query("SELECT * FROM tableau_games");
$gamestableau = $requetetableau2->fetchAll();
$matchindex1 = intval($gamestableau[0]['matchid']);
$roundid1 = intval($gamestableau[0]['roundid']);
$scoreun1 = intval($gamestableau[0]['scoreone']);
$scoredeux1 = intval($gamestableau[0]['scoretwo']);
$KO->setResByMatch($matchindex1, $roundid1, $scoreun1, $scoredeux1);

Re: Appel de fonction avec une variable

par xTG » 17 mai 2014, 13:28

Utilises intval() sur tes variables comme écrit par sirakawa.

Re: Appel de fonction avec une variable

par Thomasfkc » 17 mai 2014, 12:40

Quand je fais :
$requetetableau2 = $bdd->query("SELECT * FROM tableau_games");
$gamestableau = $requetetableau2->fetchAll();
$matchindex1 = $gamestableau[0]['matchid'];
$roundid1 = $gamestableau[0]['roundid'];
$scoreun1 = $gamestableau[0]['scoreone'];
$scoredeux1 = $gamestableau[0]['scoretwo'];
var_dump($matchindex1,$roundid1,$scoreun1,$scoredeux1); // affiche string(1) "0" string(1) "1" string(1) "5" string(1) "0"
$KO->setResByMatch($matchindex1, $roundid1, $scoreun1, $scoredeux1); // ne fonctionne pas
Par contre comme ceci ça marche :
$matchindex1 = 0;
$roundid1 = 1;
$scoreun1 = 5;
$scoredeux1 = 0;
var_dump($matchindex1,$roundid1,$scoreun1,$scoredeux1); // affiche int(0) int(1) int(5) int(0)
$KO->setResByMatch($matchindex1, $roundid1, $scoreun1, $scoredeux1); // fonctionne
Le problème doit donc venir de ma base de donnée ...

Re: Appel de fonction avec une variable

par wng » 17 mai 2014, 10:44

@sirakawa autant pour moi, je suis partit sur le principe inverse pour la portée des variables.

Sur tes variables, avant de les passés dans ta fonctions, fait-tu : intval($var); ? obtiens tu le même résultat ?

As-tu essayer de vérifier, à l'intérieur de ta fonction, que tes variable ne sont ni strictement null ni empty ? ( $var !== null && !empty($var) ) ? place le code en début de ta fonction avec un var_dump ou un print de test pour vérifier comment est transformer ta variable dans la fonction.

Re: Appel de fonction avec une variable

par Thomasfkc » 17 mai 2014, 10:29

Quel type d'erreur à tu ?
 if (!$this->isMatchCreated($m, $r) ||                                               // Valid round and match?
            $this->bracket[$r][$m]['s1'] == -1 || $this->bracket[$r][$m]['s2'] == -1 ||     // Are competitors "ready"/exist?
            !is_int($s1) || !is_int($s2) || $s1 < 0 || $s2 < 0 || $s1 == $s2) {             // Valid scores?
            return false;
        }
Possibilité, tes is_int() peuvent posé problème si tes variable retourne une string, tu peut cependant utiliser intval() pour forcer un int en string de redevenir un int ( attention sur une string tu obtiendra un mauvais résultat !!! )

Pense également à vérifier si tes variables passer sont !== null et !empty().
Je n'ai aucune erreur, juste que le score ne s'affiche pas

Quand on a un problème de ce genre, on fait afficher les vriables concernées:
public function setResByMatch($m, $r, $s1, $s2) {
var_dump($m);
*var_dump($r);
var_dump($s1);
var_dump($s2);
// le code de ma fonction
}
Si les variables n'ont pas de valeur, il faut tester avant.
Dans le programme qui appelle cette fonction, il y a un
include("fichier")
ajouter:
var_dump($matchindex); //etc...
Que je fasse avant ou après le passage dans la fonction j'ai toujours ça qui s'affiche pour mon var_dump :
string(1) "0"
string(1) "1"
string(1) "5"
string(1) "0"

Re: Appel de fonction avec une variable

par sirakawa » 17 mai 2014, 08:32

Quand on a un problème de ce genre, on fait afficher les vriables concernées:
public function setResByMatch($m, $r, $s1, $s2) {
var_dump($m);
*var_dump($r);
var_dump($s1);
var_dump($s2);
// le code de ma fonction
}
Si les variables n'ont pas de valeur, il faut tester avant.
Dans le programme qui appelle cette fonction, il y a un
include("fichier")
ajouter:
var_dump($matchindex); //etc...

@wng : Le fait que les variables soient dans un include ne pose de problème que si on utilise ces variables directement dans la fonction:
function f()
{
$return $z+1;
}
include ("include");
var_dump(f();
qu'on résoudrait en mettant
function f()
{
global $z;
$return $z+1;
}
include ("include");
var_dump(f();

Re: Appel de fonction avec une variable

par wng » 17 mai 2014, 01:07

Quel type d'erreur à tu ?
 if (!$this->isMatchCreated($m, $r) ||                                               // Valid round and match?
            $this->bracket[$r][$m]['s1'] == -1 || $this->bracket[$r][$m]['s2'] == -1 ||     // Are competitors "ready"/exist?
            !is_int($s1) || !is_int($s2) || $s1 < 0 || $s2 < 0 || $s1 == $s2) {             // Valid scores?
            return false;
        }
Possibilité, tes is_int() peuvent posé problème si tes variable retourne une string, tu peut cependant utiliser intval() pour forcer un int en string de redevenir un int ( attention sur une string tu obtiendra un mauvais résultat !!! )

Pense également à vérifier si tes variables passer sont !== null et !empty().

Re: Appel de fonction avec une variable

par Thomasfkc » 16 mai 2014, 22:08

Tes 4 variables sont déclarer dans un de tes includes ?
Tu as simplement oublier de les spécifier avant leur utilisation ?
Il n'y a dans mon fichier de configuration que ceci :
<?php
try
{
    $bdd = new PDO('mysql:host=***;dbname***', '***', '***');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

?>
Les variables sont définies au début du fichier :
$requetetableau = $bdd->query("SELECT * FROM tableau_games");
$gamestableau = $requetetableau->fetchAll();
$match1 = $gamestableau[0]['matchid'];
$round1 = $gamestableau[0]['roundid'];
$scoreun1 = $gamestableau[0]['scoreone'];
$scoredeux1 = $gamestableau[0]['scoretwo'];
possible erreur venant de là :
Même corrigé ça ne marche pas. C'est que juste avant j'avais essayé de rajouter juste avant, et cela marchait.
$matchindex = 1;
$roundid = 1;
$scoreun1 = 8;
$scoredeux1 = 4;
Je pense donc que le problème viens de ma base de donnée, que $gamestableau[0]['matchid']; ne donne pas ce qu'il faut

Re: Appel de fonction avec une variable

par wng » 16 mai 2014, 21:49

Tes 4 variables sont déclarer dans un de tes includes ?
Tu as simplement oublier de les spécifier avant leur utilisation ?

Si ils sont dans un fichier include il est fort probable que la porté des variables soit le problème ...

EDIT : possible erreur venant de là :

$requetetableau = $bdd->query("SELECT * FROM tableau_games");
$gamestableau = $requetetableau->fetchAll();
$match1 = $gamestableau[0]['matchid'];
$round1 = $gamestableau[0]['roundid'];
$scoreun1 = $gamestableau[0]['scoreone'];
$scoredeux1 = $gamestableau[0]['scoretwo'];


$KO->setResByMatch(0, 1, 5, 0); // fonctionne
$KO->setResByMatch($matchindex, $roundid, $score1, $score2); // ne fonctionne pas alors que les 4 variables contiennent (1,1,8,4)

// ne serait-pas plutot : ???
$KO->setResByMatch($match1, $round1, $scoreun1, $scoredeux1);

Re: Appel de fonction avec une variable

par Thomasfkc » 16 mai 2014, 21:41

Possibilité de voir ce que fait ta fonction ?
Car normalement passer des arguments par variables ne pose strictement aucun souci ...
En fait j'utilise un fichier class_knockout.php que j'include au début de mon script. J'ai collé le code de ce fichier ici.

Mon fichier principal, en entier, ressemble à ça :
<?php
include("config/database.php");
$requetetableau = $bdd->query("SELECT * FROM tableau_games");
$gamestableau = $requetetableau->fetchAll();
$match1 = $gamestableau[0]['matchid'];
$round1 = $gamestableau[0]['roundid'];
$scoreun1 = $gamestableau[0]['scoreone'];
$scoredeux1 = $gamestableau[0]['scoretwo'];

error_reporting(E_ALL);
include("classes/class.tableau.php");
$GDLIB_INSTALLED = (function_exists("gd_info")) ? true : false;
$competitors = array('Joueur 1','Joueur 2','Joueur 3','Joueur 4','Joueur 5','Joueur 6','Joueur 7','Joueur 8');
$KO = new KnockoutGD($competitors);
$bracket = $KO->getBracket();

$KO->setResByMatch(0, 1, 5, 0); // fonctionne
$KO->setResByMatch($matchindex, $roundid, $score1, $score2); // ne fonctionne pas alors que les 4 variables contiennent (1,1,8,4)

if ($GDLIB_INSTALLED) {
    $im = $KO->getImage("Tournoi non commence");
    header('Content-type: image/png');
    imagepng($im);
}

?>

Re: Appel de fonction avec une variable

par wng » 16 mai 2014, 21:23

Possibilité de voir ce que fait ta fonction ?

Car normalement passer des arguments par variables ne pose strictement aucun souci ...

Appel de fonction avec une variable

par Thomasfkc » 16 mai 2014, 21:16

Bonjour,
J'essaie depuis hier d'éxécuter une fonction avec une variable comme paramètres. Ma fonction est définie comme ceci :
public function setResByMatch($m, $r, $s1, $s2) {
// le code de ma fonction
}
"

Lorsque je fais comme ceci ça marche :
$KO->setResByMatch(0, 1, 5, 0); 
Mais lorsque j'essaie de mettre comme paramètre une fonction, ça ne marche pas. Ex :
$matchindex = 0;
$roundid = 1;
$score2 = 5;
$score1 = 0;
$KO->setResByMatch($matchindex, $roundid, $score1, $score2);
Quelqu'un sait comment faire ?
Merci d'avance !