Page 1 sur 1

Problème affichage de certaines valeurs

Posté : 20 mars 2015, 10:39
par Mellowh
Salutations!

Je dois créer un annuaire concernant le personnel d'une petite société, on m'a demandé de le faire avec PHP mais
en tant que débutant en php (pas en OOP) je suis venu sur ce forum car j'ai un problème, j'ai lu un cours http://fr.openclassrooms.com/informatiq ... s-stockees; j'ai eu des problèmes avec avec le méthode hydrate donc j'ai modifié mon code pour m'en passer.
Voici mon problème: quand je fais une insertion via un formulaire ça marche et les informations que j'ai entré s'affichent correctement, mais quand je fais un recherche certaines valeurs ne s'affichent pas(i.e l'Id et le Nom).
Voici le code, merci d'avance :wink:

classe Gestion
<?php


class Gestion{
	private $_db;
	
	public function __construct($db){
		$this->setDb($db);
	}
	public function add(Personne $perso){
		//$q=$this->_db->prepare('INSERT INTO mygestion.personne (nom_personne) VALUES (:nom_personne)');
		$q=$this->_db->prepare('INSERT INTO mygestion.personne (nom_personne,prenom, adr) VALUES (:nom_personne, :prenom , :adr)');
		$q->bindValue(':nom_personne',$perso->getNom());
		$q->bindValue(':prenom',$perso->getPrenom());
		$q->bindValue(':adr',$perso->getAdresse());
		$q->execute();
		$perso->setIdPersonne($this->_db->lastInsertId());
		$q->closeCursor();
	}
	public function count(){
		return $this->_db->query('SELECT COUNT(*) FROM personne')->fetchColumn();
	}
	public function exists($info){
		if(is_int($info)){
			return (bool) $this->_db->query('SELECT COUNT(*) FROM personne WHERE id_personne = '.$info)->fetchColumn();
		}
		$q = $this->_db->prepare('SELECT COUNT(*) FROM personne WHERE nom_personne =:nom_personne');
		$q->execute(array(':nom_personne'=>$info));
		return (bool) $q->fetchColumn();
	}
	public function get($info){
			$req = $this->_db->query('SELECT id_personne, nom_personne, prenom, adr FROM mygestion.personne WHERE nom_personne = ' . $this->_db->quote($info, \PDO::PARAM_INT));
			$donnees = $req->fetchAll(\PDO::FETCH_CLASS, 'Personne')[0];
			$req->closeCursor();
			return $donnees;
	}
	
	
	
	public function setDb(\PDO $db){
		$this->_db=$db;
	}
}



