Page 1 sur 1

récupération et affichages de données d'une requête

Posté : 01 août 2013, 14:52
par Cécile
Bonjour,

Cela fait maintenant plusieurs jours que je suis bloquée sur une même erreur qui revient assez fréquemment.

Je n'arrive en effet pas à afficher les champs de ma ligne à partir de ma requête php.

En gros, voilà ma fonction et ma vue :

public function user($id) {

$requete = 'SELECT * FROM Commerciaux WHERE "id"="' . "$id" .'"';

$q = $this->db->query($requete);

$r = $q->fetch_assoc();

return $r;

}

<h1><?php echo _t( 'Utilisateur: Edit' ); ?></h1>

<?php $result = $this->user; ?>

<form method="post" action="<?php echo BASE_URL;?>user/editSave/<?php echo $result['id']; ?>">

<label><?php echo _t( 'Nom' ); ?></label><input type="text" name="Nom" value="<?php echo $result['Nom']; ?>" /><br />

<label><?php echo _t( 'Password' ); ?></label><input type="text" name="Password" /><br />

<label><?php echo _t( 'Division' ); ?></label>

<select name="Division">

<option value = "Grands comptes" <?php if($result['Division'] == 'Grands comptes') echo 'selected'; ?>><?php echo _t( 'Grands comptes' ); ?></option>

<option value = "Comptes décentralisés" <?php if($vresult['Division'] == 'Comptes décentralisés') echo 'selected'; ?>><?php echo _t( 'Comptes décentralisés' ); ?></option>

<option value = "Indirect" <?php if($result['Division'] == 'Indirect') echo 'selected'; ?>><?php echo _t( 'Indirect' ); ?></option>

</select><br />

<label>&nbsp;</label><input class="btn" type="submit" />

</form>

Et lorsque je retourne un tableau (grâce à une fonction while qui récupère toutes les valeurs potentielles) dans ma fonction user et que j'utilise donc une boucle foreach, une erreur s'affiche. Si je comprends bien, ma fonction ne retourne pas un tableau parce qu'une seule ligne est résultat de ma requête.

Merci d'avance pour votre aide.

Re: récupération et affichages de données d'une requête

Posté : 01 août 2013, 15:11
par Mazarini
Le code d'affichage est dans une méthode ? (à cause du $this->user). J'ai du mal à comprendre ton utilisation des objets (manque du code ?).

Re: récupération et affichages de données d'une requête

Posté : 01 août 2013, 15:21
par yann18
bonjour,
<?php $result = $this->user; ?>
tu définis une méthode user() qui prend pour paramètre $id, sauf qu'au moment de l'appeler tu lui transmets aucun paramètre.
A quoi correspond finalement le paramètre $id?

Re: récupération et affichages de données d'une requête

Posté : 01 août 2013, 16:16
par Cécile
Oui , je ne vous ai pas affiché le controller.
MAis le problème venait de la définition de L'id dans ma requête. J'ai changé par $requete = 'SELECT * FROM Commerciaux WHERE id = ' . intval($id);
et ça marche tout de suite mieux.

Mais du coup, lorsque j'ai une chaine de caractère, je ne sais pas comment faire.

Par exemple dans ce code :
	public function afficheTable($Nom) {
		$array = array();
		$requete = 'SELECT * FROM Generale WHERE Com = ' . strval($Nom);
		$q = $this->db->query($requete);
		while($r = $q->fetch_assoc()) {
			$array[] = $r;
		}
		return $array;
	}
<?php
	foreach($this->afficheTable as $key => $value) {
		echo '<tr>';
		echo '<td>' . $value['id'] . '</td>';
		echo '<td>' . $value['Com']    . '</td>';
	} 
?>
Le foreach ne fonctionne pas...

Le controller est le suivant :
	
public function view() {
		$Nom = $_POST['Nom'];
		$this->view->afficheTable = $this->model->afficheTable($Nom);
		$this->view->render('consult/view');
	}

Re: récupération et affichages de données d'une requête

Posté : 01 août 2013, 19:49
par yann18
il faut plutôt protéger la chaîne de caractères avec la fonction mysql_real_escape_string et non strval:
public function afficheTable($Nom) {
                $requete = 'SELECT * FROM Generale WHERE Com = "'.mysql_real_escape_string($Nom).'" ' );
                $q = $this->db->query($requete);
               return $q;
        }
Dans ta vue pour tester si tu retournes bien les données il suffit de faire var_dump sur le tableau de données provenant de la bd:
<?php
 var_dump($this->afficheTable);

        foreach($this->afficheTable as $key => $value) {
                echo '<tr>';
                echo '<td>' . $value['id'] . '</td>';
                echo '<td>' . $value['Com']    . '</td>';
        }
?>