7715 sujets

Développement web côté serveur, CMS

Bonjour à tous,
je tente de monter une base de données de participants à un voyage scolaire. Les données sont rassemblées dans une table appelée "test".
Je suis déjà parvenu à saisir des données et afficher l'ensemble des enregistrements depuis des pages écrites en php.
Mon but est que les enregistrements de cette base soient modifiables depuis une page dédiée, mais jusqu'ici j'échoue bien qu'aucune erreur sur mon code ne me soit renvoyée. Voici les codes utilisés:

fichier modif.php contenant le formulaire de saisie
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Modifier un participant au voyage</title>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
<LINK rel=STYLESHEET href="../spip/squelettes/css/styles.css" type="text/css">
</head>
<body>
<!-- ici, le formulaire de saisie avec l'appel à la page modifparticipant.php qui contient les instructions nécessaires: -->
	<form action = "modifparticipant.php" method = "post">
		<input type="text" name="nom" placeholder="Nom">
		<input type="text" name="prenom" placeholder="Prénom">
		<input type="text" name="classe" placeholder="classe"><br><br>
		<input type="submit" name="modifier" value="Modifier"/>
	</form>	
<!-- on se connecte à la base de données: -->

<?php
try
{
	$bdd = new PDO('mysql:host=sql.free.fr;dbname=mabase;charset=utf8', 'id', 'password');
}
catch(Exception $e)
{
	die('Erreur : '.$e->getMessage());
}
?>

</body>
</html>

[je précise que la connexion à la base fonctionne]

Voici maintenant le code de modifparticipant.php qui contient les instructions nécessaires:

<?php
//Connexion à la base de données
try
{
	$bdd = new PDO('mysql:host=sql.free.fr;dbname=mabase;charset=utf8', 'id', 'password'');
}
catch(Exception $e)
{
	die('Erreur : '.$e->getMessage());
}
//requête sql pour modifier la table 'test':
$sql = "UPDATE test SET nom='?', prenom='?', classe='?' WHERE nom='?'";
//logiquement les deux lignes ci-dessous appliquent la requête, mais je ne suis pas sûr de mon code...
$req = $bdd->prepare($sql);
$req->execute(array($_POST['nom'], $_POST['prenom'], $_POST['classe']));
?>

je suis un grand débutant, et la fatigue se fait sentir: il y a sûrement un truc tout bête que je rate, mais je sèche...

Merci d'avance pour vos conseils!
Modifié par bouffandt (22 Sep 2018 - 19:58)
Bon, je bidouille toujours, j'ai suivi quelques tutos de php, et je suis déjà arrivé à rappeler les données enregistrées dans ma table dans une liste de suggestion avec l'objet html <datalist> (code ci-dessous)

<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Modifier un participant au voyage</title>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
<LINK rel=STYLESHEET href="../spip/squelettes/css/styles.css" type="text/css">
</head>
<body>
	<!-- on se connecte à la base de données: -->
<?php
try
{
	$bdd = new PDO('mysql:host=sql.free.fr;dbname=mabase;charset=utf8', 'monid', 'password');
}
catch(Exception $e)
{
	die('Erreur : '.$e->getMessage());
}
$reponse = $bdd->query('SELECT id, nom, prenom FROM test');
while ($donnees = $reponse->fetch());
{
?>
<label for="liste_participants">Saisissez le nom du participant à modifier :</label>
<input list="liste_participant" type="text" id="nom">
<datalist id="liste_participant">
  <option value= <?php echo "$noms[nom]";?>>--saisir le nom du participant--</option>
 </option>
  </datalist>
<?php
}//fin des fonctions php.
$reponse->closeCursor();
?>
</body>
</html>

Mais ce n'est pas ce que je veux: j'aimerais que les noms contenus dans la base de données soient proposées dans une liste déroulante. J'ai tenté de le faire avec un objet <select>, mais je n'y arrive pas (code ci-dessous)
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Modifier un participant au voyage</title>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
<LINK rel=STYLESHEET href="../spip/squelettes/css/styles.css" type="text/css">
</head>
<body>
	<!-- on se connecte à la base de données: -->
<?php
try
{
	$bdd = new PDO('mysql:host=sql.free.fr;dbname=mabase;charset=utf8', 'monid', 'password');
}
catch(Exception $e)
{
	die('Erreur : '.$e->getMessage());
}
?>
<label for="liste_participants">choisissez le nom du participant à modifier :</label>
<select name="liste_participants" id="liste_participants">
<?php //on essaie de récupérer dans la base test la liste des noms
$reponse = $bdd->query('SELECT id, nom, prenom FROM test');
while ($donnees = $reponse->fetch());
{
?>
  <option value="<?php echo "$donnees[nom]";?>"></option>
</select>
<?php
}//fin des fonctions php.
$reponse->closeCursor();
?>
</body>
</html>

Je dois manquer une règle de syntaxe propre à l'objet <select>, mais je ne vois pas quoi.
A terme, j'aimerais bien mettre en place des champs de type <select> (si c'est approprié) qui affichent les données correspondant au nom choisi dans la liste déroulante (prénom, classe...) et permettent leur modification. Je ne demande pas du code tout cuit, mais je suis preneur de tout conseil... Merci d'avance!
Salut

Es-tu sûr que "$donnees Smiley nom " est plein ? si tu inspecte l'éléments select voit tu les "values" ?
Bonjour et merci pour ta réponse,

de fait, quand j'inspecte l'élément select depuis mon navigateur, il n'y a aucune autre valeur que "Nom" dans
<select name="liste_participants" id="liste_participants">
  <option value="">Nom</option>
</select>

Ça m'intrigue d'autant plus que ma requête fonctionne pour afficher le contenu du champ 'nom' dans d'autres cas de figure (dans un objet <datalist> ou dans un tableau html par exemple)...
Modifié par bouffandt (26 Sep 2018 - 11:31)
Alors j'ai ajouté var_dump($reponse->fetch()) juste après la boucle while, comme ceci:
<label for="liste_participants">choisissez le nom du participant à modifier :</label>
<select name="liste_participants" id="liste_participants">
<?php //on essaie de récupérer dans la base test la liste des noms
$reponse = $bdd->query('SELECT id, nom, prenom FROM test');
while ($donnees = $reponse->fetch());
var_dump($reponse->fetch());
{
?>
  <option value="<?php echo "$donnees[nom]";?>"></option>
</select>
<?php
}//fin des fonctions php.
$reponse->closeCursor();
?>

Quand j'inspecte le résultat, j'obtiens un "bool(false)":
<body>
	<!-- on se connecte à la base de données: -->
<label for="liste_participants">choisissez le nom du participant à modifier :</label>
<select name="liste_participants" id="liste_participants">
bool(false)
  <option value=""></option>
</select>

</body>

Cela signifie que fetch ne renvoie rien?
Bonsoir,
je suis parvenu à contourner le problème et obtenir un formulaire opérationnel par un autre biais. Merci quand même à JENCAL de m'avoir aidé.
Modifié par bouffandt (01 Oct 2018 - 09:42)