Problème écriture dans la bdd en Php objet (PDO)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème écriture dans la bdd en Php objet (PDO)

Re: Problème écriture dans la bdd en Php objet (PDO)

par batala4 » 30 mars 2014, 20:12

Mon move marche bien mon fichier est bien uploader mais je n' arrive pas a ecrire le nom du repertoire musical dans la meme table
Voici mon code :


<?php
require_once 'accesBDD.php';

class Upload
{
private $_nom ;
private $_fichier ;
private $_chemin ;

private $_sqlAjouter ;
private $_reqAjouter ;

private $_sqlafficher;
private $_reqafficher;

public function __construct()
{

}

public function ajouterMusique($BDD)
{
if(isset($_FILES['avatar']))
{
//stockage des fichiers uploader dans le dossier upload
$chemin = 'upload/';

//définition du fichier
$fichier = basename($_FILES['avatar']['name']);


//copie du fichier uploader dans le répertoire définie précedemment
if(move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{

$this->_sqlAjouter = 'INSERT INTO musique(nommorceau, cheminmorceau) VALUES(:toto, :titi )' ;
$this->_reqAjouter = $BDD->getConnexion()->prepare($this->_sqlAjouter);
$this->_reqAjouter->execute(array(':toto'=>$fichier, ':titi'=>$chemin));

echo 'Upload effectué avec succès !';

}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Echec de l\'upload !';
}

}
}

}
?>

Je ne sais pas si le nom saisi dans mon formulaire sera dedans l' insert dans le move ou il faut que je creer une classe pour lui, je suis perdu et desesperer, merci de votre aide

Re: Problème écriture dans la bdd en Php objet (PDO)

par moogli » 18 mars 2014, 09:16

Salut,

A priori le code s'affiche, regarde le source html tu devrais y trouver le reste.
Est ce bien une page .php ?
Est ce que tu regarde bien la chose via un serveur web ? (Généralement httpd).

Merci d'utiliser le bbcode afin de rentre ton code lisible facilement sur le forum (et limiter le défilement vertical ;) )


@+

Re: Problème écriture dans la bdd en Php objet (PDO)

par batala3 » 17 mars 2014, 22:35

voila ce que j' obtient, je ne sais pas a quoi cela correspond

connexion() ; $newMembre = new Membre($_POST['nom'], $_POST['prenom'], $_POST['dateDeNaissance'], $_POST['telephone1'], $_POST['telephone2'], $_POST['adresseMail'], $_POST['ville'], $_POST['codePostal'], $_POST['ligneAdresse1'], $_POST['ligneAdresse2'], $_POST['ligneAdresse3'], $_POST['listeStatuts']); $newMembre->ajouter($connectBDD) ; $connectBDD->deconnexion() ; ?>

Re: Problème écriture dans la bdd en Php objet (PDO)

par batala3 » 17 mars 2014, 22:30

Donc voila je veux creer un espace membre pour mon site tout ceci en pdo, j' ai donc créer 2 classes: une classe pour la bdd et une pour les membres, voici ce que cela donne:

la classe bdd:
<?php
class AccesBDD
{
	private $_user ;
	private $_password ;

	private $_connexion ;

	public function __construct($user, $password)
	{
		$this->_user = $user ;
		$this->_password = $password ;
	}

	public function connexion()
	{
		$this->_connexion = new PDO('mysql:host=localhost;dbname=test', $this->_user, $this->_password);
		if(!$this->_connexion)
		{
			echo 'Connexion à la base de données impossible';
		}
		else
		{
			echo 'Connexion réussie';
			echo '</br>';
		}
	}

	public function deconnexion()
	{
		$_connexion = null ;
	}
	
	public function getConnexion()
	{
		return $this->_connexion ;
	}
}
?>


la classe membre
<?php
require_once 'accesBDD.php';

class Membre
{
	private $_ID ;
	private $_nom ;
	private $_prenom ;
	private $_dateDeNaissance ;
	private $_telephone1 ;
	private $_telephone2 ;
	private $_adresseMail ;
	private $_ville ;
	private $_codePostal ;
	private $_ligneAdresse1 ;
	private $_ligneAdresse2 ;
	private $_ligneAdresse3 ;
	private $_statut ;
	private $_login ;
	private $_password ;
	
	private $_sqlAjouter ;
	private $_reqAjouter ;
	
	public function __construct($nom, $prenom, $dateDeNaissance, $telephone1, $telephone2, $adresseMail, $ville, $codePostal, $ligneAdresse1, $ligneAdresse2, $ligneAdresse3, $statut)
	{
		$this->_nom = $nom ;
		$this->_prenom = $prenom ;
		$this->_dateDeNaissance = $dateDeNaissance ;
		$this->_telephone1 = $telephone1 ;
		$this->_telephone2 = $telephone2 ;
		$this->_adresseMail = $adresseMail ;
		$this->_ville = $ville ;
		$this->_codePostal = $codePostal ;
		$this->_ligneAdresse1 = $ligneAdresse1 ;
		$this->_ligneAdresse2 = $ligneAdresse2 ;
		$this->_ligneAdresse3 = $ligneAdresse3 ;
		$this->_statut = $statut ;
		
		$this->_login = $this->_prenom[0] . $this->_nom ;
		$this->_password = $this->_prenom[0] . $this->_nom ;
	}
	
