le controle ne se passe pas comme prevu

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : le controle ne se passe pas comme prevu

par MICKA » 31 mars 2006, 10:51

RESOLU

par MICKA » 31 mars 2006, 10:51

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>"; 
    } 


par Cyrano » 31 mars 2006, 09:57

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.

par MICKA » 31 mars 2006, 09:26

un petit coup de main svp je tourne en rond.

par MICKA » 28 mars 2006, 15:19

je l'ai verifié par un mysql_result sur $resultat3, il me fait une erreur impossible to jump numrow 0

par Truc » 27 mars 2006, 15:04

et bien vérifie le retour de mysql_num_rows($resultat3) avant le test :wink:

par MICKA » 27 mars 2006, 15:00

je n'est pas de changement meme avec le else.
c'est comme si je ne passé pas dans la condition

par Truc » 27 mars 2006, 14:50

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 .........
.....
}

par MICKA » 27 mars 2006, 14:45

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

par Truc » 27 mars 2006, 14:17

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

par MICKA » 27 mars 2006, 14:03

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 ?

par Truc » 27 mars 2006, 12:37

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

le controle ne se passe pas comme prevu

par MICKA » 27 mars 2006, 11:36

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"; 
}
}