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

Eléphanteau du PHP | 34 Messages

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

Avatar du membre
Mammouth du PHP | 1609 Messages

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

;)
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 34 Messages

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?

Mammouth du PHP | 2703 Messages

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.

Avatar du membre
Mammouth du PHP | 1609 Messages

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));
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 34 Messages

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

Eléphanteau du PHP | 34 Messages

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