	public function ajouter($BDD)
	{
		$this->_sqlAjouter = 'INSERT INTO infos(nom, prenom, dateDeNaissance, telephone1, telephone2, adresseMail, ville,  codePostal, ligneAdresse1, ligneAdresse2, ligneAdresse3, login, password) VALUES(:nom, :prenom, :dateDeNaissance, :telephone1, :telephone2, :adresseMail, :ville, :codePostal, :ligneAdresse1, :ligneAdresse2, :ligneAdresse3, :statut, :login, :password)' ;
		
		$this->_connexion = $BDD->getConnexion();
		
		$this->_reqAjouter = $this->_connexion->prepare($this->_sqlAjouter);
		$this->_reqAjouter->execute(array(':nom' => $this->_nom, ':prenom' => $this->_prenom, ':dateDeNaissance' => $this->_dateDeNaissance, ':telephone1' => $this->_telephone1, ':telephone2' => $this->_telephone2, ':adresseMail' => $this->_adresseMail, ':ville' => $this->_ville, ':codePostal' => $this->_codePostal, ':ligneAdresse1' => $this->_ligneAdresse1, ':ligneAdresse2' => $this->_ligneAdresse2, ':ligneAdresse3' => $this->_ligneAdresse3, ':statut' => $this->_statut, ':login' => $this->_login, ':password' => $this->_password));
	}
}
?>

la page d' ajout du membre
<?php
require_once 'accesBDD.php';
require_once 'gestionMembres.php';

$connectBDD = new AccesBDD('root', '') ;
$connectBDD->connexion() ;

$newMembre = new Membre($_POST['nom'], $_POST['prenom'], $_POST['dateDeNaissance'], $_POST['telephone1'], $_POST['telephone2'], $_POST['adresseMail'], $_POST['ville'], $_POST['codePostal'], $_POST['ligneAdresse1'], $_POST['ligneAdresse2'], $_POST['ligneAdresse3'], $_POST['listeStatuts']);
$newMembre->ajouter($connectBDD) ;

$connectBDD->deconnexion() ;
?>
et pour finir ma page html
<!DOCTYPE html>
<html>
	<head>
		<title> Gestion des membres - Ajouter </title>
	</head>
	<body>
		<header> Gestion des membres - Ajouter un membre </header>
		<a href="listeMembre.html" title="Liste des membres" target="_self"> Retour à la liste des membres </a>		
		<form name="formAjouter" action="ajouterMembre.php" method="post">
			
			<h1> Informations </h1>
			
				<li>Nom <input type="text" name="nom" placeholder="Nom"></li>
				<li>Prénom <input type="text" name="prenom" placeholder="Prénom"></li>
				<li>Photo de profil <input type="file" name="cheminPhoto"></li>
				<li>Date de naissance <input type="date" name="dateNaissance"></li>
				<li>Statut
					<Select name="listeStatuts" size="1">
						<option value="Nouveau"> Nouveau </option>
						<option value="Ancien"> Ancien </option>
						<option value="Meneur"> Meneur </option>
						<option value="Co-président"> Co-président </option>
					</select></li>
				<li>Instrument(s) joué(s)
					<Select name="listeInstruments1" size="1">
						<option value="Basse 1"> Basse 1 </option>
						<option value="Basse 2"> Basse 2 </option>
						<option value="Dobra"> Dobra </option>
						<option value="Ripinique"> Ripinique </option>
						<option value="Caisse-claire"> Caisse-claire </option>
					</select>
					<Select name="listeInstruments2" size="1">
						<option value="Basse 1"> Basse 1 </option>
						<option value="Basse 2"> Basse 2 </option>
						<option value="Dobra"> Dobra </option>
						<option value="Ripinique"> Ripinique </option>
						<option value="Caisse-claire"> Caisse-claire </option>
					</select>
					<Select name="listeInstruments3" size="1">
						<option value="Basse 1"> Basse 1 </option>
						<option value="Basse 2"> Basse 2 </option>
						<option value="Dobra"> Dobra </option>
						<option value="Ripinique"> Ripinique </option>
						<option value="Caisse-claire"> Caisse-claire </option>
					</select>
					<Select name="listeInstruments4" size="1">
						<option value="Basse 1"> Basse 1 </option>
						<option value="Basse 2"> Basse 2 </option>
						<option value="Dobra"> Dobra </option>
						<option value="Ripinique"> Ripinique </option>
						<option value="Caisse-claire"> Caisse-claire </option>
					</select>
					<Select name="listeInstruments5" size="1">
						<option value="Basse 1"> Basse 1 </option>
						<option value="Basse 2"> Basse 2 </option>
						<option value="Dobra"> Dobra </option>
						<option value="Ripinique"> Ripinique </option>
						<option value="Caisse-claire"> Caisse-claire </option>
					</select></li>
					
			<h1> Coordonnées </h1>
			
				<li>Numéro(s) de téléphone <input type="text" name="telephone1" placeholder="05.XX.XX.XX.XX"> <input type="text" name="telephone2" placeholder="06.XX.XX.XX.XX"></li>
				<li>Adresse mail <input type="text" name="mail" placeholder="[email protected]"></li>
				<li>Adresse postale<input type="text" name="adresse" placeholder="Adresse complête"></li>
				
				<li><input type="reset" name="reset" value="Réinitialiser"> <input type="submit" name="valider" value="Valider">
		</form>
	</body>
</html>
J' ai bien tout structurer pour faire propre mais ma manip ne marche pas, si vous pouvez m' aider sa serait sympa, merci beaucoup

Re: Problème écriture dans la bdd en Php objet (PDO)

par moogli » 17 mars 2014, 10:09

il te manque :
- la concaténation
- Récupérer les données d'un formulaire
- http://sqlpro.developpez.com que du SQL, je pense que tu en a besoin (si tu ne comprend pas la requête qu'i y a dans ton code c'est que tu en a besoin)
- La "protection" des données est impérative. L'extension PDO propose pour cela une méthode quote


Avec cela tu arriver à tes fins.
Il faut que tu prenne le temps de lire les tutos et de les comprendres, ce que tu veux faire est relativement simple et réalisable avec ces tutos.

@+

Re: Problème écriture dans la bdd en Php objet (PDO)

par batala3 » 16 mars 2014, 15:56

je veux juste insérer un pseudo dans ma table membre, je ne comprend pas du tout ce que tu me dis.
je suis un debutant en pdo.si tu peux m' aider un peu plus je comprend pas ce quil faut que je modifie merci beaucoup

Re: Problème écriture dans la bdd en Php objet (PDO)

par xTG » 16 mars 2014, 13:22

Le script fait tout à fait ce que tu lui demandes..
A savoir récupérer un index dans $_POST qui n'existe pas, puis insérer "pseudo" dans ta table.

Ton formulaire ne contient pas d'input dont le name vaut "users".
Et pour ta requête il faut y injecter la variable au lieu d'une chaîne de caractère.
Pour cela il faut utiliser la concaténation :
$uneSecondeVariable = "contenu";
$uneVariable = "je suis le " . $contenu . " d'une seconde variable."; // je suis le contenu d'une seconde variable
Et sans oublier la protection contre les injections SQL mal intentionnées en utilisant la fonction quote() de PDO : http://fr2.php.net/manual/en/pdo.quote.php

Re: Problème écriture dans la bdd en Php objet (PDO)

par batala3 » 16 mars 2014, 00:47

voici mon code php
<?php
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');


$users =$_POST['users'];

$requete="INSERT INTO membre VALUES(\"pseudo\")";

echo $requete."<br>\r\n";
$bdd->exec($requete);
echo "ajouter";
?>
et mon code html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
		<title> Ajouter</title>
	</head>
	
	<body>
	<h1>Ajouter membre</h1>
	
	<p>
    Cette page ne contient que du HTML.<br />
    Veuillez taper votre prénom :
</p>

<form action="essai.php" method="post">
<p>
    <input type="text" name="pseudo" />
    <input type="submit" value="Valider" />
</p>
</form>
	
	<br>
	
	
	<a href="index.html">Retour</a> 
	</body>
	

</html>


sa m ecrit pseudo dans ma bdd et sa ecrit Notice: Undefined index: users in C:\wamp\www\essai.php on line 5

qui est $users =$_POST['users'];
je vois pas pkoi sa marche pas si vous pourvez m' aider merci

Re: Problème écriture dans la bdd en Php objet (PDO)

par batala2 » 16 mars 2014, 00:00

query('SELECT pseudo FROM membre' ); while ($donnees = $reponse->fetch()) { echo $donnees['pseudo'].'<\br>'; } $reponse->closeCursor(); ?>

Voila ce que sa me met dans ma page php quand je lance le script est ce normal , je ne comprend rien du tout en objet

Re: Problème écriture dans la bdd en Php objet (PDO)

par batala » 15 mars 2014, 22:43

Ok je vais essayer merci

Re: Problème écriture dans la bdd en Php objet (PDO)

par moogli » 15 mars 2014, 21:54

salut,

tu as un erreur de syntaxe php à la fin de la chaine de caractères contenant ta requête.

il y a une back quote ( `) au lieu d'une quote ( ' )

si tu active l'affichage des erreurs (avec niveau de rapport d'erreur = E_ALL) tu verra ce message.

@+

Problème écriture dans la bdd en Php objet (PDO)

par batala » 14 mars 2014, 21:19

Voici mon code pour me connecter a la bdd en pdo qui marche, mais je n' arrive pas a lire une table . Merci de votre aide =)

<?php
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');

$reponse = $bdd->query('SELECT pseudo FROM membre` );
while ($donnees = $reponse->fetch())
{
echo $donnees['pseudo'].'<\br>';
}
$reponse->closeCursor();
?>