PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Re : Forum Général PHP » déconnexion à l'appel d'une autre page » 26-08-2010 12:41:47

salut!!

ce n'est pas exactement l'arborescence qui est en cause. en fait j'appelle une fonction "entete($maphrase, $lebas)". C'est elle qui pose problème.
J'ai changé la fonction pour ne plus avoir que "entete($maphrase)". $lebas me servait à savoir si une session est active ou pas, et si c'est le cas, on affiche un bouton déconnexion, sinon on affiche le formulaire de connexion. J'ai enlevé cette partie et ça marche. Je vais donc voir du côté de jquery si je peux faire un formulaire de connexion flottant ou caché.

Je vous remercie beaucoup pour vos interventions qui m'ont appris de nouvelles choses et m'ont permis de corriger certaines erreurs de mes codes.

Encore merci à tous!!!!:D

#2 Re : Forum Général PHP » déconnexion à l'appel d'une autre page » 26-08-2010 12:41:47

je crois ce n'est pas le code de ces pages qui pose problème. J'ai sorti une sauvegarde de 10 jours qui marche très bien. lorsque je remplace les fichiers par ceux de la sauvegarde, ça ne marche plus (alors qu'ils marchaient dans le répertoire de sauvegarde). Je ne sais pas d'où ça vient, mais je vais chercher et vous tenir au courant.

Bonne journée

#3 Re : Forum Général PHP » déconnexion à l'appel d'une autre page » 26-08-2010 12:41:47

non, j'ai bien mis session_start au début des 2 pages

<?php session_start();

...........

#4 Re : Forum Général PHP » déconnexion à l'appel d'une autre page » 26-08-2010 12:41:47

bonjour

var_dump($_SESSION) donne: array empty

Sur la page la même page je n'ai pas de variable $mail

#5 Re : Forum Général PHP » déconnexion à l'appel d'une autre page » 26-08-2010 12:41:47

kiku!! personne

je suis vraiment bloquée là, j'ai même essayé de nommer les sessions, mais toujours le même problème. Je crois qu'il ne transmet pas les variables de session. En effet, lorsque je fais (dans fiche_user.php)

echo $_SESSION['mail'];

FF me met undefined index: mail
et pourtant je les sauvegardes dès que la session est établie.

#6 Re : Forum Général PHP » déconnexion à l'appel d'une autre page » 26-08-2010 12:41:47

les cookies sont activés, d'ailleurs ça ne m'arrive qu'entre ces 2 pages, la navigation entre les autres pages n'entraine pas la fermeture de la session.

#7 Re : Forum Général PHP » déconnexion à l'appel d'une autre page » 26-08-2010 12:41:47

je retourner finalement à l'index en faisant simplement:

if (isset($_POST['annulation']))
    header('location: index.php');

comme dans les autres formulaires

#8 Re : Forum Général PHP » déconnexion à l'appel d'une autre page » 26-08-2010 12:41:47

bonjour,

merci pour vos réponses.

la fonction connexion() sert à se connecter à la base. quand j'ai vu ta question, je l'ai mis avant la vérification de la session, mais est-ce que son ordre a de l'importance sur la session ( je ne le crois pas, mais il se peut que je me goures sur ça aussi).

ligne 21: je n'avais pas fait attention, désolée, id="etat" n'a rien n'a faire là.

J'ai mis id="form" pour pouvoir y appliquer des styles en css; sinon il se valide sur la même page vu que je n'ai pas d'attribut action.

la fonction verifier_isset($val) contient:

if (isset($_POST[$val]))
   $mavar = $_POST[$val];

else
   $mavar = '';

return $mavar;

Pour la ligne 34, le bouton annuler, j'ai ce que tu m'as dit moogli

function retourner()
    {
      header("location: index.php");
    }

<input type="button" name="annulation" value="Annuler" onclick="retourner();" />

mais ça ne me renvoie pas à l'index. J'ai aussi essayer avec header('location..') mais celui là me renvoie directement à l'index sans m'afficher le formulaire.

J'ai une clé primaire qui est  "id" en auto_increment.


pour les 3 requêtes, si je les fait en une seule fois et que j'affiche le résultat avec une boucle comme mysql_fetch_assoc ou fetch_array, il ne m'affichera pas x fois (x étant le nombre de ligne dans la table absence) les informations contenues dans la table personne??


Quand je parle de déconnexion, c'est effectivement la session qui est fermée, mais comme je l'ai dit cela ne se passe qu'avec mozilla pas avec IE avec lequel ça ne me pose pas de problème.

Désolée Pierrot si ce que je fais te parait aberrant, mais ce n'est pas si évident pour moi. Ce que vous faites est vraiment formidable, vous vous donnez la peine non seulement de lire nos posts mais aussi d'essayer de nous aider au mieux. Mais si je fais des trucs qui te paraissent "stupides", dis toi que je ne le vois pas ainsi, sinon je ne l'aurai pas fais. J'aimerai bien pouvoir faire "le ménage " seule dans mon code, mais je fais des erreurs dont je ne me rends pas compte et c'est pour cela que j'ai lancé cette discussion.

pour le if(empty($ligne_ac)), j'ai affiché $ligne_ac dans le cas ou  il ne trouve aucune ligne et il a affiché 0; donc je vais le remplacer par:

 if($ligne_ac == 0)

Merci

++

#9 Javascript » javascript ne marche pas sous IE7 » 20-08-2010 20:22:20

honey0
Réponses : 1

Bonjour,
comme c'est dit dans le titre, le code javascript ne marche pas sous IE7. Mais lorsque je vais dans les options et désactive JS puis le réactive, il marche, et il suffit que je réactualise la page pour que ça ne marche plus.
voici 2 codes reflétant le problème:
1- un formulaire permettant d'enregistrer une application dans la base, ajouter_application.php

<?php session_start();
  include_once ("fonctions.php");
  include_once ("fonctionsjs.php");
     
  connexion();
 
  if ((!isset($_SESSION['mail'] ))&& (!isset($_SESSION['pwd'])))
    {
      $lebas=1;
      refuser();
      echo "<script type='text/javascript'> history.back(); </script>";  // retour à la page d'où on a demandé l'accès à une page protégée
    }

  else
    $lebas=2;
 
  entete("Nouvelle application", $lebas);

/********************** Ajout d'un type d'application à la liste déjà existante *************************************/
 
  ?>
      <fieldset class="absence_personne"> <legend> Nouveau type d'applications </legend> 
        <form method="post" id="form">
              <table  cellspacing=20 cellpadding=2 align="center" class="tab_formulaire">
                <span id="erreur"> </span>
                <tr>  <label>
                  <td> Application <font color="red" size=2> * </font> </td>  <td> <input type="text" name="projet" id="projet" size=30 value="<?php if(isset($_POST['projet'])) echo $_POST['projet']; ?>" /> </td>
                </label>  </tr>
               
                <tr>  <label>
                  <td> CCX <font color="red" size=2> * </font> </td>   <td> <input type="text" name="ccx" maxlength=3 size=3 id="tab1" tabindex=1 onkeyup="Autotab(2, size, value)" value="<?php if(isset($_POST['ccx'])) echo $_POST['ccx']; ?>" /> </td>
                </label>  </tr>
                           
                <tr>  <label>
                  <td> Version <font color="red" size=2> * </font> </td>   <td> <input type="text" name="version" maxlength=8 size=8   id="tab2" tabindex=2 onkeyup="Autotab(3, size, value)" value="<?php if(isset($_POST['version'])) echo $_POST['version']; ?>" /> </td>
                </label>  </tr>
             
                <tr>  <label>
                  <td> CPI <font color="red" size=2> * </font> </td> 
                  <td> <select name="cpi" id="tab3" tabindex=3  onchange="document.location = index.php"> <option> </option>
                    <?php $val =''; liste_nom("cpi", $val); ?>
                  </select> </td>
                </label>  </tr>
                             
                <tr>  <label>
                  <td> </td>  <td align="center"> <input type="submit" name="sauver" value="Enregistrer" onclick="return verifier_ajout_ap();" />
                                  <input type="submit" name="annulation" value="Annuler" /> </td>
                </label>  </tr>

              </table>
            </form>
          </fieldset>
     
      <div id="cacher1"> <a class="tips" href="liste_types/liste_types_ap.php" rel="liste_types/liste_types_ap.php" title="Cliquez pour dérouler"> Voir les types d'applications </a> </div>
                     
  <?php
          if ((!isset($_SESSION['mail'] ))&& (!isset($_SESSION['pwd'])))
            {
              refuser();
              $lebas=1;
            }

          else
            {
              $lebas=2;
         
              if (isset($_POST['sauver']))  //si on appuie sur "Enregistrer", récupérer les valeurs saisies
                {
                  $projet = verifier_isset("projet");
                  $ccx = verifier_isset("ccx");
                  $version = verifier_isset("version");
                  $cpi = verifier_isset("cpi");
                 
                  if ((empty($projet)) OR (empty($ccx)) or (empty($version)) or (empty($cpi)))   
                    echo '<script type="text/javascript"> alert ("Veuillez remplir tous les champs.");  </script>';
                   
                  else
                    {
                      //vérifier que l'application n'est pas déjà saisie
                      $existe = existence_ap($projet, $ccx);
                     
                      if($existe)
                        echo '<script type="text/javascript"> alert ("Cette version de l\'application existe déjà");  </script>';
                     
                      else
                        {
                          $id = get_id($cpi);
                          $inserer = mysql_query(' INSERT INTO type_application VALUES("'.$projet.'", "'.$ccx.'",
                                      "'.$version.'", "'.$id.'") ');                       
                     
                          if ($inserer)
                              echo '<script type="text/javascript"> alert ("  Application joutée "); </script>';
                             
                          else
                            echo '<script type="text/javascript"> alert ("Erreur! L\'insertion a échoué "); </script>';
                        }
                    }
                }
               
              if (isset ($_POST['annulation']))
                {
                  header("location:index.php");
                }
            }

?>
    </div>
  </body>
</html>

2- le code de "return verifier_ajout_ap();" qui se trouve dans "fonctionsjs.php"

function verifier_ajout_ap()
  {
    var projet=document.getElementById('form').projet.value;
    var ccx=document.getElementById('form').tab1.value;
    var version=document.getElementById('form').tab2.value;
    var cpi=document.getElementById('form').tab3.value;
    var erreur=document.getElementById('erreur');
   
    if (projet == "")
      {
        erreur.innerHTML='Tous les champs sont obligatoires';
        erreur.style.display='block';
        erreur.className='focus';
        form.projet.focus();
        return false;
      }
    else
      {
        document.getElementById('erreur').style.display='none';
      }
     
    if (ccx == "")
      {
        erreur.innerHTML='Tous les champs sont obligatoires';
        erreur.style.display='block';
        erreur.className='focus';
        form.tab1.focus();
        return false;
      }    
    else
      {
        erreur.style.display='none'; 
      }
     
    if (version == "")
      {
        erreur.innerHTML='Tous les champs sont obligatoires';
        erreur.style.display='block';
        erreur.className='focus';
        form.tab2.focus();
        return false;
      }    
    else
      {
        erreur.style.display='none'; 
      }
     
    if (cpi == "")
      {
        erreur.innerHTML='Tous les champs sont obligatoires';
        erreur.style.display='block';
        erreur.className='focus';
        form.tab3.focus();
        return false;
      }    
     
    else
      {
        erreur.style.display='none'; 
        document.form.submit();   //soumission du formulaire
      }      
   
    return true;
  }

Je rappelle que j'ai activé javascript.

je vous remerci d'avance

#10 Forum Général PHP » déconnexion à l'appel d'une autre page » 26-08-2010 12:41:47

honey0
Réponses : 15

Bonjour,

j'ai une première page (chercher_user.php) dans la page j'ai une liste déroulante permettant de choisir un acteur afin d'afficher toutes ses informations et une 2ième page (fiche_user.php) où j'affiche ses informations.
chercher_user.php:

<?php     session_start();

      include_once ("fonctions.php");
      include_once ("fonctionsjs.php");
     
      if ((!isset($_SESSION['mail'] ))&& (!isset($_SESSION['pwd'])))
        {
          $lebas=1;
        }

      else
        {
          $lebas=2;
        }
 
      entete("Rechercher un acteur", $lebas);
     
      connexion();
/*******************************************************************************************/
?>
      <form method="post" id="form" id="etat">
        <fieldset class="absence_personne"> <legend> Rechercher une personne </legend>
          <table cellspacing=20 cellpadding=2 align="center">
            <span id="erreur"> </span>   
            <tr>  <label>
              <td> Choisir un acteur  </td>
              <td> <font color="red" size=2> * </font> <select name="personne" id="etat"> <option> </option>
                <?php $val =''; liste_nom("tout", $val);  ?>
                </select> </td>
            </label>  </tr>
                             
            <tr>  <label>
                <td> </td>  <td align="center"> <input type="submit" name="sauver" value="Chercher" onclick="return verifier_ajout();" />
                                <a href="index.php" style="text-decoration: none">  <input type="submit" name="annulation" value="Annuler" /> </a></td>
                                  <!-- le input de 'annuler' se comprtait de la mm façon que 'chercher', j'ai donc été obligée de mettre un <a href> pour retourner à l'accueil  -->
            </label>  </tr>
           
          </table>
        </fieldset>
      </form>
   
<?php

  if (isset($_POST['sauver']))
    {
      $acteur = verifier_isset('personne');
     
      if(empty($acteur))
        echo '<script ttype="text/javascript"> alert("Veuillez choisir un acteur"); </script>';
     
      else
        header('location: fiche_user.php?personne='.$acteur.''); 
    }
?>
   
    </div> </div>
  </body>
</html>

J'avais d'abord fait la soumission en précisant l'attribut action dans la balise form, mais après avoir remarqué le problème j'ai changé, sans succès d'ailleurs.

fiche_user.php:

<?php     session_start();

      include_once ("fonctions.php");
      include_once ("fonctionsjs.php");
             
      connexion();
     
        //vérification de la session
      if ((!isset($_SESSION['mail'] ))&& (!isset($_SESSION['pwd'])))
        {
          $lebas=1;
        }

      else
        {
          $lebas=2;
        }
       
      entete("Fiche acteur", $lebas);
     
      if(isset($_GET['personne']))    //récupération de la personne de la page afficher_users.php à travers <a href...>
        $personne = $_GET['personne'];
     
      else
        $personne = verifier_isset("personne");
       
      if (!empty($personne))
        {  
          echo '<div class="div1">';
          //recherche de l'identifiant de la personne
          $lid1 = mysql_query('select id, profil, email, telephone, acteur from personne where acteur="'.$personne.'"');
         
          if ($lid2=mysql_fetch_assoc($lid1))
            {
              echo '<table cellpadding=10 align="center" id="tab_acteur"> <caption> <b><u>Informations personnelles</u></b> <br/><br /> </caption>';

              $identif = $lid2['id'];   //récupération de l'id pour les comparaisons ultérieures
                           
              echo '<tr> <td> Acteur </td> <td>'.$lid2['acteur'].'</td> </tr>';
              echo '<tr> <td> Profil </td> <td>'.$lid2['profil'].'</td> </tr>';
              echo '<tr> <td> E-mail </td> <td>'.$lid2['email'].'</td> </tr>';
              echo '<tr> <td> Téléphone </td> <td>'.$lid2['telephone'].'</td> </tr>';
             
                //compte le nombre de fois que la personne apparait dans la table absence
              $absence = mysql_query('select COUNT(*) from absences where id="'.$identif.'"');
              $nb_absence = mysql_fetch_assoc($absence);
              if (!empty($nb_absence))
                echo '<tr> <td> Nombre d\'absences </td> <td>'.$nb_absence['COUNT(*)'].'</td> </tr>';
              else if (empty($nb_absence))
                echo '<tr> <td> Nombre d\'absences </td> <td> 0 </td> </tr>';

                //compte le nombre de fois que la personne apparait dans la table activite
              $activites = mysql_query('select COUNT(*) from activite where id_acteur_pack="'.$identif.'" or id_acteur_qualif="'.$identif.'"');
              $nb_activites = mysql_fetch_assoc($activites);
              if (!empty($nb_activites))
                echo '<tr> <td> Nombre d\'activités </td> <td>'.$nb_activites['COUNT(*)'].'</td> </tr>';
              else
                echo '<tr> <td> Nombre d\'activités </td> <td> 0 </td> </tr>';
               
              //compte le nombre de fois que la personne apparait dans la table demande
              $demandes = mysql_query('select COUNT(*) from demande where id_acteur_cpi="'.$identif.'"');
              $nb_demandes= mysql_fetch_assoc($demandes);
              if (!empty($nb_demandes))
                echo '<tr> <td> Nombre de demandes </td> <td>'.$nb_demandes['COUNT(*)'].'</td> </tr>';
              else
                echo '<tr> <td> Nombre de demandes </td> <td> 0 </td> </tr>';
             
              echo '</table> <br/>';
            }
         
          echo '<pre>                                          
           <a href="modifier_infos_user.php?personne='
.$identif.'" >Modifier</a>         <a href="chercher_user.php">Retour recherche</a>   <a href="afficher_users.php">Liste des acteurs</a>  </pre>';
         
          echo "</div>";
         
          echo "<div class='div2'>";
              // ses absences
            $lesabsences = mysql_query('SELECT nature, date_debut, date_fin FROM absences WHERE  id="'.$identif.'"');
            $ligne_ab = mysql_num_rows($lesabsences);
             
                echo '<p style="text-align: center;"> <b><u>Absences</u></b> </p>';
               
                if(empty($ligne_ab))    //si l'acteur n'est pas dans la table absence
                  echo "<p align='center'> Aucune absence enregistrée </p>";
               
                else
                  {
                    echo '<table cellspacing=20 align="center" id="tab_acteur">
                    <th> Absences </th> <th> Début </th> <th> Fin</th>'
;
               
                    while($resultat1 = mysql_fetch_assoc($lesabsences))
                      {
                          echo '<tr align="center">';
                        echo '<td>'.$resultat1['nature'].'</td>';
                          $ddebut = formater_date($resultat1['date_debut']);
                          $dfin = formater_date($resultat1['date_fin']);
                        echo '<td>'.$ddebut.'</td>';
                        echo '<td>  '.$dfin.'</td>';
                          echo '</tr>';
                      }
                  }
                echo '</table> <br/><br/>';
          echo '</div>';
         
          echo '<div class="div3">';
                //activités dans lesquelles il figure
       
            $activite = mysql_query('SELECT code_application, version_application, TM, version_TM, type_activite
                          FROM activite WHERE id_acteur_pack="'
.$identif.'" or id_acteur_qualif="'.$identif.'"');
            $ligne_ac = mysql_num_rows($activite);
           
            echo '<p style="text-align: center;"> <b><u>Projets</u></b> </p>';
           
            if(empty($ligne_ac))        //si l'acteur n'est pas dans la table activité
              echo '<p align="center"> Vous n\'avez travaillé sur aucun projet </p>';
             
            else
              {
                echo '<table cellspacing=2 cellpadding=10 align="center" id="tab_acteur">
                    <th> Application </th> <th> Code </th> <th> Version </th> <th> Module</th> <th> Version module </th>
                    <th> Etat module </th> <th> Activité </th>'
;
               
                while($resultat2 = mysql_fetch_assoc($activite))
                  {
                      echo '<tr align="center">';
                    echo '<td>'. get_application($resultat2['code_application']).'</td>'; //nom de l'application     
                    echo '<td>'.$resultat2['code_application'].'</td>';
                    echo '<td>'.$resultat2['version_application'].'</td>';
                    echo '<td>'.$resultat2['TM'].'</td>';
                    echo '<td>'.$resultat2['version_TM'].'</td>';
                    echo '<td>'.$resultat2['type_activite'].'</td>';
                      echo '</tr>';
                  }
               
                echo '</table> <br/><br/>';
              }
          echo '</div>';
         
          echo '<div class="div4">';
          //demandes par lesquelles l'acteur est concerné
            $demande = mysql_query('SELECT  libelle, application, version_application, debut_demande, fin_demande, fingesdem, etat_protocole,
                            date_protocole, etat_bilan, date_bilan, etat_demande
                          FROM demande WHERE id_acteur_cpi="'
.$identif.'"');
            $ligne_d = mysql_num_rows($demande);
           
            echo '<p style="text-align: center;"> <b><u>Demandes</u></b> </p>';
           
            if(empty($ligne_d))
              echo " <p align='center'> Vous n'êtes concerné par aucune demande </p> ";
       
            else
              {
                echo '<table cellspacing=2 cellpadding=10 id="tab_acteur">
                    <th> Libellé </th> <th> Application </th> <th> Version </th> <th> Début </th> <th> Fin </th>
                    <th> Etat </th> <th> Protocole </th> <th> Date protocole </th> <th> Bilan </th> <th> Date bilan </th>'
;
               
                while($resultat3 = mysql_fetch_assoc($demande))
                  {
                      echo '<tr align="center">';
                     
                    echo '<td>'.$resultat3['libelle'].'</td>';
                    echo '<td>'.$resultat3['application'].'</td>';
                    echo '<td>'.$resultat3['version_application'].'</td>';
                    echo '<td>'.$resultat3['debut_demande'].'</td>';
                      $find = formater_date($resultat3['fin_demande']);
                    echo '<td>'.$find.'</td>';
                    echo '<td>'.$resultat3['etat_demande'].'</td>';
                    echo '<td>'.$resultat3['etat_protocole'].'</td>';
                      $dproto = formater_date($resultat3['date_protocole']);
                    echo '<td>'.$dproto.'</td>';
                    echo '<td>'.$resultat3['etat_bilan'].'</td>';
                      $dbilan = formater_date($resultat3['date_bilan']);
                    echo '<td>'.$dbilan.'</td>';
                     
                      echo '</tr>';
                  }
               
                echo '</table>';
              }
          echo '</div>';
        }
      else
        header('location: chercher_user.php');
?>
    </div>
    </div>
  </body>
</html>

Donc lorsque je choisis une personne et que valide, je suis redirigée vers "fiche-user.php" mais je suis aussi déconnectée. Ce qui me parait bizarre car j'ai une autre (3ième) page qui contient la liste de tous les acteurs et on peut cliquer sur un nom pour voir la fiche dans "fiche_user.php", cette fois je ne suis pas déconnectée.

Ce que j'ai aussi remarqué c'est que le problème n'est visible que sous mozilla, sous IE7 tout va bien (paradoxale, car c'est souvent le contraire).

J'espère obtenir de l'aide pour m'éclairer sur le sujet.

+++

#11 Forum Général PHP » accents avec ajax et php/mysql » 20-08-2010 16:06:53

honey0
Réponses : 1

Bonjour,

sur une de mes pages, je suis j'utilise ajax et j'ai recours à mysql:
1- pour les accents ajax, je rajoute

header('Content-Type: text/html; charset=ISO-8859-1');

au début du fichier et ça marche.
2- pour mysql, je rajoute

header ('Content-type: text/html; charset=utf-8');

à la page qui appel les données mysql et

mysql_query("SET NAMES 'utf8'");

à al page de connexion à la base après

mysql_select_db()

comme je l'ai dit, j'ai besoin de ces 2 choses sur la même page dont l'entête contient

 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

.
J'ai vu un sujet similaire mais je n'ai pas compris la conclusion:
sujet abordant le même problème

je travaille sous wampserver et notepad.

Merci pour vos réponses

#12 Re : Forum Général PHP » envoi de mail en php: erreur sur le serveur de messagerie » 22-07-2010 10:02:39

ok,

donc ce n'est pas facultatif contrairement à ce qui est dit

merci

#13 Re : Forum Général PHP » envoi de mail en php: erreur sur le serveur de messagerie » 22-07-2010 10:02:39

