Php-Mysql - longueur insert

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 : Php-Mysql - longueur insert

Re: Php-Mysql - longueur insert

par devlop78 » 22 nov. 2010, 01:32

En fait, j'avais pas lu le code.

Mais http://php.net/manual/fr/function.fread.php semble apporter éventuellement une réponse.
string fread ( resource $handle , int $length )

fread() lit jusqu'à length octets dans le fichier référencé par handle. La lecture s'arrête lorsqu'une des conditions suivantes apparaît :

* length octets ont été lus
* la fin du fichier est atteinte
* un paquet devient disponible ou le temps socket timeout est passé (pour les flux réseau)
* 8192 octets ont été lus (après avoir ouvert un flux utilisateurs)
Ce que je ferais aussi c'est de verifier que $_FILES['fichier']['size'] est bien égal à filesize($_FILES['fichier']['tmp_name'])

Re: Php-Mysql - longueur insert

par devlop78 » 22 nov. 2010, 01:21

Concernant l'échappement, il vaut mieux utiliser la fonction adaptée au sgbd, pilote ou tous les termes que tu veux. Un exemple : si ton sgbd échappe les simples quotes en les doublants, tes \' peuvent poser problème. Bref.

Pour la longueur, la question c'est déjà de savoir ce que tu transmets à php. Après, il faut voir ce que recoit mysql ...

Re: Php-Mysql - longueur insert

par hal777 » 21 nov. 2010, 21:13

Que donne un strlen() de ton insert n°2 ?

Sinon, vérifies que ton champs d'image est bien conçu pour du binaire, et que l'échappement est bien effectué.
L'échappement : Il est OK (voir le addslashes qui est fait).

Le pire c'est que si je met à jour la fiche utulisateur en ne modifiant que l'image : ça marche.
Si je modifie trop de valeur : ça explose ! :cry:

Quand tu parle de l'insert 2 : tu veux dire update ?
Je dit ça car je viens de relire mon post et je constate que j'ai dit insert au lieu de update ... bref ...
Je suppose que tu veux avoir la longueur du champs ou se trouve l'image.

Je vais voir.

Re: Php-Mysql - longueur insert

par devlop78 » 21 nov. 2010, 20:19

Que donne un strlen() de ton insert n°2 ?

Sinon, vérifies que ton champs d'image est bien conçu pour du binaire, et que l'échappement est bien effectué.

Php-Mysql - longueur insert

par hal777 » 21 nov. 2010, 19:30

Bonjour,

Je développe actuellement un petit site PHP avec une base Mysql.
J'ai un problème d'exécution d'une requête SQL et je ne sais pas à quoi c'est dû :oops:

Dans ma fiche utilisateur on peut renseigner des informations comme année de naissance, adresse ...
On peu aussi ajouter une photo qui sera affichée en haut à droite de la page du navigateur lorsqu'il est connecté.

Toutes les infos de la fiche utilisateurs sont passées en POST à une page PHP qui prépare l'Insert (y compris l'image)
-> je sais que le stockage d'image en base fait débat mais c'est mon choix (je vais de toutes façons stocker d'autres document en base).
Lorsque je valide mon formulaire sans image : tout va bien l'update se fait sans problème.
Dès que j'ajoute une image, l'insert ne se fait pas.
Lorsque je débug en affichant la requête dans ma page html au lieu de l'exécuter, je constate que l'insert n'est pas complet !

Si vous avez des idées !! je suis preneur car je suis à sec là 8-|

Ex :
  • -1- Update sans image : UPDATE USERS SET ADRESSE1='xxxxxxxx', ADRESSE2='YYYYYY', ADRESSE3='99999', TEL1='0000000000' WHERE USERID='TOTO'
    -2- Update avec image : UPDATE USERS SET ADRESSE1='xxxxxxxx', ADRESSE2='YYYYYY', ADRESSE3='99999', IMAGE_TAILLE='2492',IMAGE_TYPE='image/jpeg', IMAGE_DATAS='ÿØÿà\0JFIF\0\0\0d\0d\0\0ÿì\0Ducky\0\0\0\0\0<\0\0ÿî\0Adobe\0dÀ\0\0\0ÿÛ\0„\0 ÿÀ\0\0P\0@\0ÿÄ
On constate bien que la requête n'est pas complète dans l'Ex N°2 !!!
Est-elle tronquée à cause d'un caractère bizarre ?
Longueur max d'une variable PHP atteinte ?
je ne sais pas ... #-o
Dans la réalité : si je compte le nombre de caractères de ma variable c'est pas toujours pareil en fonction de l'image choisie mais c'est dans les 2000 à plus ou moins 300.

Ci-dessous une version épurée de la page profil : en gros lorsqu'on click sur "Sauver" j'exécute une fonction javascript pour checker le contenu de chaque input et ensuite faire le POST vers une page PHP qui récupère le tout, génère un Update et exécute l'Update.

Page Profil.php

Code : Tout sélectionner

<script language="JavaScript" type="text/JavaScript"> function Controler_profil() { document.forms['userprofile'].method = "POST"; document.forms['userprofile'].submit(); } </script> <form id="userprofil" enctype="multipart/form-data" action="insert.php5"> <input type="file" onFocus="chgfond(this,'on');" onBlur="chgfond(this,'off');" class='Text2Noir' name="fichier"> <input name='terminer' type='text' value='Sauver.' onClick='Controler_profil();'> </form>
Page Insert.php5

Code : Tout sélectionner

<?php $Req_update_table="UPDATE USERS "; $Req_update_set="SET "; $Req_update_where="WHERE USERID=".$_POST['userid']; ... $file = fopen($_FILES['fichier']['tmp_name'],"rb"); $img_blob=fread($file,$_FILES['fichier']['size']); $Req_update_set=$Req_update_set."IMAGE_TAILLE='".$_FILES['fichier']['size']."',"; $Req_update_set=$Req_update_set."IMAGE_TYPE='".$_FILES['fichier']['type']."',"; $Req_update_set=$Req_update_set."IMAGE_DATAS='".addslashes($img_blob)."' "; ... $Requete_update_user=$Req_update_table.$Req_update_set.$Req_update_where." LOGIN='".$_POST['userid']."'"; $Execute_update=mysqli_query($connect_mysql,$Requete_update_user); ?>