Problème requête PHP

Problème requête PHP - PHP - Programmation

Marsh Posté le 18-05-2006 à 11:23:47    

Bonjour à tous  :hello: ,
Je me permets de faire ce post car j'ai un soucis avec un requete qui attaque une base MySQL en PHP.
 
En fait cette requete fonctionne via l'interface PHPmyAdmin mais pas via PHP.
En effet en faisant un echo de la requete PHP et la collant dans PHPMyAdmin, cette derniere me retourne 9 lignes  
alors que la même requête via mon interface web PHP ne retourne aboslument aucune ligne ( mysql_num_rows = 0 )
 
Voici le code PHP ci-dessous :
 

Code :
  1. $db=new connexion("ma_base" ); // je me connecte sans soucis
  2. $lock=mysql_query("lock tables modele_essai read" );
  3. $sql = mysql_query("select * from modele_essai where lib_modessai like \"".addslashes($type)."%\"" );
  4. $lock=mysql_query("unlock tables" );


 
Je vous remercie par avance de votre aide


Message édité par TomZ le 18-05-2006 à 11:24:03
Reply

Marsh Posté le 18-05-2006 à 11:23:47   

Reply

Marsh Posté le 18-05-2006 à 11:26:09    

ça doit être une histoire de guillement, t'as essayé de mettre des ' à la place ?

Reply

Marsh Posté le 18-05-2006 à 11:31:22    

les 2 requêtes sont bien sur la même base/table ?
 
la requête est correcte si tu l'affiche avant de l'exécuter ? elle est bien identique à celle collée dans phpmyadmin ?
 
 
je verrais bien 2 choses moi :
 
1 - requête correcte mais effectuée sur une table différente qui ne retourne rien (pas d'erreur, mysql_num_rows=0)
 
2 - $type non valide en distant pour cause de register_globals OFF sur le site distant qui amènerais au problème n°1
 
 à voir :)


Message édité par Sh@rdar le 18-05-2006 à 11:35:36

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 11:34:50    

J'ai déjà essayé les simples quotes aussi et c'est pas mieux

Code :
  1. $db=new connexion("ma_base" ); // je me connecte sans soucis
  2.        $lock=mysql_query("lock tables modele_essai read" );   
  3.        $sql = mysql_query("select * from modele_essai where lib_modessai like '".addslashes($type)."%'" );
  4.        $lock=mysql_query("unlock tables" );


 
La requete copié collé marche bien et la base et la table sont les bonnes. C'est étrange
 
$type est une chaine de caractères du genre "Test sur les trucs";
 
Pourrais-je avoir des précisions sur le register_globals OFF


Message édité par TomZ le 18-05-2006 à 11:38:10
Reply

Marsh Posté le 18-05-2006 à 11:46:23    

register_globals fait en gros qu'on accède pas à une variable par $variable mais par $_GET['variable'] $_POST['variable'] etc selon la provenance, plus d'infos dans la doc
 
sinon, essaye de virer ton WHERE
 
si t'as pas de ligne retournées, mais pas d'erreur c'est que ta table est vide
 
si tu as une erreur, y'a forcément une problème à la connexion, ou dans la  
requête
 
en tout cas c'est très certainement une erreur tout bête, faut révérifier du début


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 11:47:30    

J'ai fait le test avec un requete sans paramètre via mon interface PHP et ca fonctionne.
 
Dès que je passe ce paramètre en plus, la requête ne fonctionne plus via mon interface PHP mais seulement via celle de PHPMyAdmin.
 
Que faire ?
 
La syntaxe est bonne, la base aussi je l'interroge avec beaucoup de requete.  

Reply

Marsh Posté le 18-05-2006 à 11:49:26    

d'où sort $type ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 11:52:25    

