[RESOLU] Formulaire et base de données pas de communication

Eléphant du PHP | 64 Messages

18 août 2016, 20:46

Bonjour à tous,

Je travaille toujours sur mon essai de création de formulaire pour envoyer et modifier des informations sur des célébrités sur une base de données.

En version simple, c'est à dire avec seulement 4 informations ça fonctionnait et ça c'est grace à vous.

Du coup j'ai fait l'étape suivante c'est à dire ajouter tous les éléments de la table et c'est là que ça va plus...

Je replis mon formulaire et ça fait rien du tout. Pas d'erreurs et sourtout ça n'envoi rien dans la base.

Bon j'ai cherché, fait des corrections, j'ai pointé tous les éléments sur papier pour voir si j'avais des erreurs dans les noms mais j'ai rien vu.
J'ai pensé à la connexion à la base et là aussi ça semble bon.

Du coup je sais pas ce que ça pourrait être alors je fais appel à vous pour avoir des pistes de recherches.
Je ne cherche pas la réponse mais surtout des conseilles pour trouver mes erreurs.

Voila ma table:
-- phpMyAdmin SQL Dump
-- version 4.5.2
-- http://www.phpmyadmin.net
--
-- Client :  127.0.0.1
-- Généré le :  Jeu 18 Août 2016 à 18:42
-- Version du serveur :  5.7.9
-- Version de PHP :  5.6.16

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de données :  `test`
--

-- --------------------------------------------------------

--
-- Structure de la table `personnalite`
--

DROP TABLE IF EXISTS `personnalite`;
CREATE TABLE IF NOT EXISTS `personnalite` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
  `prenom` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
  `prenom2` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
  `surnom` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
  `Vprenom1` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
  `Vprenom2` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
  `Vnom` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
  `naissance` date DEFAULT NULL,
  `mort` date DEFAULT NULL,
  `photo` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
  `PersonnaliteLien` varchar(300) CHARACTER SET utf8 DEFAULT NULL,
  `PersonnaliteAvatar` varchar(300) CHARACTER SET utf8 DEFAULT NULL,
  `sexe_id` int(11) DEFAULT NULL,
  `ville_id` int(11) DEFAULT NULL,
  `pays_id` int(11) DEFAULT NULL,
  `nationalite_idnationalite` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_personnalite_sexe1_idx` (`sexe_id`),
  KEY `fk_personnalite_ville1_idx` (`ville_id`),
  KEY `fk_personnalite_pays1_idx` (`pays_id`),
  KEY `fk_personnalite_nationalite1_idx` (`nationalite_idnationalite`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs;

--
-- Contraintes pour les tables exportées
--

--
-- Contraintes pour la table `personnalite`
--
ALTER TABLE `personnalite`
  ADD CONSTRAINT `fk_personnalite_nationalite1` FOREIGN KEY (`nationalite_idnationalite`) REFERENCES `nationalite` (`idnationalite`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `fk_personnalite_pays1` FOREIGN KEY (`pays_id`) REFERENCES `pays` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `fk_personnalite_sexe1` FOREIGN KEY (`sexe_id`) REFERENCES `sexe` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `fk_personnalite_ville1` FOREIGN KEY (`ville_id`) REFERENCES `ville` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Les fichiers pour ajouter, modifier mes enregistrements:

index.php
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Index</title>
    </head>
  

<body>


<form action="personnalite.php" method="post">
        <p>
       <label for="nom">Nom</label> : <input type="text" name="nom" id="nom" /><br />
        
       <label for="prenom">Prénom</label> :  <input type="text" name="prenom" id="prenom"/><br />
        
       <label for="prenom2">Prénom 2</label> :  <input type="text" name="prenom2" id="prenom2"/><br />
        
       <label for="surnom">Surnom</label> :  <input type="text" name="surnom" id="surnom"/><br />
        
       <label for="Vprenom1">Vraie prénom 1</label> :  <input type="text" name="Vprenom1" id="Vprenom1"/><br />
        
       <label for="Vprenom2">Vraie prénom 2</label> :  <input type="text" name="Vprenom2" id="Vprenom2"/><br />
        
       <label for="Vnom">Vraie nom</label> :  <input type="text" name="Vnom" id="Vnom"/><br />
       
       <label for="naissance">Date de naissance</label> :   <input type="text" name="naissance" id="naissance"/><br />
      
       <label for="mort">Date de décès</label> :   <input type="text" name="mort" id="mort"/><br />
      
       <label for="photo">Lien photo</label> :   <input type="text" name="photo" id="photo"/><br />
      
       <label for="PersonnaliteLien">Lien sujet</label> :  <input type="text" name="PersonnaliteLien" id="PersonnaliteLien"/><br />
        
       <label for="PersonnaliteAvatar">Avatar</label> :  <input type="text" name="PersonnaliteAvatar" id="PersonnaliteAvatar"/><br />
        

        <input type="submit" value="Envoyer" />
	</p>
    </form>







<?php
// Connexion à la base de données
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
	
	
	$bdd -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}




// Requête pour affichage
$reponse = $bdd->query('SELECT nom, prenom, prenom2, surnom, Vprenom1, Vprenom2, Vnom, DATE_FORMAT(naissance, "%d/%m/%Y") AS naissance, DATE_FORMAT(mort, "%d/%m/%Y") AS mort, photo, PersonnaliteLien, PersonnaliteAvatar
	FROM personnalite 
	ORDER BY ID DESC LIMIT 0, 1');
	
	

// Afficher le dernier enregistrement
while ($donnees = $reponse->fetch())
{
	echo '<p>' . htmlspecialchars($donnees['nom']) .
	
	' ' . htmlspecialchars($donnees['prenom']) .
	
	' ' . htmlspecialchars($donnees['prenom2']) .
	
	' ' . htmlspecialchars($donnees['surnom']) .
	
	'</br>' . htmlspecialchars($donnees['Vprenom1']) .

	' ' . htmlspecialchars($donnees['Vprenom2']) .	
	
	' ' . htmlspecialchars($donnees['Vnom']) .	
	
	'</br> né(e) le ' . htmlspecialchars($donnees['naissance']) .
	
	'</br> décédé(e) le ' . htmlspecialchars($donnees['mort']) .
	
	 "<img src=\"" . htmlspecialchars($donnees['photo']) . "\"  />" .
	
	 '</br> Sujet : <a href=" ' . htmlspecialchars($donnees['PersonnaliteLien']) .' " target="new" >'. htmlspecialchars ($donnees['prenom']). ' ' . htmlspecialchars($donnees['nom']) .'</a>' .
	
	 '</br>Avatars :  <a href=" ' . htmlspecialchars($donnees['PersonnaliteAvatar']) .' "target="new">'. htmlspecialchars ($donnees['prenom']). ' ' . htmlspecialchars($donnees['nom']) .'</a>' .
	
	
	'</p>';


}


$reponse->closeCursor();
?>

</br></br>
Liste des enregistrements : </br></br>




<?php
// Modifier un enregistrement


 {  

$reponse = $bdd->query('SELECT nom, prenom, prenom2, surnom, Vprenom1, Vprenom2, Vnom, DATE_FORMAT(naissance, "%d/%m/%Y") AS naissance, DATE_FORMAT(mort, "%d/%m/%Y") AS mort, photo, PersonnaliteLien, PersonnaliteAvatar, id
	     	FROM personnalite
	      	ORDER BY nom');
			
			
 
    while ($donnees = $reponse->fetch())
    {
    ?>
        <p>
		<?php echo 
		
		
		
		$donnees['nom'] .
		'&nbsp;' . $donnees['prenom'].
		 '&nbsp;' . $donnees['naissance']; ?> <a href="modifier.php?number=<?php echo $donnees['id']; ?>">modifier la fiche</a>

	
<?php
} 

    $reponse->closeCursor();
    
}


  


?>


</br>





</body>
</html>
personnalite.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<?php
// Connexion à la base de données
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

// Insertion du message à l'aide d'une requête préparée


$req = $bdd->prepare('
INSERT INTO personnalite (
	nom, 
	prenom, 
	prenom2, 
	surnom, 
	Vprenom1, 
	Vprenom2, 
	Vnom, 
	naissance, 
	mort, 
	photo, 
	PersonnaliteLien, 
	PersonnaliteAvatar) 
	
VALUES(?, ?, ?, ?, ?, ?, ?, str_to_date(?, "%d/%m/%Y"), str_to_date(?, "%d/%m/%Y"), ?, ?, ?)');


$req->execute(array(
	$_POST['nom'], 
	$_POST['prenom'], 
	$_POST['prenom2'], 
	$_POST['surnom'] , 
	$_POST['Vprenom1'], 
	$_POST['Vprenom2'], 
	$_POST['Vnom'], 
	$_POST['naissance'], 
	$_POST['mort'], 
	$_POST['photo'], 
	$_POST['PersonnaliteLien'], 
	$_POST['PersonnaliteAvatar']));





// Redirection du visiteur vers la page du minichat
header('Location: index.php');
?>
</body>
</html>
modifier.php
<?php
// Connexion à la base de données
try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
	
    /* On récupère les donnée de l'article séléctioné*/
    $reponse = $bdd->prepare('
	SELECT 
		nom, 
		prenom, 
		prenom2, 
		surnom, 
		Vprenom1, 
		Vprenom2, 
		Vnom, 
		DATE_FORMAT(naissance, "%d/%m/%Y") AS naissance, 
		DATE_FORMAT(mort, "%d/%m/%Y") AS mort, 
		photo, 
		PersonnaliteLien, 
		PersonnaliteAvatar, 
		id  
	FROM personnalite 
	WHERE id = ?');
    $reponse->execute(array($_GET['number']));
		
	while ($donnees = $reponse->fetch())
    {
    ?>

<!--Formulaire avec les champs préremplis-->

<p>	
<form action="modifier_post.php" method="post" id="modif_personnalite">


<label for="id">id </label><input type="text" name="id" value="<?php echo $donnees['id'];?>" tabindex="20"/><br/>
   
        
<label for="nom">Nom </label><input type="text" name="nom" value="<?php echo $donnees['nom'];?>" tabindex="20"/><br/>
     

<label for="prenom">Prénom </label><input type="text" name="prenom" value="<?php echo $donnees['prenom'];?>" tabindex="20"/><br/>
    

<label for="prenom2">Prénom 2 </label><input type="text" name="prenom2" value="<?php echo $donnees['prenom2'];?>" tabindex="20"/><br/>


<label for="surnom">Surnom </label><input type="text" name="surnom" value="<?php echo $donnees['surnom'];?>" tabindex="20"/><br/>


<label for="Vprenom1">Vraie prénom 1 </label><input type="text" name="Vprenom1" value="<?php echo $donnees['Vprenom1'];?>" tabindex="20"/><br/>


<label for="Vprenom2">Vraie prénom 2 </label><input type="text" name="Vprenom2" value="<?php echo $donnees['Vprenom2'];?>" tabindex="20"/><br/>
      

<label for="Vnom">Vraie nom </label><input type="text" name="Vnom" value="<?php echo $donnees['Vnom'];?>" tabindex="20"/><br/>


<label for="naissance">Date de naissance </label><input type="text" name="naissance" value="<?php echo $donnees['naissance'];?>"tabindex="20"/><br/>
    
    
<label for="mort">Date de décès </label><input type="text" name="mort" value="<?php echo $donnees['mort'];?>"tabindex="20"/><br/>    
      

<label for="photo">Photo </label><input type="text" name="photo" value="<?php echo $donnees['photo'];?>" tabindex="150"/><br/>	
    
    
<label for="PersonnaliteLien">Lien sujet personnalité </label><input type="text" name="PersonnaliteLien" value="<?php echo $donnees['PersonnaliteLien'];?>" tabindex="150"/><br/>	
    
    
<label for="PersonnaliteAvatar">Avatar personnalité </label><input type="text" name="PersonnaliteAvatar" value="<?php echo $donnees['PersonnaliteAvatar'];?>" tabindex="150"/><br/>	   
    
    <br />
    
    <input type="submit" value="Envoyer" />
	  
    <?php
    } 

// Fin de la boucle pour l'affichage des donnée dans la base de donnée
    $reponse->closeCursor();

}


catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

?>
</form>
</p>
modifier_post.php
<?php


  
// Connexion à la base de données
try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
    
 
 
 $reponse = $bdd->prepare(
  			'UPDATE personnalite 
  			SET 
				nom = :n_nom,
				prenom = :n_prenom, 
				prenom2 = :n_prenom2,
				surnom = :n_surnom,
				Vprenom1 = :n_Vprenom1,
				Vprenom2 = :n_Vprenom2,
				Vnom = :n_Vnom,
				naissance =  STR_TO_DATE(:n_naissance, "%d/%m/%Y"),
				mort =  STR_TO_DATE(:n_mort, "%d/%m/%Y"),
				photo = :n_photo, 
				PersonnaliteLien = :n_PersonnaliteLien,
				PersonnaliteAvatar = :n_PersonnaliteAvatar
			WHERE id = :id ');
    
  $reponse->execute(array( 
  		'n_nom' => $_POST['nom'],
      	'n_prenom' => $_POST['prenom'],
		'n_prenom2' => $_POST['prenom2'],
      	'n_surnom' => $_POST['surnom'],
		'n_Vprenom1' => $_POST['Vprenom1'],
		'n_Vprenom2' => $_POST['Vprenom2'],
		'n_Vnom' => $_POST['Vnom'],
   		'n_naissance' => $_POST['naissance'],
		'n_mort' => $_POST['mort'],
      	'n_photo' => $_POST['photo'],
		'n_PersonnaliteLien' => $_POST['PersonnaliteLien'],
		'n_PersonnaliteAvatar' => $_POST['PersonnaliteAvatar'],
	 	'id' => $_POST['id'],
      ));	
	  
	  
	  
	  		
      }
  catch(Exception $e)
    {
      die('Erreur:'.$e->getMessage());
    }
  $reponse->closeCursor();
          
          
       
      // Redirection du visiteur vers la page du minichat
header('Location: index.php');         
      
	
 
 
?>
Je suis quasiment certaine que c'est une broutille mais je ne la vois pas...

Merci à vous.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

18 août 2016, 21:54

Bonjour,

Déjà, remplace PDO::ERRMODE_EXCEPTION par PDO::ERRMODE_WARNING quand on est débutant c'est p^lus simple d'avoir un warning en cas d'erreur
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 64 Messages

19 août 2016, 14:37

Merci je vais voir ça et en même temps utiliser un fichier pour la connexion et l'envoyer aux autres fichier pour limiter les erreurs.
Je vais fouiner et je vous tien aux courant.

Merci encore.

Eléphant du PHP | 64 Messages

20 août 2016, 21:17

Bonjour!

Suite à votre conseil j'ai changé les informations pour les connexion et j'ai fait un fichier pour cette fonction qui est appelée par un include comme ça pas d'erreurs.

Mon fichier donne ça :
<?php
  //fichier de connexion à la bdd : cnxBdd.php
 try{
    $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

 } catch(PDOException $e) {
      die('Erreur : ' . $e->getMessage());
}

 
?>
Toutefois j'ai beau chercher je n'arrive toujours pas à envoyer mes informations ou modifications dans la base. Pourtant elle affiche les informations présentes donc la consultation c'est bon.

Je ne comprend pas.

Mammouth du PHP | 2703 Messages

20 août 2016, 21:44

cela fonctionne en enlevant ?
naissance = STR_TO_DATE(:n_naissance, "%d/%m/%Y"),
mort = STR_TO_DATE(:n_mort, "%d/%m/%Y"),
donc l'ajout ou la mise à jour des dates

Eléphant du PHP | 64 Messages

20 août 2016, 22:12

Je viens d'enlever les
naissance = STR_TO_DATE(:n_naissance, "%d/%m/%Y"),
mort = STR_TO_DATE(:n_mort, "%d/%m/%Y"),

de la partie personnalite.php et j'ai juste saisi un nom et un prénom et ça n'a rien fait. Je n'ai ni erreur ni résultat. Seul les anciens éléments sont affichés.

Eléphant du PHP | 64 Messages

22 août 2016, 18:54

Bonjour je suis entrain d'enlever tous mes ajouts un par un pour voir d'où vient mon erreur mais rien ne change, je n'ai toujours pas la possibilité d'envoyer d'enregistrement sur la base mais ceux déjà enregistrés s'affichent.

Je ne comprend pas...

Eléphant du PHP | 64 Messages

25 août 2016, 10:11

Bonjour,

j'ai retourné le problème dans tous les sens que je connaissais donc peu et je ne trouve pas mon erreur.

Vous avez une suggestion?

Merci

Eléphanteau du PHP | 16 Messages

25 août 2016, 10:48

Bonjour,
J'ai eu un problème du même style ( pas de messages d'erreur et rien dans la base de donnée ) et le soucis provenait du type de variable qui était retourné, j'ai donc afficher toutes les variables du post avec leur type avec

Code : Tout sélectionner

<?php echo gettype($ma_variable); ?>
Cela m'a parmi de voir que certaines variables que je croyais être des doubles étaient en fait des string, j'ai juste eu à changer le type et tout a fonctionné ensuite.
Cdt

Eléphant du PHP | 64 Messages

25 août 2016, 10:53

Merci pour l'informations mais je n'en suis pas encore à ce niveau de compréhension. Je vais chercher ce que tu veux dire par vaaible double et string car là je vois pas. Mais je vais éplucher cette solution ;-)

Merci

Eléphanteau du PHP | 16 Messages

25 août 2016, 11:20

Heu, je débute aussi en php et je ne pense pas m'être exprimer de manière compliquée, mais vas voir PHP manual pour les types de variables.
Rapidement , ta base de donnée attend un certain format dans les informations que tu lui transmet :

Code : Tout sélectionner

`sexe_id` int(11) DEFAULT NULL,
par exemple attend un entier(INT) , si tu lui passe une phrase (STRING) rien ne va s'inscrire en base de donnée.
Je ne sais pas si ton problème viens de là mais les symptômes ressemblent.

Eléphant du PHP | 64 Messages

25 août 2016, 11:30

Pour le moment les éléments tel que sexe_id, ville_id, pays_id et nationalite_idnationalite sont les clés étrangères d'autres tables et je n'ai pas encore commencé à travailler dessus.
Pour le moment j'essaie de faire fonctionner les données sur une seule et unique table pour éviter d’avoir à faire des choses trop complexes pour ma première fois avec PHP MYSQL.

Je suis entrain de vérifier quel sont les types de variable et voir comment elles sont employée avec un tour sur la doc PHP car je ne saisi pas tout ;-)


Edit : je pense avoir trouvé la source de mes problèmes...
J'ai retiré de tous mes fichiers les données dates et une fois enlevé ça fonctionnait.

Donc je dois trouver pourquoi mes saisis de dates de naissance décès et calcul âge font tout planter.

Eléphanteau du PHP | 16 Messages

25 août 2016, 12:36

Essaye de formater ta date comme ça " 2010-04-02 " avant de l'envoyer à mysql.

Eléphant du PHP | 64 Messages

25 août 2016, 12:52

C'est pas la date. Je viens de trouver le problème en retirant un a un mes éléments.

Le problème venait de
'</br> décédé(e) le ' . htmlspecialchars($donnees['mort']) .
Une fois les (e) enlevé pour la date de naissance et décès tout s'est mis à fonctionner.

J'avais utiliser ça pour éviter de faire un formulaire en fonction du sexe mais finalement ce n'était pas mieux.

Eléphanteau du PHP | 16 Messages

25 août 2016, 13:06

Si ton problème est résolut , tant mieux, mais c'est bizarre que le problème vienne d'un "(e)" au milieu d'une string .....