IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Erreur RDO : Only variables should be passed by reference


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Erreur RDO : Only variables should be passed by reference
    Bonjour,

    Dans mon code (ci-dessous), j'ai une erreur de référence de variable (si je comprends bien) mais je ne saisi pas bien où car à mon sens je passe bien les valeurs comme il faut. Peut-on éclairer ma lanterne de développeur débutant? Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    <?php
    class Breve
    {
    	// Attributs
    	private $_id;
    	private $_texte;
    	private $_dt_creation;
     
    	public function __construct(array $data)
    	{
    		$this->setId($data['id']);
    		$this->setTexte($data['texte']);
    		$this->setDt_creation($data['dt_creation']);
    	}
     
    	//setters
    	public function setId($id)
    	{
    		if((is_int($id)) and ($id>0))
    		{
    			$this->_id = $id;
    		}
     
    	}
     
    	public function setTexte($texte)
    	{
    		if(is_string($texte))
    		{
    			$this->_texte = $texte;
    		}
     
    	}
     
    	public function setDt_creation($dt_creation)
    	{
    		list($d, $m, $y) = explode("-", $dt_creation);
    		if(checkdate($m, $d, $y))
    		{
    			$this->_dt_creation = $dt_creation;
    		}
     
    	}
     
    	//getters
    	public function getId()
    	{
    		return $this->_id;
    	}
     
    	public function getTexte()
    	{
    		return $this->_texte;
    	}
     
    	public function getDt_creation()
    	{
    		return $this->_dt_creation;
    	}
    }
     
    class breveManager
    {
     
    	private $_db;
     
    	public function __construct($db)
    	{
    		$this->setDb($db);
    	}
     
    	public function setDb(PDO $dbh)	// un objet PDO est attendu
    	{
    		$this->_db = $dbh;
    	}
     
    	// Insertion d'une brève
    	public function addBreve(Breve $breve)	// un objet breve est attendu
    	{
    		$sql = 'INSERT INTO breve (texte, dt_creation) VALUES (:texte, :dt_creation)';
    		$stmt = $this->_db->prepare($sql);
    		$stmt->bindParam(':texte', htmlspecialchars($breve->getTexte()));
    		$stmt->bindParam(':dt_creation', $breve->getDt_creation());
    		$stmt->execute();
    	}
    }
     
    // creation d'un objet breve
    $breve_data = array('id'=> 1, 'texte'=> "Ceci est une courte brève !", 'dt_creation'=> '16-06-2019');
    $breve = new Breve($breve_data);
     
    // affectation dans la variable $db de la connexion PDO
    $db = new PDO('mysql:host=localhost;dbname=dbpost', 'root', '');
     
    // instanciation de la classe breveManager, la connexion PDO est passée en paramètre
    $manager = new breveManager($db);
     
    // appel de la methode addBreve nous passon un objet breve en argument
    $manager->addBreve($breve);
    ?>

  2. #2
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 013
    Points
    2 013
    Billets dans le blog
    1
    Par défaut
    Il aurait été utile de préciser à quelle ligne apparaît l'erreur, mais la solution est d'enregistrer la valeur dans une variable et de passer cette variable à la fonction plutôt que la valeur directement. Je suppose que c'est parce que celle-ci modifie la variable et que c'est cette variable modifiée que tu récupères dans la suite de ton code.

  3. #3
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Oui pardon, j'ai oublié ce détail
    Citation Envoyé par Sodium Voir le message
    Il aurait été utile de préciser à quelle ligne apparaît l'erreur, mais la solution est d'enregistrer la valeur dans une variable et de passer cette variable à la fonction plutôt que la valeur directement. Je suppose que c'est parce que celle-ci modifie la variable et que c'est cette variable modifiée que tu récupères dans la suite de ton code.

    L'erreur arrive sur les ligne 82 et 83


  4. #4
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 013
    Points
    2 013
    Billets dans le blog
    1
    Par défaut
    Eh bien stocke tout simplement la valeur que tu veux bind dans une variable auparavant et tout devrait bien se passer

    Je n'ai aucune idée de pourquoi cela se produit avec cette méthode en particulier et si quelqu'un a une idée je suis preneuse

  5. #5
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,
    D'abord pas de htmlspecialchars.
    A moins que la méthode ne retourne une référence, vous ne pouvez pas l'utiliser avec bindParam (qui attend comme 2ème argument , une référence).
    La solution est toute simple utiliser bindValue (bindParam est à utiliser dans certains cas, pas partout)

  6. #6
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Curiosité informatique
    Bon ben ce problème laisse la communauté sans voix, tout comme moi.

    La machine retourne une erreur que l'on passe la fonction dans la fonction ou dans une valeur. Cette erreur est : fonction non définie. Ce qui est curieux car elle est bien référencée dans le manuel PHP.

    Quoi qu'il en soit, je fais donc autrement en passant les valeurs dans le execute : execute([$A, $B]);

    Ca fonctionne.

    Précisions : mes deux PC sont des core i5 et i7 sous windows 10 et mon serveur est à jour et PHP version 7.2.4.

    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. php & Only variables should be assigned by reference
    Par Katian dans le forum Langage
    Réponses: 7
    Dernier message: 12/08/2019, 18h02
  2. Only variable references should be returned by reference
    Par Jwt31 dans le forum CodeIgniter
    Réponses: 2
    Dernier message: 15/10/2016, 21h43
  3. Réponses: 7
    Dernier message: 03/06/2009, 10h08
  4. [erreur] portée de variables
    Par bhdih1 dans le forum Access
    Réponses: 11
    Dernier message: 12/11/2005, 18h20
  5. Erreur "For loop variable simple local varaible"
    Par Yepazix dans le forum Langage
    Réponses: 13
    Dernier message: 17/09/2005, 22h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo