Page 1 sur 1

PHP - POSTGRESQL 8 problème insert integer

Posté : 28 avr. 2006, 11:14
par bzayid
Bonjour à tous,

J'ai un petit problème à cause de ma db postgresql 8.



Le problème est le suivant :

je traite un formulaire qui m'envoie la valeur de plusieurs champs "nombre".
$nombre1 = $_POST["nombre1"];
$nombre2 = $_POST["nombre2"];
$nombre3 = $_POST["nombre3"];
$nombre4 = $_POST["nombre4"];
dans ma db, ces champs sont de type integer sans restriction càd null.

si l'utilisateur entre quelque chose j'aurais
- soit la valeur du champ nombre
- soit le vide.

J'effectue une requete d'INSERT
$rq = "INSERT INTO table (nombre1,nombre2,nombre3,nombre4,) VALUES ('$nombre1','$nombre2','$nombre3','$nombre4')";

$sql = pg_query($rq);
A ce moment j'ai une erreur comme quoi le champ de type integer ne peut pas recevoir la valeur '' (qui est le vide). En fait, ce sont les simples cot qui m'embêtent. Le problème c'est que si je les mets pas, j'ai une syntaxe erreur.

J'ai essayé ça :
if (empty($_POST["nombre1"])) { $nombre1 = null; } else { $nombre1 = $_POST["nombre1"]; }
Mais les simples cot empêchent là aussi la valeur null d'être insérée...

A moins de faire 4 requêtes séparées en testant avant si la valeur du la variable est vide, je ne vois pas comment faire... Est-ce la seule solution ?

Note: dans la version antérieure de postgresql, le problème ne se posait pas. je suppose qu'il ont rendu le typage des champs plus strict...

Merci d'avance.

Posté : 28 avr. 2006, 11:26
par Vaedan
il me semble que pour mysql, il suffit d'avoir un insert contenant NULL (sans cot simple ou double). ça doit être pareil pour postgresql 8 ...

Posté : 28 avr. 2006, 11:29
par bzayid
oui, si je mets null sans cot, ça marche (j'avais déjà essayé) mais le problème c'est que je ne sais pas à priori si je vais recevoir une valeur ou pas...

Posté : 28 avr. 2006, 11:42
par Vaedan
bah bah bah ! pourquoi tu veux du null alors que du vide suffit :)
insere tout simplement du vide '' au lieu d'un null. et si tu veux vraiment du null :
if ( strlen( $ma_chaine_postgre ) === 0 )
{
    $ma_chaine_postgre = NULL;
}

Posté : 28 avr. 2006, 11:49
par bzayid
insere tout simplement du vide ''
je te dis qu'il veut pas insérer du vide...
A ce moment j'ai une erreur comme quoi le champ de type integer ne peut pas recevoir la valeur '' (qui est le vide). En fait, ce sont les simples cot qui m'embêtent. Le problème c'est que si je les mets pas, j'ai une syntaxe erreur.

Posté : 28 avr. 2006, 12:22
par Vaedan
$nombre1 = !empty( $_POST["nombre1"] ) ? "'".$_POST["nombre1"]."'" : "NULL";
$nombre2 = !empty( $_POST["nombre2"] ) ? "'".$_POST["nombre2"]."'" : "NULL";
$nombre3 = !empty( $_POST["nombre3"] ) ? "'".$_POST["nombre3"]."'" : "NULL";
$nombre4 = !empty( $_POST["nombre4"] ) ? "'".$_POST["nombre4"]."'" : "NULL";

$rq = "INSERT INTO table (nombre1,nombre2,nombre3,nombre4,) VALUES ($nombre1,$nombre2,$nombre3,$nombre4)";

$sql = pg_query($rq);

Posté : 28 avr. 2006, 12:48
par bzayid
Merci beaucoup, ça marche !

J'y avait pensé et j'avais déjà essayé mais ça ne fonctionnait pas... j'avais sans doute du faire une erreur quelque part.

En tout cas, encore merci ;)