Erreur 500 ORA-01722 lors d'un update

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 : Erreur 500 ORA-01722 lors d'un update

Re: Erreur 500 ORA-01722 lors d'un update

par Mazarini » 21 mars 2012, 09:54

Autre point relevé, sur le même poste de travail, le symbole décimal en utilisant l'application en local est la virgule alors que sur le serveur c'est le point qui s'affiche. Cela a t'il son importance ?
Il faut que l'écriture du décimal soit conforme avec le paramétrage de la base de données. Donc tu dois changer le paramétrage d'une des 2 bases. Tu peux aussi définir de symbole décimal dans une constante et utiliser cette constante.

Par gout personnel je stockerai les données avec un point et je gèrerai la virgule à l'affichage et en reception de saisie (à moins que tes utilisateurs accepte le point comme décimal).

Re: Erreur 500 ORA-01722 lors d'un update

par jeepyfr » 21 mars 2012, 09:45

Bonjour,

Voici le code qui transforme la saisie utilisateur en nombre au format 999,99 pour être mis à jour dans la table Oracle

if(isset($_POST['montantbrut1']) && !empty($_POST['montantbrut1']))
{
if($oldmontantbrut1!=formatennombre($_POST['montantbrut1']))
{
if(strlen($data) > 0)
{
$data .= ', ';
}
$data .= 'MONTANTBRUT1 = \''.doubleapostrophe(formatennombre($_POST['montantbrut1'])).'\'';
}
}
echo $data; <---- Ca c'est moi !

Détail ds fonctions :
function formatennombre($nb)
{
$tmp = trim($nb);
$tmp= str_replace("€","",$tmp);
$tmp= str_replace(" ","",$tmp);
$tmp= str_replace(".",",",$tmp);
return $tmp;
}
function doubleapostrophe($str)
{
$result= str_replace("'","''",$str);
return $result;
};

Voici les différents Echo récupérer sur le poste lancant l'application via http:127.0.0.1\app
MONTANTBRUT1 = '222,11'
UPDATE an_infirm.ATTEST_ACCIDENT_TRAV SET MONTANTBRUT1 = '222,11' WHERE NUM_ATTEST = 1743
La mise à jour s'effectue correctement dans la base Oracle

Sur le serveur http:\\ipserveur\app l'éxécution de la même transaction me renvoi le code erreur 500....

Autre point relevé, sur le même poste de travail, le symbole décimal en utilisant l'application en local est la virgule alors que sur le serveur c'est le point qui s'affiche. Cela a t'il son importance ?

Merci

Re: Erreur 500 ORA-01722 lors d'un update

par moogli » 20 mars 2012, 19:11

Salut,

Il faudrait voir le code html et php. Avoir une idée de la table en question.

Si tu donne à manger le message d'erreur d'oracle (oui c'est erreur oracle et non php ;) ) a Google tu devrais tomber sur la dix du message d'erreur.

Je pense que :
- soit le champs n'est pas prévue pour avoir une virgule (number....)
- soit on peux utiliser un separateur decimal mais tu n'utilise pas le bon, typiquement une virgule au lieux d'utiliser un point. Dans ce cas c'est simple il faut remplacer la virgule par un point (str_replace).

@+

Erreur 500 ORA-01722 lors d'un update

par jeepyfr » 20 mars 2012, 17:49

Bonjour à tous,
100% novice en PHP, je debugue une appli developpée par un stagiaire.
Mon soucis est le suivant :
Je recupère une erreur 500 lors de l’update sur une valeur numérique avec décimales.
L’update vers Oracle fonctionne très bien tant que je ne mets pas de symbole décimal.

Le message récupéré dans le php-errors.log est le suivant :

[20-Mar-2012 15:15:03 UTC] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1722 OCIStmtExecute: ORA-01722: invalid number
(ext\pdo_oci\oci_driver.c:356)' in C:\inetpub\wwwroot\Infirm\attest_salairedetail.php:1144
Stack trace:
#0 C:\inetpub\wwwroot\Infirm\attest_salairedetail.php(1144): PDO->exec('UPDATE an_infir...')
#1 {main}
thrown in C:\inetpub\wwwroot\Infirm\attest_salairedetail.php on line 1144

Mon serveur est en W2k8, php 5.3.9 et IIS 7.5

Lorsque je teste la page sur la machine de developpement (Seven, easyphp 5.3.8.1) en localhost tout fonctionne.

Merci par avance pour tout aiguillage. :priere: :priere: