Enorme problème PHP/javascript

iLLiCiTe Messages postés 7 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 6 juillet 2007 - 6 juil. 2007 à 11:07
iLLiCiTe Messages postés 7 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 6 juillet 2007 - 6 juil. 2007 à 14:08
Bonjour,


je vais aller droit au but.


j'ai une douchette, (pour ceux qui ne voyent pas ce que c'est, c'est un
petit terminal de lecture de code barre DATALOGIC modèle MEMOR)


je suis entrain de programmer tout le système de lecture, analyse des
données, insertion des données, et impression sur une imprimante du
type Zebra (Z6M) imprimante à étiquette (langage ZPL II pour infos).


Donc pour utiliser ma douchette de façon plus, simple pour les utilisateurs lambda, j'ai choisi cette méthode

<script language="javascript" type="text/javascript">
function GestionMenu(){
  var e = window.event;
  var code = e.keyCode;
  if(document.getElementById('Soc2')){
     if(code ==115)location.href='douchagemenu.php';
  }
  else{
     if(code ==115)location.href='douchage.php?Soc='+ document.getElementById('Soc').value;
  }
  if(code ==16&amp;&amp; document.getElementById('douch').value=='')location.href='douchage.php?zzImpr=ok&amp;Soc='+ document.getElementById('Soc').value +'&amp;CodeCli='+ document.getElementById('CodeCli').value;
  var lien = document.getElementById(code);
  if(lien){
     lien.style.backgroundColor= "yellow";
     location.href= lien.href;
  }
}
document.onkeydown= GestionMenu;
</script>



explication :

dès qu'une touche est pressé, je regarde qu'elle est son "code" retour

la touche "115" me sert pour naviguer (précédent) dans l'arborescence de mon programme.

Si l'input (hidden) Soc2 existe cela veut dire que je suis dans le sous
menu 1 de l'arborescence suivante, et donc je reviens au menu
principal. Sinon je suis dans le programme d'impression UM (voir
l'arborescence en dessous), et je reviens donc sur le sous menu 1 ou il
y a la liste des préparation à faire.


Menu principale

-1- Impression UM

---- ici le sous menu 1 ou se trouve la liste des préparation à doucher.

------------ Programme impression UM

-2- Vérification UM/UC

-3- UM pour MGI


Maintenant si le code est "16" et que le champ "douch" est vide cela
veut dire que l'utilisateur à appuyer sur la touche pour imprimer.

donc j'ajoute la variable "zzImpr" = ok


Maintenant, passons au coeur du problème...

if($CodeCli<> ""){
 
  if(!empty($_GET["zzImpr"])){
     if($_GET["zzImpr"]== "ok"){
      /*
      ... mon code appel de la class d'impression tout fonctionne bref
      */
       echo$REQUEST_URI.' url ';
       mysql_query("DELETE FROM `GaliaImpr` WHERE BSoc='$Soc'");
       ?>
       <script language="javascript" type="text/javascript">
       location.href='douchage.php?Soc='+ document.getElementById('Soc').value +'&amp;CodeCli='+ document.getElementById('CodeCli').value;
       </script>
       <?
    }
  }
  if(!empty($_POST["NumEti"])){
    $a=$_POST["NumEti"];
     if($a{1} == "S"){
       if(preg_match_all('`S`',$a,$c)==1){
        $a= str_replace('S','',$a);
        $SQL= "SELECT * FROM GaliaBase2 WHERE BUm='$a' AND BNumEti<>BUm";
         if(mysql_num_rows(mysql_query($SQL))==0){
          $SQL= "SELECT * FROM GaliaBase2 WHERE BNumEti='$a'";
          $result= mysql_query($SQL);
          $row= mysql_fetch_array($result);
          $insert= "INSERT INTO GaliaImpr VALUES('".$row[0]."','".$row[1]."','".$row[2]."','".$row[3]."','".$row[4]."','".$row[5]."','".$row[6]."','".$row[7]."','".$row[8]."','".$row[9]."','".$row[10]."')";
           mysql_query($insert);
        }else{$Msg .= '<div class="MsgErr">Erreur UM douchée</div>'; }
      }else{$Msg .='<div class="MsgErr">Un seul n° étiquette/champ</div>'; }
    }else{$Msg .='<div class="MsgErr">Doucher n° étiquette</div>'; }
  }
  ?>
 
  Bouton bleu + F2 menu précèdent
  <h1>1 - Douchage<hr /></h1>
  <form method="post" action="<? echo $SCRIPTNAME; ?>" name="douchage" onsubmit="formu();">
   type="hidden" id="Soc" value="<? echo $Soc; ?>" /><input type="hidden" id="CodeCli" value="<? echo $CodeCli; ?>" />
  Soc : <? echo $Soc; ?> Code client : <? echo $CodeCli; ?><hr />
   size="4">UC : </font><input size="20" onkeyup="this.form.submit();" type="text" id="douch" name="NumEti" />
  </form>
 
id="msg"></div>
  <script language="javascript" type="text/javascript">
  document.getElementById('douch').focus();
  function formu(){
     var Eti = document.getElementById("douch").value;     if(Eti.substring(0,1)!'S' || Eti115){
       document.getElementById("douch").value= '';
       document.getElementById("msg").innerHTML= '<div class="MsgErr">Doucher le bon code barre</div>';
    }
  }
  </script>
  <?
  echo$Msg;
}



Voila mon problème, quand je douche une étiquette, ma page est
automatiquement rechargé, les données sont enregistées correctement.

Je douche une seconde étiquette, ou une vingtaine sans problème. Et
d'un coup sans raison apparante, tout est effacé de ma table.

Le seul "DELETE FROM GaliaImpr ...", est dans le if ($_GET["zzImpr"]),
en commentant cette ligne je n'ai plus d'effacement à la volée ...


alors j'ai mis un echo $REQUEST_URI.' test'; juste avant le "DELETE".
Surprise je n'ai aucun echo, mais toujours mais effacement intempestif.


auriez-vous une explication au simple fait que je n'ai pas d'echo, mais que le "DELETE" se fasse ?

Et surtout quelqu'un voit l'erreur stupide que j'aurais pu faire ? On
est 2 sur le problème, et aucun de nous comprend pourquoi on a pas
l'echo.


Je vous remercie d'avance, et surtout merci d'avoir eu le courage de lire jusqu'au bout lol


Bonne journée !

2 réponses

J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
6 juil. 2007 à 12:02
Salut,


A cause de ce bout de JavaScript :

<script language="javascript" type="text/javascript">
location.href='douchage.php?Soc='+ document.getElementById('Soc').value +'&CodeCli='+ document.getElementById('CodeCli').value;
</script>

Tu charge une autre page après avoir effectué le DELETE... Peut-être un peut trop rapidement pour voir ton "echo" précédant.

Donc, au lieu d'un echo;
fait exit ();

Ainsi, tu seras sur de trouver ton affichage.

A+
0
iLLiCiTe Messages postés 7 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 6 juillet 2007
6 juil. 2007 à 14:08
Merci pour m'avoir montrer une erreur stupide ...

j'aurais presque honte lol

merci,

sinon pour l'erreur, c'était dans la programmation des pics, 2 boutons retournaient la même valeur.

le code "16" donc voila
0
Rejoignez-nous