Insérer une variable PHP dans une BDD

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 : Insérer une variable PHP dans une BDD

Re: Insérer une variable PHP dans une BDD

par devlop78 » 28 déc. 2010, 20:52

$req = $bdd->prepare('INSERT INTO visiteur(Id,Password,Pseudo,Nom, Prenom, Adresseip,Dateconnexion)
VALUES(NULL, :password, :nom, :prenom, :adresseIp, CURRENT_TIMESTAMP)');
$req->execute(array(
'password' => $_mdpsaisi,
'pseudo' => $pseudovisiteur,
'nom' => $nomvisiteur,
'prenom' => $prenomvisiteur,
'adresseip' => $adr_ip_visiteur,
));
C'est mieux ça ?

Re: Insérer une variable PHP dans une BDD

par moogli » 28 déc. 2010, 01:25

salut,

je pense que ton prepare se passe mal et retourne false, c'est pour cela que tu a le message d'erreur.

pour en être sur tu peut faire un var_dump($req); juste après le prépare.

regarde bien ta requête préparée tu y verra une différence entre les champ que tu demande explicitement d'utiliser et les champs que tu fournis (d’où surement l'erreur).

tu doit avoir plus d'info avec $bdd->errorInfo(); ?

@+

Re: Insérer une variable PHP dans une BDD

par MichelVSD77 » 24 déc. 2010, 14:43

Je rencontre le même problème et ne m'en sors pas.


$req = $bdd->prepare('INSERT INTO visiteur(Id,Password,Pseudo,Nom, Prenom, Adresseip,Dateconnexion)
VALUES(:pseudo, :password, :nom, :prenom, : adresseIp, :dateconnexion)');
$req->execute(array(
'id' => NULL,
'password' => $_mdpsaisi,
'pseudo' => $pseudovisiteur,
'nom' => $nomvisiteur,
'prenom' => $prenomvisiteur,
'adresseip' => $adr_ip_visiteur,
'dateconnexion' => CURRENT_TIMESTAMP,
));

Fatal error: Call to a member function execute() on a non-object in /var/www/m/mi/mic/......perso.sfr.fr/public_html/index.php on line 110

Mais même avec les explications que j'ai lu, cela ne marche pas non plus.
Pour info : J'utilise le serveur de SFR.
Merci d'avance

Re: Insérer une variable PHP dans une BDD

par Wilhelm » 18 déc. 2010, 17:27

Non de toute manière si mon projet voit le jour, je m'offrirai les services d'un serveur payant, qui traitera les ressources plus rapidement. Merci encore. :)

Re: Insérer une variable PHP dans une BDD

par devlop78 » 18 déc. 2010, 13:51

Elle est plus sécurisée oui, mais la tienne n'était pas du tout sécurisée. Elle a l'inconvénient celle-là de demander des ressources inutilement, mais pour ton application, je ne pense pas que tu sois très inquiet pour ça.

Re: Insérer une variable PHP dans une BDD

par Wilhelm » 18 déc. 2010, 11:06

Okay avec un peu de recherche, et après avoir relu sur un tuto sur un site dont je ne citerai pas le nom (qui prend les débutants pour des "Zéros"), j'ai trouvé une alternative, j'ai utilisé une requête préparée :

Code : Tout sélectionner

// Insertion des variables $req = $bdd->prepare('INSERT INTO info_joueur(nom, mail, mdp) VALUES(:nom, :mail, :mdp)'); $req->execute(array( 'nom' => $nom, 'mail' => $mail, 'mdp' => $mdp, ));
Après je ne sais pas si cette méthode est plus sécurisée que celle que je prospectais avant... Je valide le sujet comme "résolu" en tout cas, merci develop78 :!: :wink:

Re: Insérer une variable PHP dans une BDD

par devlop78 » 18 déc. 2010, 03:14

Pas mal de réponses était dans ma réponse.

Code : Tout sélectionner

<?php <FORM action="verif.php" method=post >
provoquera une erreur php. Il ne faut pas le précédé de <?php

Code : Tout sélectionner

<INPUT type=text
n'est tout simplement pas xhtml valide, et au delà de ça, tu écris des fois en majuscule, des fois non, ce qui n'est pas cohérent. La bonne syntaxe est

Code : Tout sélectionner

<input type="text"
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
Il serait préférable d'être plus doux avec l'utilisateur. par exemple :
catch(Exception $e)
{
echo "Nous sommes désolés, une erreur a eu lieue ...";
// gérer l'erreur
}

Re: Insérer une variable PHP dans une BDD

par Wilhelm » 18 déc. 2010, 00:54

Je survole pas mal de tutos, effectivement, il m'arrive de faire des copier-coller de commandes (surtout quand je travaille avec mon PC portable au clavier microscopique ^^).

