Page 1 sur 1

le controle ne se passe pas comme prevu

Posté : 27 mars 2006, 11:36
par MICKA
bojour.

je souhaite faire un control sur le matricule envoyé en post mais quand je rentre nimporte quoi d'autre ma requete s'execute quand meme.
apparement c'est cette condition qui prend le dessus sur le controle du matricule (AND detail.id_status = 2 OR detail.id_status = 3).
sachant que matricule n'est pas ma clef primaire sur la table detail.
Merci
if ($_POST['mat'] =="")
{
echo "<script languague=\"javascript\">location.href='creation.php?error=entrer un matricule'</script>";
}
if ($_POST['mat'] !="")
{
$connexion = mysql_connect('***','***','') or die('Erreur de connexion '.mysql_error());
mysql_select_db('***',$connexion)  or die('Erreur de selection '.mysql_error());
$requete3 = "SELECT matricule FROM detail WHERE matricule = '".$_POST['mat']."' ";
$resultat3 = mysql_db_query('***',$requete3,$connexion) or die('Erreur de selection '.mysql_error());
mysql_close($connexion);
	
	if (mysql_num_rows($resultat3)!=1)
	{
	echo "<script languague=\"javascript\">location.href='creation.php?error=ce matricule n'existe pas'</script>";
	}
	
$connexion = mysql_connect('***','***','') or die('Erreur de connexion '.mysql_error()); // Connexion à la base de donnée 
mysql_select_db('***',$connexion)  or die('Erreur de selection '.mysql_error()); 
$requete2 = "SELECT id_detail,num_portable,matricule,date,date_inter,libelle_status FROM detail LEFT JOIN staus on staus.id_status = detail.id_status  WHERE  matricule = '".$_POST['mat']."'  AND detail.id_status = 2 OR detail.id_status = 3 ORDER BY id_detail DESC ";
$resultat2 = mysql_db_query('base_portable',$requete2,$connexion) or die('Erreur de selection '.mysql_error()); // execution de la requete 
mysql_close($connexion);// Fermeture de la connexion 


while($rows = mysql_fetch_array($resultat2))
{ 

$id_detail = $rows['id_detail'];
$num_portable = $rows['num_portable'];
$matricule = $rows['matricule'];
$date1 = $rows['date']; // contient la date au format sql 
$date2 = $rows ['date_inter']; 
$status = $rows['libelle_status'];
$datefr2 = date_fr2($date1); //  fais appel à la fonction en lui passant la date que je veux traiter en paramètre, elle  retourne le tableau 
$date_incident = $datefr2['date']; // affichera la valeur associée à l'index 'date', à savoir la date formatée 
$datefr3 = date_fr3($date2);
$date_inter = $datefr3['date_inter'];


echo "<tr>\n
<td ><input type=\"button\" onClick=\"location.href='portables.php?incident=". $id_detail ."&mat=". $matricule ."&port=". $num_portable ."&date=". $date_incident ."&date_inter=". $date_inter ."';\" value=\"". $id_detail ."\"></td>\n
<td > $num_portable</td>\n 
<td > $matricule </td>\n 
<td > $date_incident</td>\n 
<td > $date_inter</td>\n 
<td > $status </td>\n
<td > $port</td>\n 
</tr>\n"; 
}
}  



Posté : 27 mars 2006, 12:37
par Truc
Salut,

J'ai pas vraiment compris le problème mais ajoute des parenthèses pour délimiter les conditions:
WHERE  matricule = '".$_POST['mat']."'  AND ( detail.id_status = 2 OR detail.id_status = 3 ) ORDER BY

Posté : 27 mars 2006, 14:03
par MICKA
il y a deja du mieux, la il ne maffiche pas de resultat quant le matricule n'esxiste pas.
est ce que je peux faire un controle sur le matricule comme je le fais sur ma requete3 si matricule n'est pas la clef primaire de ma table ?

Posté : 27 mars 2006, 14:17
par Truc
tu as normalement une redirection si le matricule n'existe pas avec la requete3. Maintenant je ne vois pas ce que tu veux de plus mais tu peux avoir des conditions sur tous les champs clé primaire ou pas.

avec les parenthèses la requete ne renvois de résultats que si le matricule existe ET que le statut est égal à 2 OU 3

Posté : 27 mars 2006, 14:45
par MICKA
justement je ne comprend pas.
la redirection :

if ($_POST['mat'] !="")
{
	$connexion = mysql_connect('localhost','root','') or die('Erreur de connexion '.mysql_error());
	mysql_select_db('base_portable',$connexion)  or die('Erreur de selection '.mysql_error());
	$requete3 = "SELECT matricule FROM detail WHERE matricule = '".$_POST['mat']."' ";
	$resultat3 = mysql_db_query('base_portable',$requete3,$connexion) or die('Erreur de selection '.mysql_error());
	mysql_close($connexion);
	
			if (mysql_num_rows($resultat3)!=1)
	{
	echo "<script languague=\"javascript\">location.href='creation.php?error=ce matricule n'existe pas'</script>";
	}

ne fonctionne pas, c'est ca qui a motivé ma question sur le controle par clef primaire.
je passe a la requete suivante ce qui m'affiche une page sans info etant donné que je n'est pas d'incidents corespondant à ce matricule

Posté : 27 mars 2006, 14:50
par Truc
place tout ce qui ne doit pas etre exécuté en cas de redirection dans un else:
if (mysql_num_rows($resultat3)!=1)
{
    echo "<script languague=\"javascript\">location.href='creation.php?error=ce matricule n'existe pas'</script>";
}
else
{
    $connexion = mysql_connect('***','***','') or die('Erreur de connexion '.mysql_error()); // Connexion à la base de donnée
    mysql_select_db('***',$connexion)  or die('Erreur de selection '.mysql_error());
   $requete2 .........
.....
}

Posté : 27 mars 2006, 15:00
par MICKA
je n'est pas de changement meme avec le else.
c'est comme si je ne passé pas dans la condition

Posté : 27 mars 2006, 15:04
par Truc
et bien vérifie le retour de mysql_num_rows($resultat3) avant le test :wink:

Posté : 28 mars 2006, 15:19
par MICKA
je l'ai verifié par un mysql_result sur $resultat3, il me fait une erreur impossible to jump numrow 0

Posté : 31 mars 2006, 09:26
par MICKA
un petit coup de main svp je tourne en rond.

Posté : 31 mars 2006, 09:57
par Cyrano
Proposition à tester, j'ai repris ton code, optimisé quelques détail et corrigé de petites erreurs : prends l'habitude d'être rigide quand tu code, ca facilite la relecture ensuite et on repère beaucoup plus facilement les erreurs : essaye ca et reviens avec le message d'erreur s'il y en a un :
<?php
if ($_POST['mat'] =="")
{
    echo "<script languague=\"javascript\">location.href='creation.php?error=entrer un matricule'</script>";
}
else
{
    $connexion = mysql_connect('***','***','') or die('Erreur de connexion '.mysql_error());
    mysql_select_db('***',$connexion)  or die('Erreur de selection '.mysql_error());
    $requete3  = "SELECT matricule FROM detail WHERE matricule = '". $_POST['mat'] ."' ";
    $resultat3 = mysql_query($requete3,$connexion) or die('Erreur de selection '.mysql_error());
    mysql_close($connexion);

    if (mysql_num_rows($resultat3) < 1)
    {
        $msg_erreur = urlencode("ce matricule n'existe pas");
        echo "<script languague=\"javascript\">location.href='creation.php?error=". $msg_erreur ."'</script>";
    }

    $connexion = mysql_connect('***','***','') or die('Erreur de connexion '.mysql_error()); // Connexion à la base de donnée
    mysql_select_db('***', $connexion)  or die('Erreur de selection '.mysql_error());
    $requete2  = "SELECT id_detail, num_portable, matricule, date, date_inter, libelle_status ".
                 "FROM detail ".
                     "LEFT JOIN staus ".
                         "ON staus.id_status = detail.id_status  ".
                 "WHERE  matricule = '". $_POST['mat'] ."' ".
                 "AND detail.id_status = 2 ".
                 "OR detail.id_status = 3 ".
                 "ORDER BY id_detail DESC ";
    $resultat2 = mysql_query($requete2, $connexion) or die('Erreur de selection '.mysql_error()); // execution de la requete
    mysql_close($connexion);// Fermeture de la connexion

    while($rows = mysql_fetch_array($resultat2))
    {

        $id_detail      = $rows['id_detail'];
        $num_portable   = $rows['num_portable'];
        $matricule      = $rows['matricule'];
        $date1          = $rows['date']; // contient la date au format sql
        $date2          = $rows ['date_inter'];
        $status         = $rows['libelle_status'];
        $datefr2        = date_fr2($date1); //  fais appel à la fonction en lui passant la date que je veux traiter en paramètre, elle  retourne le tableau
        $date_incident  = $datefr2['date']; // affichera la valeur associée à l'index 'date', à savoir la date formatée
        $datefr3        = date_fr3($date2);
        $date_inter     = $datefr3['date_inter'];
?>
  <tr>
    <td ><input type="button" onClick="location.href='portables.php?incident=<?php echo($id_detail); ?>&mat=<?php echo($matricule); ?>&port=<?php echo($num_portable); ?>&date=<?php echo($date_incident); ?>&date_inter=<?php echo($date_inter); ?>';" value="<?php echo($id_detail); ?>"></td>
    <td > <?php echo($num_portable); ?></td>
    <td > <?php echo($matricule); ?> </td>
    <td > <?php echo($date_incident); ?></td>
    <td > <?php echo($date_inter); ?></td>
    <td > <?php echo($status); ?> </td>
    <td > <?php echo($port); ?></td>
  </tr>
<?php
    }
}
?>
Tu noteras que j'ai également remplacé l'utilisation de mysql_db_query par mysql_query : comme tu as déjà une ligne mysql_select_db, il est inutile de la sélectionner à nouveau lors de l'exécution.

Posté : 31 mars 2006, 10:51
par MICKA
ca marche niquel avec la methode URLENCODE (je ne connaisé pas merci)

    if (mysql_num_rows($resultat3) < 1) 
    { 
        $msg_erreur = urlencode("ce matricule n'existe pas"); 
        echo "<script languague=\"javascript\">location.href='creation.php?error=". $msg_erreur ."'</script>"; 
    } 



Posté : 31 mars 2006, 10:51
par MICKA
RESOLU