PHP - POSTGRESQL 8 problème insert integer

Eléphanteau du PHP | 42 Messages

28 avr. 2006, 11:14

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.

Eléphant du PHP | 493 Messages

28 avr. 2006, 11:26

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 ...

Eléphanteau du PHP | 42 Messages

28 avr. 2006, 11:29

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...

Eléphant du PHP | 493 Messages

28 avr. 2006, 11:42

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;
}

Eléphanteau du PHP | 42 Messages

28 avr. 2006, 11:49

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.

Eléphant du PHP | 493 Messages

28 avr. 2006, 12:22

$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);

Eléphanteau du PHP | 42 Messages

28 avr. 2006, 12:48

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 ;)