bonjour,

j'ai vu le topic et j'ai fait la même démarche la première fois sans aucun changement, la 2ième fois en changeant le serveur de messagerie seul, la 3ième fois en changeant le serveur et le port utilisé (le code plus haut).
$mail: contient l'adresse du destinataire
$sujet: c'est le sujet
$msge: le message à envoyer

et le dernier paramètre étant optionnel, je le mettrai dès que le reste marchera.

Il se pourrait aussi que j'ai des restriction par rapport au serveur car je suis stagiaire. De toute façon j'en parlerai à mon tuteur dès son retour de vacances (dans 2 semaines).

merci, ++

#14 Re : MySQL, PostgreSQL, etc... » sélection sur plusieurs tables mysql » 22-07-2010 08:48:00

je te remercie Jc pour toute ton aide, je vais suivre tes conseils

#15 Re : MySQL, PostgreSQL, etc... » sélection sur plusieurs tables mysql » 22-07-2010 08:48:00

Salut,

1)
a) tables absences, activite et demande
les id de "activite" et de "demande" sont en auto_increment. Pour ce qui est de rentrer de mettre une clé primaire sur l'id de la table et de la personne, je ne l'ai pas fait parce que, d'après les modèles de tableaux déjà existants, il est possible de rentrer une activité ou une demande sans préciser la personne, donc cette colonne id_acteur_*** peut-être nulle.
J'ai exporté les tables et j'ai viré certains trucs que je croyais inutiles. on a par exemple:

 `id_acteur_pack` int(11) DEFAULT NULL,
  `id_acteur_qualif` int(11) DEFAULT NULL,

(mais je ne demande si ce n'est pas contre sens car ça pointe sur une autre table dans laquelle le champ ne peut être nul).

b)pour la table absence, j'avais pensé mettre comme clé (id, date_debut, date_fin), comme cela, on est sûr d'avoir enregistré une seule fois l'absence d'une personne pour une même date. Et pendant la saisie, qui se fait à travers une interface php, je vérifie, lorsqu'on rentre une nouvelle absence, si les dates rentrées ne chevauchent pas celles déjà présentes dans la base.

Quand au reste, merci des recommandations, je m'y attèle de suite!!!! big_smile

PS: si tu connais un site où on explicite certaines subtilités sur les tables et les requêtes (principalement les jointures) je suis preneur.

à +

#17 Forum Général PHP » envoi de mail en php: erreur sur le serveur de messagerie » 22-07-2010 10:02:39

honey0
Réponses : 4

Bonjour,

j'ai un formulaire et on doit y choisir une personne qui travaille sur une activité. J'aimerai envoyer un mail à la personne choisie pour l'avertir qu'une tâche lui a été assignée.
J'utilise la fonction mail() de php pour l'envoi d'un mail simple (dans un premier temps). Mais j'ai un message sur le serveur de messagerie qui est de la forme: imap.xxxxx.fr

voilà ce que j'ai fait:

       ini_set("SMTP"," imap.xxxxxx.fr" );
    ini_set("smtp_port", "143" );
    ini_set('sendmail_from', 'email@ht.com');

                $rekete1 = mysql_query('SELECT email FROM personne WHERE id="'.$id.'"');  //$id, $sujet et $msge sont des paramètres de la fonction
               while ($rekete2 = mysql_fetch_assoc($rekete1))
          {
                       $mail = $rekete2['email'];          //stockage de l'adresse mail
       
        if(mail($mail, $sujet, $msge))  //si l'envoi a réussi
        {
          echo '<script type="text/javascript"> alert (" Email envoyé à '.$rekete2['acteur'].'" l\'email est: '.$mail.'") </script>';
        }
        else
          echo '<script type="text/javascript"> alert (" Echec envoi mail à '.$rekete2['acteur'].'" l\'email est: '.$mail.'")</script>';
     
                      }

