Insertion de caractère spéciaux dans une base de donnée

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 : Insertion de caractère spéciaux dans une base de donnée

Re: Insertion de caractère spéciaux dans une base de donnée

par xnooztv » 15 janv. 2016, 23:01

Problème résolu, c'étais un problème de la colonne.
"réussi" étais en clé primaire, j'ai donc supprimer "réussi" puis je l'ai recrée, et j'ai crée une colonne "id" et je l'ai mis en clé primaire et en AUTO_INCREMENT :)

Re: Insertion de caractère spéciaux dans une base de donnée

par xnooztv » 15 janv. 2016, 21:59

public bool PDOStatement::execute ([ array $input_parameters ] )
c'est donc un tableau qu'il faut passer en paramètres, donc là cela doit indiquer qu'il n'est pas possible de transformer une chaine en un tableau.
Ah mince, l'erreur de débutant (et surtout de concentration) ..
Par contre, j'ai toujours le même problème: Lorsque je rentre la première licence, la requête s’exécute (donc utiliser = 1) mais lorsque je rentre une autre clé (qui existe), elle ne s’exécute pas (donc utiliser = 0) et donc on peux l'utiliser plusieurs fois..

Re: Insertion de caractère spéciaux dans une base de donnée

par Saian » 15 janv. 2016, 21:55

Oui c'est un tableau qui est attendu, de toutes les valeurs à insérer dans la requête. Dans ton cas il n'y en a qu'une, la licence.
C'est bien parce qu'il faut un tableau que dans mon deuxième exemple j'ai mis array($licence) :
$reqlicence->execute(array($licence));

Re: Insertion de caractère spéciaux dans une base de donnée

par or 1 » 15 janv. 2016, 21:50

public bool PDOStatement::execute ([ array $input_parameters ] )
c'est donc un tableau qu'il faut passer en paramètres, donc là cela doit indiquer qu'il n'est pas possible de transformer une chaine en un tableau.

Re: Insertion de caractère spéciaux dans une base de donnée

par xnooztv » 15 janv. 2016, 21:39

Effectivement, j'aurai pu merci ^^

J'ai fais cela pour update la licence:
$licenceinsert = $bdd->prepare('UPDATE licence SET utiliser =  1 WHERE licence = ?');
$licenceinsert->execute($licence);
C'est correct? Si non, ou est mon erreur?

Re: Insertion de caractère spéciaux dans une base de donnée

par Saian » 15 janv. 2016, 21:29

Tu aurais aussi pu l'écrire comme ça :
$reqlicence = $bdd->prepare('SELECT licence FROM licence WHERE licence = ? AND utiliser = 0');
$reqlicence->execute(array($licence));
Tu devrais surement jeter un oeil à ces pages , c'est plutôt bien expliqué et les exemples sont clairs :
http://php.net/manual/fr/pdo.prepare.php
http://php.net/manual/fr/pdostatement.execute.php
http://php.net/manual/fr/pdostatement.bindparam.php

;)

Re: Insertion de caractère spéciaux dans une base de donnée

par xnooztv » 15 janv. 2016, 21:27

As-tu vérifiée la requête (un simple echo pour voir à quoi elle ressemble) ? ne fait-elle pas une erreur ? l'as tu testé directement via phpmyadmin ou autre ? as tu bien vérifié la présence de la clé dans la table ? as tu vérifié la valeur de $reqlicence->rowCount() ? as tu vérifié $_POST['licence'] ? d'ailleurs je pense qu'il y a un truc pas net sur ces deux lignes :
$reqlicence = $bdd->prepare('SELECT licence FROM licence WHERE licence = '. $_POST['licence'] .' AND utiliser = 0 ');
$reqlicence->execute(array($licence));
ça devrait plutôt être quelque chose comme ça :
$reqlicence = $bdd->prepare('SELECT licence FROM licence WHERE licence = :licence AND utiliser = 0');
$reqlicence->execute(array(':licence' => $licence));
Salut,
Eh bien je te remercie, j'aurais appris quelque chose à propos des requêtes SQL.. Sa fonctionne, mais pour qu'une seul clé CD..
J'en ait crée une deuxième et je peux l'utiliser plusieurs fois, quand y'a un problème résolu, y'en à d'autre :x

Re: Insertion de caractère spéciaux dans une base de donnée

par xnooztv » 15 janv. 2016, 21:05

*supprimé* (voir page 2)

Re: Insertion de caractère spéciaux dans une base de donnée

par Saian » 15 janv. 2016, 19:05

As-tu vérifié la requête (un simple echo pour voir à quoi elle ressemble) ? ne fait-elle pas une erreur ? l'as tu testé directement via phpmyadmin ou autre ? as tu bien vérifié la présence de la clé dans la table ? as tu vérifié la valeur de $reqlicence->rowCount() ? as tu vérifié $_POST['licence'] ? d'ailleurs je pense qu'il y a un truc pas net sur ces deux lignes :
$reqlicence = $bdd->prepare('SELECT licence FROM licence WHERE licence = '. $_POST['licence'] .' AND utiliser = 0 ');
$reqlicence->execute(array($licence));
ça devrait plutôt être quelque chose comme ça :
$reqlicence = $bdd->prepare('SELECT licence FROM licence WHERE licence = :licence AND utiliser = 0');
$reqlicence->execute(array(':licence' => $licence));

Re: Insertion de caractère spéciaux dans une base de donnée

par xnooztv » 15 janv. 2016, 18:45

Salut, à priori la boucle while avec $x = 0 ne sert à rien. La clé enregistrée n'est jamais affichée à l'écran.
La clé insérée est $serial = KeyGen();, il faut donc faire un echo de $serial si tu veux voir la clé insérée.

La vérification de la clé devrait mieux fonctionner après mis à part que licence étant une chaine de caractère, la valeur devrait être entre ' ou " dans la requête.
Salut, pour le premier problème, c'est vrai que j'avais oublier d'enlever cela, merci de me l'avoir rappeller :oops:
Sa n'a pas résolu le problème, j'ai toujours le message:
ERREUR LORS DE L'INSCRIPTION
La clé CD "DDA55-188CB-25F0E-6CC4F-91A58" est invalide ou est déjà utilisé.
Alors qu'elle est valide & non utilisé..
J'ai essayer avec les ' et les " mais aucun succès..

Re: Insertion de caractère spéciaux dans une base de donnée

par Saian » 15 janv. 2016, 17:12

Salut, à priori la boucle while avec $x = 0 ne sert à rien. La clé enregistrée n'est jamais affichée à l'écran.
La clé insérée est $serial = KeyGen();, il faut donc faire un echo de $serial si tu veux voir la clé insérée.

La vérification de la clé devrait mieux fonctionner après mis à part que licence étant une chaine de caractère, la valeur devrait être entre ' ou " dans la requête.

Re: Insertion de caractère spéciaux dans une base de donnée

par xnooztv » 15 janv. 2016, 17:04

Concernant le problème de différence entre la clé généré et la clé affichée, le problème vient surement du fait que tu génères une nouvelle clé lors de l'affichage au lieu d'afficher celle déjà générée.
A propos du deuxième problème, le soucis vient du fait que la vérification de la clé saisie par rapport a la clé enregistré en bdd n'est pas correcte ?

Dans les deux cas, peux tu stp nous montrer le code correspondant ?
Le code de key.php:
<?php
include 'config.php';

function KeyGen(){
     $key = md5(microtime());
     $new_key = '';
     for($i=1; $i <= 25; $i ++ ){
               $new_key .= $key[$i];
               if ( $i%5==0 && $i != 25) $new_key.='-';
     }
  return strtoupper($new_key);
  }
$x = 0;
while($x <= 0) {
  echo KeyGen();
  echo "<br />";
$x++; 
}

$serial = KeyGen();


$insertmbr = $bdd->prepare("INSERT INTO licence(licence) VALUE ('$serial')");
$insertmbr->execute();
?>

Et pour la vérification de la clé, j'ai fais cela (j'ai regrouper tous le code, sinon le code est trop long)
<?php
$licence = $_POST['licence'];
$reqlicence = $bdd->prepare('SELECT licence FROM licence WHERE licence = '. $_POST['licence'] .' AND utiliser = 0 ');
$reqlicence->execute(array($licence));
$licencexist = $reqlicence->rowCount();
	if($licencexist == 1)
	{
        // Le reste de mon code pour l'inscription
        } 
        else
        {
	$erreur = '
	<div class="alert alert-danger padding-20 fade in no-border-radius" role="alert">
	<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-    only">Close</span></button>
	<h4>Erreur lors de l\'inscription</h4>
	<br />La clé CD <b>" '. $licence .'"</b> est invalide ou est déjà utilisé.</div>';
	 }


?>

Je précise que le code fonctionne avec la licence "1234" mais pas avec 123-456-789..

Merci de m'aider :p

Re: Insertion de caractère spéciaux dans une base de donnée

par xnooztv » 15 janv. 2016, 17:03

Concernant le problème de différence entre la clé généré et la clé affichée, le problème vient surement du fait que tu génères une nouvelle clé lors de l'affichage au lieu d'afficher celle déjà générée.
A propos du deuxième problème, le soucis vient du fait que la vérification de la clé saisie par rapport a la clé enregistré en bdd n'est pas correcte ?

Dans les deux cas, peux tu stp nous montrer le code correspondant ?
Le code de key.php:
<?php
include 'config.php';

function KeyGen(){
     $key = md5(microtime());
     $new_key = '';
     for($i=1; $i <= 25; $i ++ ){
               $new_key .= $key[$i];
               if ( $i%5==0 && $i != 25) $new_key.='-';
     }
  return strtoupper($new_key);
  }
$x = 0;
while($x <= 0) {
  echo KeyGen();
  echo "<br />";
$x++; 
}

$serial = KeyGen();


$insertmbr = $bdd->prepare("INSERT INTO licence(licence) VALUE ('$serial')");
$insertmbr->execute();
?>

Et pour la vérification de la clé, j'ai fais cela (j'ai regrouper tous le code, sinon le code est trop long)
<?php
$licence = $_POST['licence'];
$reqlicence = $bdd->prepare('SELECT licence FROM licence WHERE licence = '. $_POST['licence'] .' AND utiliser = 0 ');
$reqlicence->execute(array($licence));
$licencexist = $reqlicence->rowCount();
	if($licencexist == 1)
	{
        // Le reste de mon code pour l'inscription
        } 
        else
        {
	$erreur = '
	<div class="alert alert-danger padding-20 fade in no-border-radius" role="alert">
	<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-    only">Close</span></button>
	<h4>Erreur lors de l\'inscription</h4>
	<br />La clé CD <b>" '. $licence .'"</b> est invalide ou est déjà utilisé.</div>';
	 }


?>

Re: Insertion de caractère spéciaux dans une base de donnée

par ynx » 15 janv. 2016, 16:11

Concernant le problème de différence entre la clé généré et la clé affichée, le problème vient surement du fait que tu génères une nouvelle clé lors de l'affichage au lieu d'afficher celle déjà générée.
A propos du deuxième problème, le soucis vient du fait que la vérification de la clé saisie par rapport a la clé enregistré en bdd n'est pas correcte ?

Dans les deux cas, peux tu stp nous montrer le code correspondant ?

Re: Insertion de caractère spéciaux dans une base de donnée

par xnooztv » 15 janv. 2016, 15:22

Problème résolu, mais les deux problème (de mon premier message) n'est toujours pas régler..
J'ai fais quelques captures d'écrans:


Sur le site:
Image

Dans la BDD:
Image

Et si je rentre une de ces valeurs, sa ne fonctionne pas..