8791 sujets

Développement web côté serveur, CMS

Bonjour,
Je m'en remets à vous face un problème de requête.
En effet, toutes mes valeurs passent bien, mais et je ne sais pas pourquoi je n'ai aucune mise à jour de ma base. Si vous pouviez m'aider, Merci par avance

le code

	public function save($data){
		
		try {
		    $bdd = new PDO('mysql:host='.HOST.';dbname='.DBNAME.'', ''.LOGIN.'', ''.PASSWD.'');
		} catch (PDOException $e) {
		    echo 'Connexion échouée : ' . $e->getMessage();
		}
		if(isset($data['id']) && !empty($data['id'])){
			//prepare
			$sql = 'UPDATE '.$this->table.' SET';
			$exec ="";
			foreach($data as $k=>$v){
				if($k !="id"){
					$sql .= " $k = '$v',";
				}
			}
			$sql = substr($sql, 0,-1);
			$sql .= " WHERE id=".$data['id'];	
					
			$req = $bdd->exec($sql);
			
		}
		else{
			//prepare
			$sql = 'INSERT INTO '.$this->table.' (';
			foreach($data as $k=>$v){
					$sql .= " $k,";
			}
			$sql = substr($sql, 0,-1);
			$sql .= ') VALUES (';
			foreach($data as $k=>$v){
					$sql .= " :$k,";
			}
			$sql = substr($sql, 0,-1);
			$sql .= ")";	
			
			//execute
			foreach($data as $k=>$v){
					$exec .= "'$k' => $v,";
			}	
			$exec = substr($exec, 0,-1);

			$req = $bdd->prepare($sql);
			$req->execute(array($exec));
		
		}
	}

Modifié par hophop (15 Feb 2013 - 15:32)
Merci pour ton aide JuseN...mais je vois pas trop où ça va...

j'ai changé mon code, mais même les erreurs ne me sont pas retournés...argh

	public function save($data){
		
		try {
		    $bdd = new PDO('mysql:host='.HOST.';dbname='.DBNAME.'', ''.LOGIN.'', ''.PASSWD.'');
		} catch (PDOException $e) {
		    echo 'Connexion échouée : ' . $e->getMessage();
		}
		
		if(isset($data['id']) && !empty($data['id'])){
			//prepare et execute
			$sql = 'UPDATE '.$this->table.' SET';
			$exec ="";
			foreach($data as $k=>$v){
				$quote_k = $bdd->quote($k);
				$v = addslashes($v);
				if($k !="id"){
					$sql .= " $k = :$k,";
					$exec .= " $quote_k => $v,";
				}
			}
			$sql = substr($sql, 0,-1);
			$sql .= ' WHERE id='.$data['id'];
			
			$exec = substr($exec, 0,-1);	
		}
		else{
			//prepare
			$sql = 'INSERT INTO '.$this->table.' (';
			foreach($data as $k=>$v){
					$sql .= " $k,";
			}
			$sql = substr($sql, 0,-1);
			$sql .= ') VALUES (';
			foreach($data as $k=>$v){
					$sql .= " :$k,";
			}
			$sql = substr($sql, 0,-1);
			$sql .= ")";	
			
			//execute
			foreach($data as $k=>$v){
					$exec .= "'$k' => $v,";
			}	
			$exec = substr($exec, 0,-1);
		
		}
		
		try {
			$req = $bdd->prepare($sql);
			$req->execute(array($exec));
		}
		catch(PDOException $e){
			echo '<p>Erreur lors de l\'insertion : '.$e->getMessage().'</p>';
		}
	}

Modifié par hophop (15 Feb 2013 - 17:02)
Tu commence directement par


	public function save($data){
		
		try {
		    $bdd = new PDO('mysql:host='.HOST.';dbname='.DBNAME.'', ''.LOGIN.'', ''.PASSWD.'');


j'espere que tu as renseigner avant les champs host dbname et pass / login.
oui oui, c'est juste un bout de code...je comprends ton doute Smiley smile
Bon en tous cas, maintenant j'ai l'erreur qui s'affiche et c'est le nombre de variable qui marche pas...étrange
Salut,

Tu as comparé le contenu de $sql et le résultat de array($exec) ?

Note en passant, pourquoi ne pas construire un tableau directement au lieu de créer une chaîne de caractères qui servira ensuite à peupler un tableau ?
$exec = array();
// ...
$exec[$key] = $value;
Ce sera plus efficace et moins susceptible de créer des erreurs.