UPDATE Fonctionnel sur Easy php en local mais pas en ligne - PHP - Programmation
Marsh Posté le 24-12-2008 à 10:26:17
Bonjour
Alors déjà colorise ton code parce que là c'est illisible. Pour çà, utilise les balises :
[ code=php] <?php ton code ?> [ /code] sans les espaces
Ensuite, tu utilises mysql_error(), et comme on n'est pas des devins, le mieux c'est retourner l'erreur qui s'affiche.
Marsh Posté le 24-12-2008 à 10:27:52
[ code=php] <?php
if(isset($_GET['enreg'])){
$reket = "UPDATE article SET Nom_Art='".ucfirst($_POST['nomArt'])."' , Ref_Art='".$_POST['ref']."', Prix_Art='".$_POST['prix']."', Designation_Art='".$_POST['description']."', Documentation_Art='".$_POST['docu']."', Image_Art='".$_SESSION['nomFichier']."',Image_Art_large ='".str_replace("_small","",$_SESSION['nomFichier'])."', Id_RubCata_Art='".$_POST['categorie']."' WHERE Id_Art='".$_SESSION['art_modif']."';";
$result = mysql_query($reket);
if (!$result) {
die('Requête invalide : ' . mysql_error());
}
if ($result) echo"<script language='javascript'>window.location.href='listCatalogue.php?enreg=ok'</script>";
}
?> [ /code]
Marsh Posté le 24-12-2008 à 10:28:24
euh relis bien mon message : vite les espaces dans les balises
Marsh Posté le 24-12-2008 à 10:29:32
ça ne colorise rien là
bon bref
Il ne me renvoie pas d'erreur, il fait bien une modification de mon enregistrement mais en vidant les données
Marsh Posté le 24-12-2008 à 10:30:50
Code :
|
Marsh Posté le 24-12-2008 à 10:31:06
mais tu lis les messages ?
edit : à ça va mieux
Marsh Posté le 24-12-2008 à 10:31:59
Code :
|
Marsh Posté le 24-12-2008 à 10:32:28
quand tu dis, ta ligne s'efface, tu veux dire qu'elle se vide ? Attention c'est pas la même chose.
Marsh Posté le 24-12-2008 à 10:36:39
mon Udapte ne me renvoie pas d'erreur
elle fait bien une modification en me vidant les données précédentes et en prenant pas compte des nouvelles données saisies.
Marsh Posté le 24-12-2008 à 10:41:06
oui, donc elle n'efface pas la ligne comme tu le dis dans ton premier message.
As tu mis ton code en entier ?
Si oui, alors :
tu ne mets aucun session_start() : tu ne peux donc pas utiliser les sessions, et les variables sont vides.
Donc les champs sont vidés.
Ensuite, tu ne testes pas les variables POST et GET, tu mets quand même à jour. Si elles sont vides, tes champs sont vidés.
Enfin, tu n'échappes pas tes données : tu es vulnérable aux injections SQL
Marsh Posté le 24-12-2008 à 10:43:55
ReplyMarsh Posté le 24-12-2008 à 10:53:52
c' bon g compris
et pour le test de GET et POST
la fonction ISSET n'est pas suffisante ?
il y en existe d'autre de ce type ?
Marsh Posté le 24-12-2008 à 11:06:38
mnyware a écrit : tu n'échappes pas tes données ?_? (pas compris) |
c'est assez long à expliquer : recherche des choses sur Google à propos des injections SQL
Pour GET et POST, isset n'est pas suffisant : on peut envoyer des champs vides que çà marchera.
Utilise empty : voir la doc
Marsh Posté le 26-12-2008 à 10:13:13
Hello !!!
Joyeux noel à tous !!!
Luc@s j'ai fait tous ce que tu m'as dit ... ça marche nikel en local une fois sur serveur web ça marche une fois sur deux .
j'ai fait afficher la requête que j'envoie , je l'exécute directement dans le phpMyAdmin du site en ligne et là ça marche ...
C'est vraiment Chelou
Marsh Posté le 26-12-2008 à 10:28:09
que donne mysql_error() ? Quand tu dis çà marche une fois sur deux, c'est avec des données différentes ? Peut-on avoir le nouveau code STP ?
Marsh Posté le 26-12-2008 à 10:42:35
Code :
|
Marsh Posté le 26-12-2008 à 10:45:05
C'est toute ma page là pour la modification d'un article
et je n'ai toujours pas de mysql_error , que je teste sans la redirection finale bien entendu
Marsh Posté le 26-12-2008 à 10:54:07
Code :
|
Marsh Posté le 26-12-2008 à 11:09:32
non c'est juste un test, ne t'inquiète pas...
A part çà, avant tout, t'es-tu renseigné à propos des injections SQL ?
On dirait que non, ton code est vraiment truffé de failles.
Il faut parser tes chaines de caractères avec mysql_real_escape_string, et pour tes données numériques, vérifiez qu'il s'agisse bien de nombres, ou forcer leur type.
Marsh Posté le 26-12-2008 à 11:50:00
Code :
|
Marsh Posté le 26-12-2008 à 11:51:27
Voilà est ce que ça te parait correct now ??
ai je bien suivi les règles ? ... Je demande avant de remettre en ligne
merci
Marsh Posté le 26-12-2008 à 11:53:49
Nop regarde :
$_SESSION['art_modif'] = $_GET['idArt'];
$_GET['idArt'] contient peut être du code malveillant !
Tu vérifier que cette variable soit bien un entier.
Il est primordial que tu comprennes le fonctionnement des injections SQL, il ne faut pas utiliser mysql_real_escape_string sans comprendre son utilité.
Marsh Posté le 26-12-2008 à 11:58:13
ah autre chose :
Code :
|
C'est pareil que
Code :
|
qui est plus simple à lire et à écrire. Et peut être plus rapide
Marsh Posté le 26-12-2008 à 12:26:57
Code :
|
Marsh Posté le 26-12-2008 à 12:29:47
En je crois avoir compris
ce n'est pas seulement à travers les formulaire que l'on peut injecter des bout de requêtes mais aussi par l'adresse URL du navigateur ...
me reste plus qu'à refaire mes autres pages sur ce modèle et tout re-tester
Merci bien
je te tiens au courant
Marsh Posté le 26-12-2008 à 12:32:22
Ok, c'est mieux...
qu'est ce qui ne marche pas ? La requête d'affichage ou d'enregistrement ?
Peux-tu afficher la requête (echo $req) et nous donner celle qui s'affiche quand çà marche, et celle qui s'affiche quand çà ne fonctionne pas ?
Merci
Marsh Posté le 26-12-2008 à 12:39:59
mnyware a écrit : En je crois avoir compris |
tout à fait ! Même, tout ce qui provient du client (de l'utilisateur) doit être surveillé ! Données de formulaire POST, GET, et même les COOKIES !
Marsh Posté le 26-12-2008 à 12:55:29
c'est la requête d'enregistrement update qui ne marche pas elle celle de l'enregistrement
Code :
|
cela m'efface les données même après plusieurs essais successifs (100% d'échec de la requête) :
UPDATE article SET Nom_Art = 'Adaptateur2' , Ref_Art = 'ICAD100', Prix_Art = '0', Designation_Art = ' Adaptateur chargeur rapide.\r\nessai marny', Documentation_Art = '', Image_Art = 'default_small.jpg', Image_Art_large = 'default.jpg', Id_RubCata_Art = 12 WHERE Id_Art = '16';
UPDATE article SET Nom_Art = 'Frrr' , Ref_Art = 'rrrr', Prix_Art = '0', Designation_Art = ' rrrrrr', Documentation_Art = '', Image_Art = 'default_small.jpg', Image_Art_large = 'default.jpg', Id_RubCata_Art = 3 WHERE Id_Art = '16';
etc ...
Marsh Posté le 26-12-2008 à 13:02:25
ReplyMarsh Posté le 26-12-2008 à 13:05:19
ce que je comprend pas surtout c'est que j'ai 100% de succès d'exécution de mes requêtes avec easyPHP ...
il y aurait-il des choses à configurer sur mon serveur web pour que ça marche nikel en ligne ....
?_? Totally largued
Marsh Posté le 26-12-2008 à 14:35:42
alors il ne faut pas entourer $_SESSION de guillemets dans :
WHERE Id_Art = '".$_SESSION['art_modif']."';";
mais faire :
WHERE Id_Art = ".$_SESSION['art_modif'].";";
Sinon, MySQL comparera une chaine à un entier et ce ne sera pas bon. Et cela est valable pour tous les champs qui contiennent des nombres numériques
edit
Marsh Posté le 26-12-2008 à 15:35:28
j'ai modifié et même sans quotes ça ne marche pas, je n'ai que deux champs de type int (les deux derniers)
dernière requête exécuté :
UPDATE article SET Nom_Art = 'Essa' , Ref_Art = 'seee', Prix_Art = '', Designation_Art = ' eeeeeeeeeeeeeeeeeeeeeeeeeeeee', Documentation_Art = '', Image_Art = 'default_small.jpg', Image_Art_large = 'default.jpg', Id_RubCata_Art = 8 WHERE Id_Art = 16;
quand je colle cette requête directement dans phpMyAdmin ça me fait l'update .
Je suis sure que mes requêtes sont loin d'être nikel mais là je pense qu'il y a forcément un problème sur le serveur d'acheminement des requêtes ... enfin même pas puisque je n'ai pas de message d'erreur de non exécution des requêtes ...
Priz de tête ..pffff
Marsh Posté le 26-12-2008 à 16:03:16
Bon je viens de me rendre compte que cela dépendait du navigateur
sur firefox et Chrome mes requêtes d'UPDATE ne s'exécute pas mais sur IE oui
it's the mess ...pfff
any Solutions ??
Marsh Posté le 26-12-2008 à 18:12:24
çà vient surement des sessions. Affiche les pour voir ce qui cloche
Marsh Posté le 24-12-2008 à 10:12:43
Hello à tous
J'ai un petit problème d'UPDATE sur un site admin qui gère des articles ( Catalogue )
Ceux-ci marchent très bien en local mais lorsque je charge le site sur le serveur web et que j'essaye de modifier un article
ma ligne s'efface au lieu d'enregistrer les données.
un peu de code :
<?php
if(isset($_GET['enreg'])){
$reket = "UPDATE article SET Nom_Art='".ucfirst($_POST['nomArt'])."' , Ref_Art='".$_POST['ref']."', Prix_Art='".$_POST['prix']."', Designation_Art='".$_POST['description']."', Documentation_Art='".$_POST['docu']."', Image_Art='".$_SESSION['nomFichier']."',Image_Art_large ='".str_replace("_small","",$_SESSION['nomFichier'])."', Id_RubCata_Art='".$_POST['categorie']."' WHERE Id_Art='".$_SESSION['art_modif']."';";
$result = mysql_query($reket);
if (!$result) {
die('Requête invalide : ' . mysql_error());
}
if ($result) echo"<script language='javascript'>window.location.href='listCatalogue.php?enreg=ok'</script>";
}
?>
Pareil pour un autre UPDATE qui me sert à changer l'index d'enregistrement , déplacement vers le bas ou vers le haut
<?php
if (isset($_GET['UpId'])){
$rekdep= "SELECT * FROM news where Id_News < " .$_GET['UpId']." order by Id_News Desc limit 1;";
$row = mysql_fetch_array(mysql_query($rekdep));
if (!isset($row[0])){
echo "<h3 class='message'>Déplacement impossible</h3>";
}else{
$exe = mysql_query("UPDATE IGNORE news SET Id_News = ".$row[0]." WHERE Id_News = ".$_GET['UpId']);
if($exe){
//echo"<script language='javascript'>window.location.reload();<script>";
mysql_query("UPDATE IGNORE news SET Id_News = ".$_GET['UpId']." WHERE Id_News = ".$row[0]." AND Contenu_News like '".$row[1]."'" );
}
}
}
if (isset($_GET['DownId'])){
$rekdep= "SELECT * FROM news where Id_News >" .$_GET['DownId']." order by Id_News limit 1;";
$row = mysql_fetch_array(mysql_query($rekdep));
if (!isset($row[0])){
echo "<h3 class='message'>Déplacement impossible</h3>";
}else{
$exe = mysql_query("UPDATE IGNORE news SET Id_News = ".$row[0]." WHERE Id_News = ".$_GET['DownId']);
if($exe){
//echo"<script language='javascript'>window.location.reload();<script>";
mysql_query("UPDATE IGNORE news SET Id_News = ".$_GET['DownId']." WHERE Id_News = ".$row[0]." AND Contenu_News like '".$row[1]."'" );
}
}
}
?>