Voilà ce qu'il met comme erreur:

Warning: mail() [function.mail]: SMTP server response: HELO BAD unrecognized IMAP4 command in C:\wampServer2\www\planning\fonctions.php on line 391

Au début, j'avais laissé les valeurs défaut, à savoir
SMTP = localhost
smtp_port = 25

mais il n'arrivait pas à se connecter au serveur, j'ai donc mis l'adresse et j'ai vu sur GOOGLE que le service imap tournait sur le port 143.

j'ai parcouru le forum et trouvé des sujets similaires mais pas de solution qui soit en rapport avec mon erreur.

j'espère que quelqu'un pourrait m'éclairer sur ça

a+

#18 Re : MySQL, PostgreSQL, etc... » sélection sur plusieurs tables mysql » 22-07-2010 08:48:00

Bonjour Jc

voilà les tables que j'ai créées:

table "activite"

CREATE TABLE IF NOT EXISTS `activite` (
  `code_activite` int(11) NOT NULL AUTO_INCREMENT,
  `code_demande` int(11) DEFAULT NULL,
  `code_application` varchar(3) DEFAULT NULL,
  `version_application` varchar(8) DEFAULT NULL,
  `TM` varchar(2) DEFAULT NULL,
  `version_TM` varchar(8) DEFAULT NULL,
  `etat_TM` varchar(30) DEFAULT NULL,
  `etat_pack` varchar(30) DEFAULT NULL,
  `etat_qualif` varchar(30) DEFAULT NULL,
  `type_activite` varchar(50) DEFAULT NULL,
  `ordonnancement` varchar(3) NOT NULL,
  `id_acteur_pack` int(11),
  `id_acteur_qualif` int(11),
  `plate_forme` varchar(50) DEFAULT NULL,
  `charge` int(5) DEFAULT NULL,
  `client_lourd` varchar(3) DEFAULT NULL,
  `nouveau_module` varchar(3) DEFAULT NULL,
  `technologie` varchar(50) DEFAULT NULL,
  `mode_reception` varchar(10) DEFAULT NULL,
  `date_envoi` date DEFAULT NULL,
  `commentaires` longtext,
  PRIMARY KEY (`code_activite`),
  KEY `code_application` (`code_application`),
  KEY `type_activite` (`type_activite`),
  KEY `TM` (`TM`),
  KEY `plate_forme` (`plate_forme`),
  KEY `etat_TM` (`etat_TM`,`etat_pack`,`etat_qualif`),
  KEY `id_acteur_pack` (`id_acteur_pack`),
  KEY `id_acteur_qualif` (`id_acteur_qualif`),
  KEY `technologie` (`technologie`),
  KEY `mode_reception` (`mode_reception`),
  KEY `version_application` (`version_application`)
) ;

