[RESOLU] Problème affichage de certaines valeurs

Petit nouveau ! | 7 Messages

20 mars 2015, 10:39

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()

ViPHP
xTG
ViPHP | 7331 Messages

20 mars 2015, 12:34

Etant donné que nous n'avons pas la class Personne difficile de te répondre. ;)

Petit nouveau ! | 7 Messages

20 mars 2015, 17:36

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));
	}
}




?>

Mammouth du PHP | 688 Messages

20 mars 2015, 17:56

$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.

Petit nouveau ! | 7 Messages

20 mars 2015, 21:13

merci pour cette remarque mais avec ou sans ça le problème reste irrésolu

Petit nouveau ! | 7 Messages

24 mars 2015, 13:37

J'ai résolu le probleme, merci