Que je t'horripile, ou te blase, c'est à mon sens normal. Je n'ai pas l'habitude de coder, je n'ai pas les "réflexes" du métier. :wink:

Et vu que je suis un néophyte, je pense ne pas avoir maîtrisé ta réponse : pour éviter un double quote dans cette situation, il est préférable que je passe en simple quote mais en gardant quelle quote ?

Ah et pour le "catch(Exception $e)" j'ai lu dans un tutorial qu'il ne fallait pas hésiter à l'insérer, surtout quand il y a un mot de passe, ce n'est que deux lignes de commande en plus, et mieux vaut en mettre trop que de l'oublier alors que ça aurait été nécessaire...

Voilà !

Re: Insérer une variable PHP dans une BDD

par devlop78 » 17 déc. 2010, 22:07

Et au fait, avant de faire quoique ce soit, s'il te plait, lis quelques tutos de php avant.

Quand je vois ça :
<?php
<FORM action="verif.php" method=post >
Ca m'horripile.

Quand je vois ça :
<INPUT type=text
Ca me blase,

Quand je vois ça
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
Je suis partagé entre le sentiment : "pourquoi a-t-il fait un simple copier/coller" et le sentiment : "pourquoi faudrait-il renvoyer un message d'erreur aussi brute à l'utilisateur pour un simple échec d'insertion ?".

Apprends par le début avant d'utiliser la fin :)

Re: Insérer une variable PHP dans une BDD

par devlop78 » 17 déc. 2010, 22:04

$bdd->exec("INSERT INTO info_joueur(nom, mail, mdp) VALUES('$nom', '$mail', '$mdp')");


1) les quotes simples de ton SQL venait en concurrence avec les quotes simples de la fonction exec(). Ce qui entraine automatiquement une erreur fatal de type syntax.

2) L'utilisation des doubles quotes permet d'insérer dans la chaine de caractères des caractères avec échappement (tels que \n \x00, etc), ainsi que des variables, contrairement aux simples quotes.

Par contre, ce code, fonctionnel, n'est pas du tout sécurisé, et plantera à la moindre simple quote se trouvant dans l'une de tes variables, sauf si tu as magic_quotes activé, ce qui est fréquent mais très nocif pour la santé (comme le tabac : c'est tabou, en en viendra tous à bout !). Pour cela, je te laisse chercher :p

Insérer une variable PHP dans une BDD

par Wilhelm » 17 déc. 2010, 20:34

Bonjour,

Je suis un gros débutant dans ce type de code, mais c'est en forgeant qu'on devient forgeron, et sans mentor, l'apprenti ne peut tirer ses enseignements. Donc !

Je travaille sur une simple insertion de trois variables dans une base de données (j'utilise WAMP qui est assez complet).

Sur ma page "inscription.php", voici le code (je ne poste que la partie "intéressante" pour le sujet) :
<?php
<FORM action="verif.php"   method=post >
<p align=center><TABLE BORDER=1>
<body BACKGROUND="pics/fond.jpg"
<TR>
	<TD>Nom de votre personnage :</TD>
	<TD>
	<INPUT type=text name="nom" maxlength="20">
	</TD>
</TR>
<TR>
	<TD>Adresse mail</TD>
	<TD>
	<INPUT type=text name="mail" maxlength="255">
	</TD>
</TR>
<TR>
	<TD>Mot de passe :</TD>
	<TD>
	<INPUT type=password name="mdp" maxlength="255">
	</TD>
</TR>
<TR>
	<TD COLSPAN=2>
	<INPUT type="submit" value="Valider"></p>
	</TD>
</TR>

</TABLE></p>
</FORM>
?>
Oui, c'est sous forme de tableau (j'ai gardé des séquelles d'ancien langages ^^). Passons maintenant sur la page "verif.php". Je compte ajouter plus tard une vérification de doublons pour la variable "nom" et "mail", mais je me garde ça pour quand j'aurai réussi cette étape.

<?php
        $nom = $_POST["nom"]; // Je récupère mes variables
	$mail = $_POST["mail"];
	$mdp = $_POST["mdp"];

  
		try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; // Je me connecte à la BDD
    $bdd = new PDO('mysql:host=localhost;dbname=prototype', 'root', '', $pdo_options);
    
    // J'insère les variables

    $bdd->exec('INSERT INTO info_joueur(nom, mail, mdp) VALUES('$nom', '$mail', '$mdp')');
    
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
?>
J'ai tenté pratiquement toutes les possibilités dans les "VALUES" sur la ligne de commande "INSERT TO".
Comme j'ai dit avant, je suis un débutant, j'ai sûrement loupé un caractère qui ne vous échappera pas, et je me sens un peu honteux d'appeler au secours pour un problème aussi banal. Cependant, plus je m'énerve sur le problème, moins j'ai de chances de le résoudre, donc je m'en remets à vous.

Merci d'avance,

Wilhelm.