?>
le corps:
<?php
	require 'Gestion.php';
	require 'Personnage.php';
	session_start();
	if(isset($_GET['deconnexion'])){
		session_destroy();
		header('Location:.');
		exit();
	}
	$db= new PDO('mysql:host=localhost;dbname=mygestion','root','');
	$db->setAttribute(\PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
	$gestion = new Gestion($db);
	if(isset($_SESSION['perso'])){
		$perso = $_SESSION['perso'];
	}
	if(isset($_POST['ok']) && isset($_POST['nom'])&& isset($_POST['prenom'])&&isset($_POST['adr'])){
		$perso=new Personne();
		$perso->setNom($_POST['nom']);
		$perso->setPrenom($_POST['prenom']);
		$perso->setAdresse($_POST['adr']);
		if(!($perso->nomValide())){
			$message = 'Le nom choisi n\'est pas valide.';
			unset($perso);
		}
		elseif($gestion->exists($perso->getNom())){
			$message ='Ce nom est deja pris.';
			unset($perso);
		}
		else{
			$gestion->add($perso);
			$message  ='OK';
		}
	}
	elseif(isset($_POST['search'])&&isset($_POST['nom'])){
		if($gestion->exists($_POST['nom'])){
			$perso = $gestion->get($_POST['nom']);
		}
		else{
			$message ='Cette personne n\'existe pas.';
		}
	}

?>
<!DOCTYPE html>
	<head>
		<meta charset="utf-8" />
		<title>Gestion Etudiant</title>
	</head>
	<body>
		<p> Nombre de personne dans la base :<?php echo $gestion->count();?> </p>
		<?php
		if(isset($message)){
				echo '<p>',$message,'</p>';
			}
		if(isset($perso)){?>
			<p><a href="?deconnexion=1">deconnexion</a></p>
			<fieldset>
				<legend>Informations</legend>
				<p>
					
					Id : <?php echo htmlspecialchars($perso->getIdPersonne()); ?> </br>
					Nom : <?php echo htmlspecialchars($perso->getNom()); ?> </br>
					Prenom : <?php echo htmlspecialchars($perso->getPrenom()); ?> </br>
					Adresse : <?php echo htmlspecialchars($perso->getAdresse()); ?> </br>
				</p>
			</fieldset>
		</p>
		<?php
		}
		else{?>
				<form action="corps.php" method="post">
				<p>
					Nom : <ul><input type="text" name="nom"></ul>
					Prenom : <ul><input type="text" name="prenom"></ul>
					Adresse	: <ul><input type="text" name="adr"></ul>
					<ul><input type="submit" value="inserer" name="ok"></ul>
					<ul><input type="submit" value="rechercher" name="search"></ul>
				</p>
				</form>
		<?php
		}
		?>
	</body>
	</html>
	<?php
		if(isset($perso)){
			$_SESSION['perso']=$perso;
		}
	?>
Je crois que l'erreur se trouve au niveau de la méthode get()

Re: Problème affichage de certaines valeurs

Posté : 20 mars 2015, 12:34
par xTG
Etant donné que nous n'avons pas la class Personne difficile de te répondre. ;)

Re: Problème affichage de certaines valeurs

Posté : 20 mars 2015, 17:36
par Mellowh
haha désolé,
<?php
//namespace mytest\test;

class Personne{
	private $idPersonne;
	private $nom;
	private $prenom;
	private $adr;
	
	
	
	public function __construct(){
	
	}
	
	/*public function __construct(array $donnees){
		$this->hydrate($donnees);
	}
	public function hydrate(array $donnees){
		foreach($donnees as $key=>$value){
			$method='set'.ucfirst($key);
			if(method_exists($this,$method)){
				$this->$method($value);
			}
		}
	}*/
	public function getIdPersonne(){
		return $this->idPersonne;
	}
	public function getNom(){
		return $this->nom;
	}
	public function getPrenom(){
		return $this->prenom;
	}
	public function getAdresse(){
		return $this->adr;
	}
	/*public function sex(){
		return $this->sex;
	}
	public function idStatut(){
		return $this->idStatut;
	}
	public function idGrade(){
		return $thid->idGrade;
	}*/
	
	public function setNom($nom){
			$this->nom=$nom;
	}
	public function setIdPersonne($id){
			$this->idPersonne=$id;
	}
	public function setPrenom($prenom){
			$this->prenom=$prenom;
	}
	public function setAdresse($adresse){
			$this->adr=$adresse;
	}
	
	public function nomValide(){
		return (!empty($this->nom));
	}
}




?>

Re: Problème affichage de certaines valeurs

Posté : 20 mars 2015, 17:56
par tof73
$req = $this->_db->query('SELECT id_personne, nom_personne, prenom, adr FROM mygestion.personne WHERE nom_personne = ' . $this->_db->quote($info, \PDO::PARAM_INT));

vu que $info est une chaine de caractère, c'est une idée bizarre de vouloir un paramètre entier (PDO::PARAM_INT) au lieu d'une chaine.

Re: Problème affichage de certaines valeurs

Posté : 20 mars 2015, 21:13
par Mellowh
merci pour cette remarque mais avec ou sans ça le problème reste irrésolu

Re: [RESOLU] Problème affichage de certaines valeurs

Posté : 24 mars 2015, 13:37
par Mellowh
J'ai résolu le probleme, merci