$type est la valeur d'un menu déroulant ( menu déroulant issu d'un template que j'alimente moi même )
NB: les valeurs de ce menu sont bonnes ( pas d'espaces avant et après trim($type) rien de tout ça )


Message édité par TomZ le 18-05-2006 à 11:54:58
Reply

Marsh Posté le 18-05-2006 à 11:58:05    

donc tu voudrais que type soit la valeur d'un <select>
 
ton formulaire est en méthode POST ?
 
essaye $_POST['type'] dans ta requête, et lis ça : http://fr.php.net/register_globals


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 13:08:34    

Non mais ca marche je n'utilise pas $_POST['type'] car je fais
foreach($_POST as $k=>$v)
{
 $$k = $v;
}
 
En gros je transforme tous mes POST en variable du même nom. Cette solution est éprouvée elle fonctionne parfaitement ailleurs.
 
D'autres idées :(
 
Peut être un problème de traitement de chaine de caractères. Le $type serait peut etre mal formaté ? Maisj e ne vis pas ou


Message édité par TomZ le 18-05-2006 à 13:10:51
Reply

Marsh Posté le 18-05-2006 à 13:08:34   

Reply

Marsh Posté le 18-05-2006 à 13:16:13    

tu peux pas nous filer une url et le code complet des 2 pages ?
 
et aussi afficher la requête avant de l'exécuter histoire qu'on puisse vérifier
 
y'a pas de magie noire là dessous, y'a forcément une erreur "simple", mais là on peut pas voir plus que ce que tu montre :)


Message édité par Sh@rdar le 18-05-2006 à 13:16:24

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 13:37:40    

Pour l'url je peux pas car c'est un client intranet mais je peux copier le code des fontions appelées :
 
Alors dans l'ordre le code HTML de ma page qui va appeler des scripts javascripts pour vérifier si le formulaire est bon ets ensuite la fonction AJAX qui va mettre à jour la page entre les balises DIV. (  NB : l'action du formulaire ne sert a rien c'etait un test précédent de plus l'AJAX est éprouvé ailleurs et ca fonctionne).

Code :
  1. <html>
  2. <head>
  3. <title> CERAHLAB - {SUITE} </title>
  4. <link rel="stylesheet" href="./css/style.css" type="text/css">
  5. <link rel="stylesheet" href="./css/coolmenus.css" type="text/css">
  6. <script src="./js/dossier.js" type="text/javascript"></script>
  7. <script src="./js/cerahlab.js" type="text/javascript"></script>
  8. <script src="./js/ajax.js" type="text/javascript"></script>
  9. </head>
  10. <body {ONLOAD}>
  11. <script src="./js/noclick.js" type="text/javascript"></script>
  12. <INPUT type="hidden" name="session" value={SESID}/>
  13. <form name="essais" method="post" action="gestionstatistiques.php?SESID={IDSESSION}&act=test3&choix=1">
  14. <br>
  15. <table width="90%" align="center" >
  16. <tr>
  17.  <td colspan="2" align="left" class="titre">Statistiques des essais par période,par dossier,par type d'essai</td>
  18. </tr>
  19. <tr>
  20.  <td colspan="2"><i>NB : vous pouvez cumuler le type d'essai et la période</i></td>
  21. </tr>
  22. <tr>
  23.  <td colspan="2">&nbsp;</td>
  24. </tr>
  25. <tr>
  26.  <td align="left"><INPUT type="checkbox" name="essais_dossier" value="dossier" class="sansbord" onClick="auto_decoche();enabled_dossier();">Par dossier</td>
  27.  <td>N° dossier : <INPUT type="text" name="num_dossier" size="6" maxlength="6"/></td>
  28. </tr>
  29. <tr>
  30.  <td align="left"><INPUT type="checkbox" name="essais_periode" value="periode" class="sansbord" onClick="aiguillage();enabled_periode();">Par période</td>
  31.  <td>Date début: <INPUT type="text" name="jessais_deb" size="2" maxlength="2"/>-<INPUT type="text" name="messais_deb"  size="2" maxlength="2"/>-<INPUT type="text" name="aessais_deb" size="4" maxlength="4"/>
  32.  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date fin: <INPUT type="text" name="jessais_fin" size="2" maxlength="2"/>-<INPUT type="text" name="messais_fin"  size="2" maxlength="2"/>-<INPUT type="text" name="aessais_fin" size="4" maxlength="4"/></td>
  33. </tr>
  34. <tr>
  35.  <td align="left"><INPUT type="checkbox" name="essais_type" value="type" class="sansbord" onClick="aiguillage();enabled_type();">Type essai</td>
  36.  <td><SELECT name="type" size="1" width="50%">
  37.    <OPTION value="-1">Choix</OPTION>
  38.     <!-- BEGIN LISTETYPE -->
  39.     <OPTION value="{LIB_TYPE}">{LIB_TYPE}</OPTION>
  40.     <!-- END LISTETYPE -->
  41.    </SELECT>
  42.  </td>
  43. </tr>
  44. <tr>
  45.  <td colspan="2" align="right">
  46.  <input type="button" value="Valider" onClick="verif_essais();"/>
  47.  </td>
  48. </tr>
  49. </table>
  50. <div id="essais_stats"></div>
  51. </form>
  52. </body>
  53. </html>


 