table "demande"

CREATE TABLE IF NOT EXISTS `demande` (
  `code_demande` int(11) NOT NULL AUTO_INCREMENT,
  `libelle` longtext NOT NULL,
  `demandeur` varchar(50) DEFAULT NULL,
  `application` varchar(100) DEFAULT NULL,
  `version_application` varchar(8) DEFAULT NULL,
  `id_acteur_cpi` int(11) ,
  `debut_demande` date DEFAULT NULL,
  `fin_demande` date DEFAULT NULL,
  `numero_gesdem` varchar(10) NOT NULL,
  `fingesdem` date NOT NULL,
  `etat_demande` varchar(30) DEFAULT NULL,
  `date_protocole` date DEFAULT NULL,
  `etat_protocole` varchar(30) NOT NULL,
  `date_bilan` date DEFAULT NULL,
  `etat_bilan` varchar(30) NOT NULL,
  `mode_reception` varchar(30) DEFAULT NULL,
  `QC` enum('OUI','NON') DEFAULT NULL,
  `impact` varchar(15) DEFAULT NULL,
  `commentaires` longtext,
  PRIMARY KEY (`code_demande`),
  KEY `etat_demande` (`etat_demande`),
  KEY `etat_protocole` (`etat_protocole`),
  KEY `etat_bilan` (`etat_bilan`),
  KEY `id_acteur_cpi` (`id_acteur_cpi`),
  KEY `mode_reception` (`mode_reception`)
);

