Erreur PDO

BuddyLove_x52 Messages postés 123 Date d'inscription   Statut Membre Dernière intervention   -  
BuddyLove_x52 Messages postés 123 Date d'inscription   Statut Membre Dernière intervention   -
Salut tous le monde ! J'arrive pas a faire mon insert...

Voici mon message d'erreur :

Notice: Undefined index: pseudo in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\pages\envoi.func.php on line 7

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'pseudo_dest' cannot be null' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\pages\envoi.func.php:15 Stack trace: #0 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\pages\envoi.func.php(15): PDOStatement->execute(Array) #1 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\pages\envoi.php(2): include('C:\Program File...') #2 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\index.php(33): include('C:\Program File...') #3 {main} thrown in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\pages\envoi.func.php on line 15

*

Et voici mon code :

<?php
//la fonction qui va enrgistré l'invitations dans la BDD



	$pseudo_exp=$_SESSION['pseudo'];
	$pseudo_dest=$_GET['pseudo'];

	
$bdd = new PDO('mysql:host=localhost;dbname=rs;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

	$req = $bdd->prepare('INSERT INTO amis(pseudo_exp,pseudo_dest,date_invitation,active) VALUES(:pseudo_exp, :pseudo_dest, NOW(),active)');
	$req->execute(array(
	'pseudo_exp' => $pseudo_exp,
	'pseudo_dest' => $pseudo_dest));	


?>

2 réponses

ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
'lut, ici PDO se plaint que comme
$_GET['pseudo']
vaut
null
, il ne peut pas l'insérer dans la colonne
pseudo_dest
de ta BDD car les données qu'elle est conçue pour recevoir ne peuvent pas être nulles.
Fais une vérif avec une condition
if
avant de faire la requête, la condition échéante fait en sorte de retourner une erreur.
0
BuddyLove_x52 Messages postés 123 Date d'inscription   Statut Membre Dernière intervention  
 
Merci de la réponse ! Mais comment je pourrais faire alors pour donner une valeur a $_GET['pseudo'] ? Le liens qui permet d'arriver a cet page utilise GET['pseudo'] justement !

La page qui me permet d'ajouter un ami :

<?php
include('liste_membre.func.php');
include('header.php');
include('menus.php');
include('connect.php');
include('profile.func.php');
?>
<div class="info">
<?php

$infos_membres_choisis = recuperer_info_membre_choisi();
if($infos_membres_choisis == true && $_GET['pseudo'] != $_SESSION['pseudo'])
{
	foreach($infos_membres_choisis as $info_membre_choisi)
	{
		if(demande_existe() ==0)
		{
			?>
			
			<div class="error">Vous n'etes pas amis avec <?php echo $info_membre_choisi['pseudo'];?><br/>
			<a href="index.php?page=envoi">Envoyer une invitation</a><br/></div>
			<?php
		}else{
		?>
			<img src="avatar/<?php echo $info_membre_choisi['avatar']; ?>" height="200" width"200" alt="avatar">
			<p><strong>Email</strong> : <em><?php echo $info_membre_choisi['email'];?></em></p>
			<p><strong>Sexe</strong> : <em><?php echo $info_membre_choisi['sexe'];?></em></p>
			<p><strong>Situation</strong> : <em><?php echo $info_membre_choisi['situation']; ?></em></p>
		<?php
	}
	}


}else{
	header("location:index.php?page=membre");
}
?>



</div>
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
C'est lequel dans le tas qui mène à l'envoi d'une demande d'ami?
<a href="index.php?page=envoi">Envoyer une invitation</a><br/></div>
?
Si c'est le cas, sache que les paramètres GET ne sont pas conservés entre les 2 pages ici...
0
BuddyLove_x52 Messages postés 123 Date d'inscription   Statut Membre Dernière intervention  
 
C'est lui
<a href="index.php?page=envoi">Envoyer une invitation</a><br/></div>


qui me dirige vers la page :

<?php
include('envoi.func.php');
include('connect.php');
enreg_invitation();
header("location:index.php?page=profile&pseudo=".$_GET['pseudo']);
?>


Et voici ma function :

<?php
//la fonction qui va enrgistré l'invitations dans la BDD
 
 
 
    $pseudo_exp=$_SESSION['pseudo'];
    $pseudo_dest=$_GET['pseudo'];
 
     
$bdd = new PDO('mysql:host=localhost;dbname=rs;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
 
    $req = $bdd->prepare('INSERT INTO amis(pseudo_exp,pseudo_dest,date_invitation,active) VALUES(:pseudo_exp, :pseudo_dest, NOW(),active)');
    $req->execute(array(
    'pseudo_exp' => $pseudo_exp,
    'pseudo_dest' => $pseudo_dest));
 
 
?>
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223 > BuddyLove_x52 Messages postés 123 Date d'inscription   Statut Membre Dernière intervention  
 
Bah le hic c'est que le pseudo n'est pas conservé lors de la navigation. Met ceci et ça marchera:
<a href="index.php?page=envoi&pseudo=<?php echo htmlentities(urlencode($info_membre_choisi['pseudo'])); ?>">Envoyer une invitation</a><br/></div>
0
BuddyLove_x52 Messages postés 123 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup sa marche maintenant ! Que fais ta ligne de code exactement ? Parce que sa, c'étais pas dans mon cour :S
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223 > BuddyLove_x52 Messages postés 123 Date d'inscription   Statut Membre Dernière intervention  
 
Comme les variables $_GET ne sont pas conservées entre deux pages, il faut le faire soi-même: on reprend donc le paramètre voulu (ici
$info_membre_choisi['pseudo']
) et on le remet à la main dans l'URL, en le faisant passer par des fonctions qui évitent des problèmes relatifs au formatage du lien dans le code HTML (ex urlencode convertit un espace en "%20", et htmlentities convertit un & en
& amp;
(sans l'espace; sinon CCM convertit le code HTML en vrai &))
0