La fonction AJAX va quant à elle appeller le case "essais_stats" du fichier gestionstatistiques.php
Jusque là pas de soucis on y passse bien dans le case.
Ce case instancie ma classe statistiques qui elle contient la fonction avec la fameuses requete

Code :
  1. case "essais_stat":
  2.  //Cas ou l'utilisateur a choisi par période ou par type
  3.  if((isset($debut) and isset($fin)) or isset($type))
  4.  {
  5.   //Si on a seulement la période
  6.   if(isset($debut) and isset($fin) and !isset($type))
  7.   {
  8.    $stat = new statistiques();
  9.    $stat->stats_essais_periode($debut,$fin);
  10.   }
  11.   //Si on tri selon le type
  12.   if(!isset($debut) and !isset($fin) and isset($type))
  13.   {
  14.    $stat = new statistiques();
  15.    $stat->stats_essais_type($type);
  16.   }
  17.   //Si on a tout choisi
  18.   if(isset($debut) and isset($fin) and isset($type))
  19.   {
  20.    echo "Les deux";
  21.   }
  22.  }
  23.  break;


Voici la fonction

Code :
  1. function stats_essais_type($type)
  2. {
  3.  $db=new connexion("cerahlab" );
  4.  $lock=mysql_query("lock tables modele_essai read" );
  5.  $sql = mysql_query("select * from modele_essai where lib_modessai like \"".addslashes($type)."%\"" ) or die("ERREUR REQUETE" );
  6.  $lock=mysql_query("unlock tables" );
  7.  $line = mysql_fetch_assoc($sql);
  8.  echo $line['id_modessai'];
  9.                 //je vais pas plus loin puisque c'est deja ici que ca plante
  10. }
  11. NB : maintenant un copié collé telle qu'elle m'est affiché par PHP : ( version simples et doubles quotes )


 

Code :
  1. select * from modele_essai where lib_modessai like 'Caractéristiques dimensionnelles et réglage des tricycles%'
  2. select * from modele_essai where lib_modessai like "Caractéristiques dimensionnelles et réglage des tricycles%"


 
Naturellement tout marche sur des roulettes avec PHPMyAdmin.
 
Voilà jespère avoir été suffisament explicite.
 
Merci de me sauver :)

Reply

Marsh Posté le 18-05-2006 à 13:45:24    

alors sans les locks, avec une boucle pour fetcher et le retour d'erreur ça donne quoi ?
 

Code :
  1. function stats_essais_type($type)
  2.     {
  3.             $db=new connexion("cerahlab" );
  4.             //$lock=mysql_query("lock tables modele_essai read" );     
  5.             $sql = mysql_query("select * from modele_essai where lib_modessai like \"".addslashes($type)."%\"",$db);
  6.             echo mysql_error($db);
  7.             echo mysql_num_rows($sql);
  8.            //$lock=mysql_query("unlock tables" );
  9.             while ($line = mysql_fetch_assoc($sql)) {
  10.               print_r($line);
  11.              }
  12.  
  13.              //je vais pas plus loin puisque c'est deja ici que ca plante
  14.     }


Message édité par Sh@rdar le 18-05-2006 à 13:46:05

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 13:59:54    

Sans les lock ou avec ca ne change pas mais attention j'ai une grande nouvelle.
 
En fait j'ai remarqué quelque chose.
Dès que la variable passée en paramètre ($type) dans la requête comporte un accent, c'est le drame pour PHP sinon ça passe très bien.
 
Cependant, dans la base il y a aussi des accents et ces derniers sont obligatoires ( pour cause d'édition de rapports ensuite ).
 
Je ne vois donc pas pourquoi les accents font déconner la requete seulement sous PHP
 
Devrais-je les convertir avec leur code ASCII ?. Si oui existe-t-il une fonction qui le fait ? J'ai deja utilisé une fonction du genre je sais plus le nom genre htmlsource ou je sais plus.
 
Avez vous une solution ?
 
Merci par avance


Message édité par TomZ le 18-05-2006 à 14:02:40
Reply

Marsh Posté le 18-05-2006 à 14:08:41    

bah forcément, c'est ta solution éprouvée d'assigner les variables POST vers des globales :lol:, comme quoi..
 
$éà php il aime pas ça.. en travaillant sur le vrai tableau t'aurais pas eu de problème ;)


Message édité par Sh@rdar le 18-05-2006 à 14:09:02

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 14:09:32    

Je vais tester ça de suite ^^  
On ne se moque pas ^^
Je reviens pour dire si c'est bon ou non
 
Le $_POST['type'] ne fonctionne pas mieux . Je l'affiche de la meme facon
 
J'appelle donc ma fonction dans le case avec $_POST['type'] au lieu de $type puis le reste est inchangé mais ça ne fonctionne toujours pas sur les types ayant caractères accentués.


Message édité par TomZ le 18-05-2006 à 14:12:43
Reply

Marsh Posté le 18-05-2006 à 14:10:10    

ah si je me moque, tout ça à cause d'une sale habitude héritée du php3 :o
 
EDIT : j'ai pas vu d'accents dans tes champs, ça serait le problème si t'esssayais de passer un nom de variable avec un accent, pas le contenu.. le drame de php  que t'as avec les accents c'est quoi exactement ??
 
et tu peux dumper ton tableau POST aussi histoire de vérifier ?


Message édité par Sh@rdar le 18-05-2006 à 14:12:53

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 14:13:46    

NB : le drame c'est que PHP n'arrive pas a éxecuter ma requete des qu'un de ces paramètres comporte un fichier accentué.  
Enfin il l'exécute mais n'arrive a retourner aucun enregistrement

Citation :


 
Le $_POST['type'] ne fonctionne pas mieux . Je l'affiche de la meme facon
 
J'appelle donc ma fonction dans le case avec $_POST['type'] au lieu de $type puis le reste est inchangé mais ça ne fonctionne toujours pas sur les types ayant caractères accentués.


Message édité par TomZ le 18-05-2006 à 14:14:18
Reply

Marsh Posté le 18-05-2006 à 14:18:44    

Peut etre spécifier dans la base que le jeu de caractères pour la table doit comporter des accents du genre CHARACTER SET ISO8859_1 mais bon la je commence à divaguer j'attend de l'aide de ta part.
 
Merci par avance

Reply

Marsh Posté le 18-05-2006 à 14:18:56    

la requête fonctionne et ne retourne rien ou t'as une erreur sql ?
 
si pas d'erreur c'est un problème de charset effectivement, sinon faudra fouiller encore un peu :/


Message édité par Sh@rdar le 18-05-2006 à 14:19:42

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 14:22:41    

La requete fonctionne quand le $type ne comporte pas de caractères accentués.
Sinon quand $type a des accents elle ne retourne aucune ligne mais pas d'erreur
 
Au niveau du charset je peux régler ce truc comment
 
jai ajouté header(Content-type; charset=iso-8859-1); dans la fonction qui requete au début
 
Mais visiblement ce n'est pas le bon
 
EDIT : en fait je crois pas que c'est ca qui va servir a grand chose enfin si tu as une idée je suis ouvert je commence a m'arracher les cheveux. C'est quand meme une erreur bien lourde. Fallait deja trouver que c'est les accents qui fait déconner la requete


Message édité par TomZ le 18-05-2006 à 14:30:21
Reply

Marsh Posté le 18-05-2006 à 14:33:11    

la table elle est sur que charset ? ton script sur lequel ?
 
tes données sont lisibles en clair dans phpmyadmin ? les accents sont pas remplacés par de l'hexa ou autre ?
 
y'a rien d'autre comme traitement sur tes variables post ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 14:48:04    

J'ai tenté ça mysqli_real_escape_string(). mais bon j'ai vu que j'étais en PHP 4.3.3 et que cette fonction marche pour le 5

Citation :


la table elle est sur que charset ? ton script sur lequel ?  


--> Je ne sais pas comment procéder pour savoir ça

Citation :


tes données sont lisibles en clair dans phpmyadmin ? les accents sont pas remplacés par de l'hexa ou autre ?


Oui mes données sont lisibles en clair les accents ne sont pas remplacés

Citation :


y'a rien d'autre comme traitement sur tes variables post ?


--> Auncun traitement sur mon post ( c'est le script AJAX qui me poste tout ca bien coreectement )

Reply

Marsh Posté le 18-05-2006 à 14:50:13    

alors faut voir coté AJAX [:spamafote]
 
la requête avec accents elle ressemble à quoi (coté source de la page, PAS la vue brouteur)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 14:58:06    

AJAX post comme si je faisais un post du formulaire les deux chaines postées sont strictement équivalentes ( strcmp = 0 ).
 
Je commence a devenir fou fou .  
 
Tu crois pas que si je fais une fonction d'analyse syntaxique qui va remplacer les accents par leur code ASCII ca devrait marcher ?

Reply

Marsh Posté le 18-05-2006 à 15:01:54    

à quoi ressemble la requête avec accents dans la source ? c'est comme celle déjà postée (ie les accents sont pas modifiés) ?  
 
y'a forcément un différence entre la chaine dans la table et celle demandée pour recherche [:spamafote]
 
après où est-elle modifée, aucune idée (c'est quand même limite binz ton truc)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 15:09:20    

Bah écoute c'est limite comme tu dis mais je ne sais pas du tout d'ou vient le soucis.  
La requête printée à les accents exactements comme dans la base donc je ne vois ps pas pourquoi ça ne marche pas
 
Sinon je vais essayer autre chose : une fonction qui analyse $type et qui dézingue les accents par des % ( pour que le like aille chercher n'importe quoi) .
Le résultats renvoyés seront les même et ça peut marcher.
 
Sinon je suis quand même pas trop mauvais, j'arrive a me débrouiller en PHP donc je ne raconte pas de betises même si mon truc parait louche le code en amont et en aval est validé. Je sais que ca peut paraitre bizarre ça m'est jamais arrivé mais bon.... :(  
 
Si tu as dautres idées je prends
 
Merci de ton aide déjà par avance


Message édité par TomZ le 18-05-2006 à 15:12:16
Reply

Marsh Posté le 18-05-2006 à 15:15:10    

euh ouais m'enfin sortir des requêtes comme ça déjà c'est pas génial (même en ignorant le problème)  
 
select * from modele_essai where lib_modessai like 'Caractéristiques dimensionnelles et réglage des tricycles%'
 
t'as forcément une merdouille vérifié les encodages de la page, le charset du serveur, de la table (c'est visible via phpmyadmin) et à la rigueur le log pour voir ce qui est réellement envoyé), vérifie aussi que t'as pas un champ binaire (sensible à la casse)
 
là c'est à toi de vérifier et revérifier encore, sans accés je vais pas pouvoir en savoir plus [:spamafote]
 
EDIT : ajoute aussi le charset dans les meta html, dans ton copié collé il n'y est pas ;)


Message édité par Sh@rdar le 18-05-2006 à 15:16:38

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-05-2006 à 15:43:00    

Dernière chose que je viens de tester.
Quand dans ma fonction qui requete j'écris

Code :
  1. echo $type."<br>";
  2. echo "Essai de r&eacute;sistance dynamique<br>";
  3. echo "Avec accents é é é é";
  4. Résultat
  5. Essai de franchissement d'obstacles
  6. Essai de résistance dynamique
  7. Avec accents ? ?


 
Les accents écrits directements échappés, je dois utilise les &eacute alors que les accents de mon $type fonctionnnent
 
Voilà c'est tout j'avance plus trop je vais voir si je peux trouver autre chose
 
EDIT : au niveau des accents j'y peux rien la base existait préalablement comme ça donc je dois me débrouiller avec l'existant c'est bien ça le soucis
 
EDIT : franchement les accents quoi c'est naze de mettre ca en BdD je peux meme pas faire de strstr pour trouver l'accent dans ma chaine
 
EDIT : c'est la manière dont AJAX post les valeur qui fait que les accents déconnent
pour un post c'est  
nom -> "Content-Type"
valeur -> "application/x-www-form-urlencoded" d'ou mon problème je vais voir donc ca de plus près merci pour tout


Message édité par TomZ le 18-05-2006 à 16:12:53
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed