Erreur PDO

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

  1. Contributeur
    '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.
    1. 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>
      1. Contributeur
        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...
      2. 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));
         
         
        ?>
      3. Contributeur
        @BuddyLove_x52Bah 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>
      4. Merci beaucoup sa marche maintenant ! Que fais ta ligne de code exactement ? Parce que sa, c'étais pas dans mon cour :S
      5. Contributeur
        @BuddyLove_x52Comme 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 &))