Euh je ne vois pas ou placer le echo 'Erreur:'.¤e->getMessage();
Je l'ai mis ici, ça ne fonctionne pas :
catch(Exception $e
echo 'Erreur : ' . $e->getMessage();)
{
die('Erreur : '.$e->getMessage());
}
var_dump($_POST)
?>
Peux tu m'indiquer plus précisément ?
Merci.
catch(Exception $e)
{
echo 'Erreur : ' . $e->getMessage();
}
A la place du die ;) Le die s'utilise sur une requête que tu executes. Si elle ne fonctionne pas, c'est le die qui prend la suite. Ici tu as juste à afficher l'erreur à la place.
Le var_dump($_POST), met le juste après ta boucle for. Sinon si tu catch, elle sera jamais afficher en bas.
Voilà ce que j'ai d'afficher après essai :
array (size=21)
'pseudo' => string 'Ketaz' (length=5)
'niveau' => string '30' (length=2)
'nbvic' => string '1500' (length=4)
'elo' => string '1920' (length=4)
'age' => string '18' (length=2)
'support' => int 1
'solotop' => int 1
'jungle' => int 1
'fr' => int 1
'gb' => int 1
'desires' => string 'test ' (length=5)
'captcha_code' => string 'nTde5W' (length=6)
'ad' => int 0
'ap' => int 0
'any' => int 0
'de' => int 0
'es' => int 0
'ru' => int 0
'pl' => int 0
'br' => int 0
'jp' => int 0
ça correspond à ce que tu veux ?
Sinon tu as testé ta requête en "dur" dans phpmyadmin voir si elle te retourne une erreur ?
Sinon j'ai précisé que tu dois vérifier le type dans les bindvalue ... tu as vérifier ?
En dur il faut que je mettes des valeurs directement non ?
Sinon oui j'ai changer les bindvalue
Voici le code actuel :
<?php
try
{
$var_tab = array('ad','support','ap','solotop','jungle','any'
,'fr','gb','de','es','ru','pl','br','jp');
for($i=0;$i<sizeof($var_tab);$i++)
{
if (isset($_POST[$var_tab[$i]]) && $_POST[$var_tab[$i]] == true)
$_POST[$var_tab[$i]] = 1;
else
$_POST[$var_tab[$i]] = 0;
}
$bdd = new PDO('mysql:host=localhost;dbname=deathrecapbdd', 'root', '');
$req = $bdd->prepare('INSERT INTO recherche_de_joueurs
(pseudo, niveau, nbrevictoires, elo, age, ad, support, ap, solotop, jungle, any, fr, gb, de, es, ru, pl, br, jp, description) VALUES (:pseudo, :niveau, :nbrevictoires, :elo, :age, :ad, :support, :ap, :solotop, :jungle, :any, :fr, :gb, :de, :es, :ru, :pl, :br, :jp, :description)');
$req->bindValue(':pseudo', $_POST['pseudo'], PDO::PARAM_STR);
$req->bindValue(':niveau', $_POST['niveau'], PDO::PARAM_INT);
$req->bindValue(':nbrevictoires', $_POST['nbvic'], PDO::PARAM_INT);
$req->bindValue(':elo', $_POST['elo'], PDO::PARAM_INT);
$req->bindValue(':age', $_POST['age'], PDO::PARAM_INT);
$req->bindValue(':ad', $_POST['ad'], PDO::PARAM_STR);
$req->bindValue(':age', $_POST['age'], PDO::PARAM_INT);
$req->bindValue(':support', $_POST['support'], PDO::PARAM_INT);
$req->bindValue(':ap', $_POST['ap'], PDO::PARAM_INT);
$req->bindValue(':solotop', $_POST['solotop'], PDO::PARAM_INT);
$req->bindValue(':jungle', $_POST['jungle'], PDO::PARAM_INT);
$req->bindValue(':any', $_POST['any'], PDO::PARAM_INT);
$req->bindValue(':fr', $_POST['fr'], PDO::PARAM_INT);
$req->bindValue(':gb', $_POST['gb'], PDO::PARAM_INT);
$req->bindValue(':de', $_POST['de'], PDO::PARAM_INT);
$req->bindValue(':es', $_POST['es'], PDO::PARAM_INT);
$req->bindValue(':ru', $_POST['ru'], PDO::PARAM_INT);
$req->bindValue(':pl', $_POST['pl'], PDO::PARAM_INT);
$req->bindValue(':br', $_POST['br'], PDO::PARAM_INT);
$req->bindValue(':jp', $_POST['jp'], PDO::PARAM_INT);
$req->bindValue(':description', $_POST['desires'], PDO::PARAM_STR);
$req->execute();
echo 'FOnctionne bien !';
}
catch(Exception $e)
{
echo 'Erreur : ' . $e->getMessage();
}
var_dump($_POST)
?>
Il faut pas une valeur pour id aussi ?
Ah et les résultats correspondent
En dur ça fonctionne si je mets des valeurs directement
Les même que affiché.
Tu parles de quel Id ? Dans ta requête actuellement tu le spécifie pas. Après si tu as un id, s'il est auto incrémenté, pas besoin de le spécifier.
Si la requête fonctionne, c'est qu'il y a une erreur dans un bindvalue.
Pourquoi tu as mis tes champs en tinyint ? C'est utile d'avoir 0 ou 1 ? Car sinon tu as juste à récupérer la valeur de tes POST (sans faire de boucle), vu que une checkbox cochée renvoie true, sinon false. Ainsi tu passes tout tes champs en "boolean" et voilà.
As-tu vérifier au passage que $bdd n'est pas vide ? Tu peux faire un var_dump dessus pour vérifier que la connexion s'effectue bien.
J'ai ça en réponse : object(PDO)[1]
Hum la gestion des exceptions en PHP ...
Essai de mettre un or die sur le execute directement
$req->execute() or die('Une erreur est survenue);
Car si tu es sûre des types, et que la requête fonctionne bien dans phpmyadmin, il n'y a pas de raison que ca fonctionne pas ...
J'ai ce message maintenant ! :
Une erreur est survenue
Voici le code actuel :
<?php
try
{
$var_tab = array('ad','support','ap','solotop','jungle','any'
,'fr','gb','de','es','ru','pl','br','jp');
for($i=0;$i<sizeof($var_tab);$i++)
{
if (isset($_POST[$var_tab[$i]]) && $_POST[$var_tab[$i]] == true)
$_POST[$var_tab[$i]] = 1;
else
$_POST[$var_tab[$i]] = 0;
}
$bdd = new PDO('mysql:host=localhost;dbname=deathrecapbdd', 'root', '');
$req = $bdd->prepare('INSERT INTO recherche_de_joueurs
(pseudo, niveau, nbrevictoires, elo, age, ad, support, ap, solotop, jungle, any, fr, gb, de, es, ru, pl, br, jp, description) VALUES (:pseudo, :niveau, :nbrevictoires, :elo, :age, :ad, :support, :ap, :solotop, :jungle, :any, :fr, :gb, :de, :es, :ru, :pl, :br, :jp, :description)');
$req->bindValue(':pseudo', $_POST['pseudo'], PDO::PARAM_STR);
$req->bindValue(':niveau', $_POST['niveau'], PDO::PARAM_INT);
$req->bindValue(':nbrevictoires', $_POST['nbvic'], PDO::PARAM_INT);
$req->bindValue(':elo', $_POST['elo'], PDO::PARAM_INT);
$req->bindValue(':age', $_POST['age'], PDO::PARAM_INT);
$req->bindValue(':ad', $_POST['ad'], PDO::PARAM_STR);
$req->bindValue(':support', $_POST['support'], PDO::PARAM_INT);
$req->bindValue(':ap', $_POST['ap'], PDO::PARAM_INT);
$req->bindValue(':solotop', $_POST['solotop'], PDO::PARAM_INT);
$req->bindValue(':jungle', $_POST['jungle'], PDO::PARAM_INT);
$req->bindValue(':any', $_POST['any'], PDO::PARAM_INT);
$req->bindValue(':fr', $_POST['fr'], PDO::PARAM_INT);
$req->bindValue(':gb', $_POST['gb'], PDO::PARAM_INT);
$req->bindValue(':de', $_POST['de'], PDO::PARAM_INT);
$req->bindValue(':es', $_POST['es'], PDO::PARAM_INT);
$req->bindValue(':ru', $_POST['ru'], PDO::PARAM_INT);
$req->bindValue(':pl', $_POST['pl'], PDO::PARAM_INT);
$req->bindValue(':br', $_POST['br'], PDO::PARAM_INT);
$req->bindValue(':jp', $_POST['jp'], PDO::PARAM_INT);
$req->bindValue(':description', $_POST['desires'], PDO::PARAM_STR);
$req->execute() or die('Une erreur est survenue');
}
catch(Exception $e)
{
}
?>
$req->bindValue(':ad', $_POST['ad'], PDO::PARAM_STR);
En string, normal ?
Met plutôt ça comme erreur, j'aurais du te le proposer direct :
$req->execute() or die($req->errorInfo());
Ah non j'ai corrigé,
Voici ce que m'affiche l'erreur avec errorinfo :
"Array"
Hum, bizzare que ça fonctionne pas à ce niveau
Essai de mettre les valeurs en dur à la place des POST :
$req->bindValue(':pseudo', "bob63"], PDO::PARAM_STR);
Par exemple. Pour valider que l'erreur vient pas des POST déjà.
J'ai relu la requête, elle est bonne. Ca doit vraiment être une erreur avec un bindvalue ... un mauvais type ou un truc comme ça.
J'ai mis ça en code :
<?php
try
{
$var_tab = array('ad','support','ap','solotop','jungle','any'
,'fr','gb','de','es','ru','pl','br','jp');
for($i=0;$i<sizeof($var_tab);$i++)
{
if (isset($_POST[$var_tab[$i]]) && $_POST[$var_tab[$i]] == true)
$_POST[$var_tab[$i]] = 1;
else
$_POST[$var_tab[$i]] = 0;
}
$bdd = new PDO('mysql:host=localhost;dbname=deathrecapbdd', 'root', '');
$req = $bdd->prepare('INSERT INTO recherche_de_joueurs
(pseudo, niveau, nbrevictoires, elo, age, ad, support, ap, solotop, jungle, any, fr, gb, de, es, ru, pl, br, jp, description) VALUES (:pseudo, :niveau, :nbrevictoires, :elo, :age, :ad, :support, :ap, :solotop, :jungle, :any, :fr, :gb, :de, :es, :ru, :pl, :br, :jp, :description)');
$req->bindValue(':pseudo', "Ketaz", PDO::PARAM_STR);
$req->bindValue(':niveau', "30", PDO::PARAM_INT);
$req->bindValue(':nbrevictoires', "1500", PDO::PARAM_INT);
$req->bindValue(':elo', "1920", PDO::PARAM_INT);
$req->bindValue(':age', "18", PDO::PARAM_INT);
$req->bindValue(':ad', "1", PDO::PARAM_BOOL);
$req->bindValue(':support', "0", PDO::PARAM_BOOL);
$req->bindValue(':ap', "1", PDO::PARAM_BOOL);
$req->bindValue(':solotop', "1", PDO::PARAM_BOOL);
$req->bindValue(':jungle', "1", PDO::PARAM_BOOL);
$req->bindValue(':any', "0", PDO::PARAM_BOOL);
$req->bindValue(':fr', "1", PDO::PARAM_BOOL);
$req->bindValue(':gb', "1", PDO::PARAM_BOOL);
$req->bindValue(':de', "0", PDO::PARAM_BOOL);
$req->bindValue(':es', "0", PDO::PARAM_BOOL);
$req->bindValue(':ru', "1", PDO::PARAM_BOOL);
$req->bindValue(':pl', "1", PDO::PARAM_BOOL);
$req->bindValue(':br', "1", PDO::PARAM_BOOL);
$req->bindValue(':jp', "0", PDO::PARAM_BOOL);
$req->bindValue(':description', "test", PDO::PARAM_STR);
$req->execute() or die($req->errorInfo());
}
catch(Exception $e)
{
}
?>
J'ai encore le message "Array" qui apparaît !
Il ne faut pas mettre de quote ou guillemets autour des INT ;) Enlèves les tous.
Sinon euhhh en fait depuis un moment tu avais pas mis le bon code car je vois PDO::PARAM_BOOL !! Ca change tout là ... bool c'est true ou false !!
Moi je t'ai fait changer true pour 1 et false pour 0 car j'avais mis PARAM_INT.
Si tu laisse PARAM_BOOL, forcément faut remettre false et true ...