Erreur 500 lors d'une requête SQL

Bonjour,

Je m’entraîne à développer un peu avec php mysql, et j’ai une petite erreur dans mon application : lorsque j’appuie sur “ajouter” pour alimenter ma base de données, j’obtiens une belle erreur 500. :confounded:

J’ai cherché et vérifier mon script mais j’ai forcément fais une erreur.

Voici mes pages :

index.php: (uniquement le code pour le “form” et fichier de requete sql, car le reste n’est pas interessant, sauf si vous avez besoin)

<form class="form-inline" method="POST" action="add.php">
  <div class="form-group">
    <input name="nom" type="text" class="form-control" placeholder="Nom">
  </div>
  <div class="form-group">
  <input name="age" type="text" class="form-control" placeholder="Age">
  </div>
  <div class="form-group">
  <input name="pays" type="text" class="form-control" placeholder="Pays">
  </div>
  <button type="submit" class="btn btn-primary">Ajouter</button>
</form>

add.php :

<?php if(isset($_POST['nom'], $_POST['age'], $_POST['pays'],)){ $req = $bdd->prepare('INSERT INTO tableau (nom, age, pays) VALUES(:nom, :age, :pays)'); $req->execute(array( 'nom' => $_POST['nom'], 'age' => $_POST['age'], 'pays' => $_POST['pays'], ));} ?>

Debian 7.11 -> apache2, mysql, php 5.4.45

Merci de votre aide par avance. :slight_smile:

Finalement j’ai trouvé c’est bon, si ça vous intéresse demandez le moi :slight_smile:

Oui ça intéresse ceux qui vont passer a derrière … c’est une bonne pratique sur les forum de donner la solution même si on l’a trouvé soit même.

Ok.
Déjà msql c’est obsolète (la fonction), il faut utiliser mysqli :slight_smile:
Voici mes fichiers :slight_smile:

index.php : (la parti sql)

<?php include "db.php"; $reponse = mysqli_query($conn, "SELECT * FROM tableau", MYSQLI_USE_RESULT); ?>

<?php while($donnees = mysqli_fetch_array($reponse)) { ?>

add.php :

`<?php
include “db.php”;
if(isset($_POST[‘nom’]) && isset($_POST[‘age’]) && isset($_POST[‘pays’])){
$req = $conn->query(“INSERT INTO tableau (nom, age, pays) VALUES(’{$_POST[‘nom’]}’, ‘{$_POST[‘age’]}’, ‘{$_POST[‘pays’]}’)”);
}
?>

<?php header('Location: index.php'); ?>`

et voila :slight_smile:
si besoin je peux expliquer mon code.

Un exemple tité de la doc php :

$query = "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)";
$stmt = mysqli_prepare($link, $query);

mysqli_stmt_bind_param($stmt, "sss", $val1, $val2, $val3);

$val1 = 'Stuttgart';
$val2 = 'DEU';
$val3 = 'Baden-Wuerttemberg';

/* Exécute la requête */
mysqli_stmt_execute($stmt);

/* Ferme la requête */
mysqli_stmt_close($stmt);

Le problème avec ta solution, c’est que la saisie d’une quote fait planté la requête. Ca conduit même à des failles de sécurité (injection sql) en combinant la saisie une chaîne qui contient une requête SQL avec des quotes bien placées.

Pour ton erreur, il me semble qu’il fallait mettre ‘:nom’ comme indice du tableau.

1 J'aime

Je dirais même plus qu’il faut préparer la requête, comme tu l’expliques, et binder les paramètres selon le type de contenu “attendu” et non pas “retourné” !