table "absences"

 
CREATE TABLE IF NOT EXISTS `absences` (
  `id` int(11) ,
  `nature` varchar(20) NOT NULL,
  `date_debut` date NOT NULL,
  `date_fin` date NOT NULL,
  );

et la table "personne"

CREATE TABLE IF NOT EXISTS `personne` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `acteur` varchar(50) NOT NULL,
  `profil` varchar(30) NOT NULL,
  `email` varchar(50) NOT NULL,
  `pwd` varchar(30) NOT NULL,
  `telephone` varchar(5) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ;

Il y a beaucoup de clés étrangères sur d'autres tables comme tu as pu le remarquer.

les champs que je veux afficher sont:
acteur
profil
email
téléphone
application (seulement le nom de l'application)
code_application (on l'a 2 fois, donc je les afficherais dans 2 tableaux différents car ils ne concernent pas la même chose)
version_application  (idem)
CPI (je fais une requête avec le "id_acteur_cpi" qui me retourne le CPI correspondant!!)
debut_demande
fin_demande
etat_demande, etat_protocole
date_protocole
etat_demande
date_demande
nature
date_debut (absences)
date_fin
TM
version_TM
etat_TM
etat_pack
etat_qualif
acteur_pack (que j'ai grâce à "id_acteur_pack)
acteur_qualif (avec "id_acteur_qualif")


Mais vu que le tableau contient beaucoup de champs, je me suis dit qu'il serait mieux, pour plus de lisibilité, d'afficher les informations dans différents tableaux, surtout que dans les tables "demande" et "activite" on a certains champs identiques portant sur 2 choses différentes.
Donc voilà comment je l'ai finalement fait:
tableau 1: les champs de "personne" et "absences"
tableau 2: les champs de "activite"
tableau 3: ceux de "demande"

J'arrive à les afficher, et ça marche; mais crois-tu que ça soit une bonne idée???


je te remercie pour tes réponses

#19 Re : MySQL, PostgreSQL, etc... » sélection sur plusieurs tables mysql » 22-07-2010 08:48:00

quelqu'un saurait où se situe le bouton "résolu"?????????? hmm

#20 Re : MySQL, PostgreSQL, etc... » sélection sur plusieurs tables mysql » 22-07-2010 08:48:00

Bonsoir,
après maintes essais, j'ai finalement affiché les informations en 3 fois? C'est à dire, les informations du profil et des absences dans un tableau, celles des projets sur lesquels l'acter a travaillé dans une 2nd, et les demandes le concernant dans un autre.
J'avais déjà implémenté cette solution, mais j'ai voulu tout affiché ensemble.

merci pour vos interventions et vos conseils.

bye!

#21 Re : MySQL, PostgreSQL, etc... » sélection sur plusieurs tables mysql » 22-07-2010 08:48:00

Bonjour Jc et merci pour ta réponse.
En effet, la table de gauche (personne) contient toutes les personnes car j'ai une interface à partir de laquelle je choisis la personne dans une liste déroulant alimentée par cette table.
si je fais la syntaxe que tu m'as conseillée, j'ai une boucle infinie et les champs des tables "demande" et "activite" ne s'affichent pas.
voila ce que j'ai fait, avec en plus la récupération du nom pour avoir l'id correspondant afin de faire la comparaison:

if (isset($_POST['personne']))                  //envoi par post
   $personne = $_POST['personne'];

$lid1 = mysql_query('select id from personne where acteur="'.$personne.'"');
$lid2 = mysql_fetch_assoc($lid1);
if ($lid2)
    $identif = $lid2['id'];

            //requête principale
$rekete = mysql_query(' select p.email, d.libelle, ab.date_debut, ab.date_fin, ab.nature, ac.code_application, ac.version_application,
                               ac.TM, ac.version_TM, ac.etat_TM, d.application, d.version_application
          from personne AS p, absences AS ab, demande AS d, activite AS ac
                where   p.id="'.$identif.'" and
             ac.id_acteur_pack = p.id or
            ac.id_acteur_qualif = p.id or
                                                d.id_acteur_cpi = p.id or
            ab.id = p.id');
     
$resultat = mysql_fetch_assoc($rekete);

et dans la clause where, comment je peux travailler sur les clés primaires? j'ai besoin de l'égalité entre les clés secondaires de chacune des 3 autres tables avec la clé primaire de la table "personne". Les clés primaires des autres tables n'interviennent donc pas, à moins que je ne me trompe.

#22 Re : MySQL, PostgreSQL, etc... » sélection sur plusieurs tables mysql » 22-07-2010 08:48:00

je crois j'ai une idée, mais elle n'est pas très aboutit.

Dans la table "personne", je mets comme clé un id_acteur, et dans les 3 autres tables j'aurai ce champ comme clé étrangère sur la table "personne". Dans la requête, je fais une jointure:

   $variable = mysql_query('select * from personne AS p LEFT JOIN activite AS ac ON p.id = ac.id
                                         LEFT JOIN demande AS d ON p.id = d.id
                                         LEFT JOIN absences AS ab ON p.id = ab.id ');  
   $resultat = mysql_fetch_assoc($variable);

je ne l'ai pas encore essayé, je change le schéma de ma base puis je l'essaie. Je ne sais pas si c'est correct et si on peut faire des jointures multi-tables de la sorte, dîtes le si vous voyez un truc bizarre:D.

a +

#23 Re : MySQL, PostgreSQL, etc... » sélection sur plusieurs tables mysql » 22-07-2010 08:48:00

salut!
merci pour vos réponses.

Mais si je laisse l'idée de créer la vue, et que je veuille faire:
avoir le nom, prénom de la personne (table personne) avec les absences qu'elle a eu (table absence), les demandes qui la concernent (table demande) et les activités auxquelles elle a participé (table activite). Est-ce que je peux faire une requête comme ça:

$nom_complet = "$prenom $nom";

$variable = mysql_query("select p.nom, p.prenom, d.code, d.date, ab.date, ab.nature, ac.projet
                                                  from personne , absences ab, demande d, activite ac where
                                                            p.nom='$nom' and p.prenom='$prenom' and ab.nom='$nom' and ab.prenom='$prenom'
                                                            and d.acteur='$nom_complet' and ac.acteur='$nom_complet'" );

mais le problème avec cette requête est qu'elle ne me renverrai rien s'il y a une seule des conditions qui n'est pas remplie, or moi je veux qu'elle me renvoie celles qui sont remplies (car le nom est forcément dans la table personne, c'est à partir d'une liste déroulante du contenu de cette table que l'on a choisi la personne à chercher).
Avec des "or" à la place des "AND" je ne vois pas trop ce que ça peut donner.

PS: j'avais mis * pour ne pour faire court ici, sinon je préciserai les champs dont j'ai besoin.

bonne matinée

#24 MySQL, PostgreSQL, etc... » sélection sur plusieurs tables mysql » 22-07-2010 08:48:00

honey0
Réponses : 16

Bonjour,
je suis débutante en mysql et je bloque sur un problème, je travaille avec phpmyadmin..
voilà, j'ai 4 tables: "personne", "absences", "demande", "activite".

la table "personne" répertorie toutes les personnes connues par le système, la table "activite" comprend le projets sur lesquels elles ont travaillé, la table demande comprend les demandes adressées au services (et on y souvent, pas obligatoirement, le chef de projet), et la table "absences", c'est les absences.
j'aimerai afficher toutes les informations sur une personne sous forme d'un tableau en php. sachant que ces informations se trouvent dans ces 4 tables différentes, je ne sais pas trop comment construire la requête.
j'avais dans l'idée de faire une jointure entre les tables sur la condition du nom (récupéré par un formulaire). Mais la personne peut ne pas se trouver dans l'une de ces tables, et dans ce cas je ne veux pas afficher les champs correspondants.
Finaklement j'ai décidé de faire étape par étape en faisant des vues intermédiaires. J'ai d'abord fait une vue sur la table "personne", mais la requête me renvoie une erreur.

voila mes 2 requêtes pour l'instant :
[c] $table0 = mysql_query('CREATE VIEW latable AS select * from personne where nom="'.$nom.'" and prenom="'.$prenom.'"');

     $condition = mysql_fetch_array($table0); [/c]

j'ai l'erreur suivante:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource 

Après les heures passées à faire du php, je sais que c'est la requête de "$table0" qui pose problème.

j'espère avoir de l'aide, merci d'avance pour vos réponses

Pied de page des forums

Propulsé par FluxBB