Bonjour. Smiley biggrin
Je suis débutant et je fais appel à vous pour un souci concernant la gestion depuis un formulaire de la petite base de données que j'ai créé.

Sa structure colonnes : id|nom|prenom|sexe|datenaissance|age|dateInscription|

Le formulaire :

	<form action = "#" method = "post">
		<input type="hidden" name="ID" value=""/>
		<label for="destinataire">Pour</label>
		<input type="text" name="destinataire" id="nom" required/>
		<input type="text" name="prenom" placeholder="Prénom">
		<input type="text" name="sexe" placeholder="Sexe">
		<input type="date" name="datenaissance" placeholder="Date de naissance" />
		<input type="number" name="age" placeholder="Age" />
		<<input type="date" name="dateInscription" placeholder="Date d'inscription" /></BR></BR>-->
		<input type="submit" name="inserer" class="submit"/> 
		<input type="submit" name="modifier" value="Modifier"/>
		<input type="reset" name="efface" value="Rétablir"/>

Je n'ai pas trouvé de résultat à mes recherches voici la question :
- comment depuis le formulaire après avoir saisie le nom et le nouveau prénom ou/et la nouvelle date de naissance comment modifier le/ou les champs prenom ou/et datenaissance dans la base de données qu'il soit déjà renseigné ou vide ?

Merci pour votre petit coup de pouce.
Modifié par modus57 (02 Mar 2017 - 12:08)
Salut,

Pour modifier une base il faut deux choses :
PHP
SQL


Ecrit ta requête SQL (instruction UPDATE si c'est le même ID ou INSERT INTO si c'est un nouveau) et ecrit ton fichier PHP qui va ouvrir une connexion à ta base de données. Ensuite tu pourras ajouter dans l'action de ton formulaire ton fichier PHP.
'datenaissance' est en lowercase et 'dateInscription' en camelcase (exactement en lowerCamelCase). Je crois que je commencerais par adopter une convention et je m'y tiendrais.

Pour trouver des exemples permettant d'enregistrer des données dans votre base, cherchez "MySQL requettes préparées".
Bonjour à vous.

Merci pour votre pour votre aide.

J'ai progressé dans mon apprentissage.

Voici mon petit bout de code sans formulaire qui devrait en principe remplacer dans la base de données le nom "TOTOR" par "MATTY" et la date de naissance "1992-04-01" par "2002-04-01" :
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";
try {
    $bdd = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

	$sql = "UPDATE adherents SET nom='MATTY', datenaissance='2002-04-01' WHERE id=5";

    // Prepare statement
    $stmt = $bdd->prepare($sql);

    // execute the query
    $stmt->execute();

    // echo a message to say the UPDATE succeeded
    echo $stmt->rowCount() . " records UPDATED successfully";
    }
catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }
$bdd = null;
?>

Ça fonctionne pas il revoit le message suivant : 0 records UPDATED successfully

Qu'est-ce qui ne colle pas ?
Modifié par modus57 (03 Mar 2017 - 10:38)
Bonjour.

J'imagine que nom, datenaissance, et id vont changer suivant le formulaire... Sinon les requêtes préparées ne sont pas justifiées...

Mieux vaut que vous vous mettiez dans les conditions réelles avec les variables et les méthodes 'bindParam' ou 'bindValue'.

Soit cela va régler le problème, soit cela va en créer d'autres... que vous rencontrerez de toute façon.

Smiley smile
Bonjour.

Voilà ma procédure modifiée :

<html>
<head>
	<link href="\CSS\style.css" rel="stylesheet" type="text/css"/>
</head>
	<form action = "#" method = "post">
		<input name="ID" placeholder="ID">
		<input type="text" name="nom" placeholder="Nom">
		<input type="text" name="pseudo" placeholder="Pseudo">
		<input type="text" name="sexe" placeholder="Sexe"><br><br>
		<input type="submit" name="modifier" value="Modifier"/>
	</form>	
	<?php
		// Connexion à la base de données
		require_once "connect_pdo.php";
		
		// récupération des variables POST: 
		$ID=isset($_POST['ID'])?$_POST['ID']:'';
		$nom=isset($_POST['nom'])?$_POST['nom']:'';
		$pseudo=isset($_POST['pseudo'])?$_POST['pseudo']:'';
		$sexe=isset($_POST['sexe'])?$_POST['sexe']:'';
		
		$date_du_jour = date ("d-m-Y");
		$heure_courante = date ("H:i");
		echo 'Nous sommes le : ';
		echo $date_du_jour;
		echo ' Et il est : ';
		echo $heure_courante;

		//Requete modification 
		$sql = "UPDATE adherents SET nom='?', pseudo='?', sexe='?' WHERE adherents.ID='?'";
		$req = $bdd->prepare($sql);
		$req->execute (array('ID' => $ID, 'nom' => $nom, 'pseudo' => $pseudo, 'sexe' => $sexe));
	?>	
</html>

Lorsque je clique sur le bouton Modifier il se passe rien.

Je perd les pédales et ne sait plus comment faire. Smiley biggol
Modifié par modus57 (04 Mar 2017 - 15:18)
Bonjour.

Par rien, vous entendez que même les 'echo' ne fonctionnent pas ?

Il faut que vous découpiez votre programme en étapes différentes et validiez chaque étape.

Etape 1. Est-ce que la connexion fonctionne bien (apparemment sinon il y aurait affichage d'erreurs) ? Si oui on continue...
Etape 2. Qu'est-ce qu'il y a dans les variables $ID, $nom, $pseudo, $sexe ? var_dump() ou echo...
Si c'est le résultat attendu, on continue...
Etape 3. La requête préparée... ça fait longtemps que je ne fais plus comme ça, bindParam ou bindValue permet de formater les variables qui sont passées à la requête préparée (et c'est ce qui permet d'écarter certaines problèmes de type)
Essayez pour voir (à mettre à la fin, bien sûr) :
$arr = $req>errorInfo();
print_r($arr);

si un code d'erreur s'affiche...

PhP est relativement facile à débugger quand on le suit dans l'ordre chronologique. (Si si...)

Smiley smile
Modifié par Zelena (04 Mar 2017 - 16:16)
Bonjour Zenela.

J'ai inseré le bout de code suivant :
(les variables $ID, $nom, $pseudo, $sexe sont bien renvoyées)

echo 'ID'.$ID.'<br>';
echo 'NOM'.$nom.'<br>';
echo 'PSEUDO'.$pseudo.'<br>';
echo 'SEXE'.$sexe.'<br><br>';

Et

$arr = $req>errorInfo();
print_r($arr);

Lorsque je clique sur le bouton Modifier il se passe rien.
Voici le message d'erreur :

Fatal error: Call to undefined function errorInfo() in C:\wamp64\www\adherents\form_update_adherents_3.php on line ..

Modifié par modus57 (05 Mar 2017 - 16:05)
Bonjour.

Je viens de voir, un petit trait est manquant :
$arr = $req->errorInfo();
print_r($arr);


Désolée...
Smiley confused

Déjà le formulaire a déjà été envoyé, si les variables ont été renseignées...

Peut-être, avec un message d'erreur, il y aura plus d'explication... (Habituellement, je teste les requêtes SQL dans PHPMyAdmin, là la requête est assez simple et cela doit sans doute concerner PDO.)