Probleme de requete

Eléphant du PHP | 406 Messages

05 juil. 2005, 11:43

salut,

J execute une requete sur un de mes formulaires,et pour les champs date et numrique,je dois obligatoirement avoir une valeur à l interieur ou bien NULL pour qu il puisse etre enregistrer dans ma base.
donc j ai faice code, qui me permet quand la zone texte est vide de mettre NULL.
mais le truc c est que sa marche pour les valeur numerique mais pas pour les valeurs date et je pige pas ..
$null="NULL";
if(!empty($_POST['prix']))
{
    $sql1=$sql1." , prix=".$_POST['prix'];
}
else
{
    $sql1=$sql1." , prix=".$null;
}
if(!empty($_POST['liv']))
{
    $sql1=$sql1." , date_livraison='".$_POST['liv']."'";
}
else
{
    $sql1=$sql1." , date_livraison=".$null;
}
if(!empty($_POST['sit']))
{
    $sql1=$sql1." , duree_garantie_site=".$_POST['sit'];
}
else
{
    $sql1=$sql1." , duree_garantie_site=".$null;
}
if(!empty($_POST['ret']))
{
    $sql1=$sql1." , duree_garantie_atelier=".$_POST['ret'];
}
else
{
    $sql1=$sql1." , duree_garantie_atelier=".$null;
}
if(!empty($_POST['fin']))
{
    $sql1=$sql1." , date_fin_contrat='".$_POST['fin']."'";
}
else
{
    $sql1=$sql1." , date_fin_contrat=".$null;
}
J ai cela à l affichage
update ........, prix=NULL , date_livraison=' ' , duree_garantie_site=NULL , duree_garantie_atelier=NULL , date_fin_contrat=' ' where numserie='com36'
et normalement je devrais avoir cela d apres mon code(et pour que sa m insere les donner dans ma base)
update ........, prix=NULL , date_livraison=NULL , duree_garantie_site=NULL , duree_garantie_atelier=NULL , date_fin_contrat=NULL where numserie='com36'

Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 juil. 2005, 11:47

fait un var_dump() sur chaque variable $_POST[]
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 406 Messages

05 juil. 2005, 11:53

je viens de faire cela,j ai mis empty pour les 2 champs date et sa fonctionne, j ai null qui s affiche.
Et pourtant !empty sa signifie que si la zone texte est pas vide alors je prends la valeur $_POST.C est pas logique car à l affichage mes zone texte date sont vide.
Est ce que sa pourrait venir du faite que j ai cela dans ma zone texte date :

Code : Tout sélectionner

<input type="text" name="liv" value="<? if(empty($_SESSION['date_livraison'])){ echo " ";}else{ echo date('d/m/Y', strtotime(@$_SESSION['date_livraison']));} ?>">
Il considere l espace comme une chaine de caractere ??
$null="NULL";
if(!empty($_POST['prix']))
{
    $sql1=$sql1." , prix=".$_POST['prix'];
}
else
{
    $sql1=$sql1." , prix=".$null;
}
if(empty($_POST['liv']))
{
    $sql1=$sql1." , date_livraison='".$_POST['liv']."'";
}
else
{
    $sql1=$sql1." , date_livraison=".$null;
}
if(!empty($_POST['sit']))
{
    $sql1=$sql1." , duree_garantie_site=".$_POST['sit'];
}
else
{
    $sql1=$sql1." , duree_garantie_site=".$null;
}
if(!empty($_POST['ret']))
{
    $sql1=$sql1." , duree_garantie_atelier=".$_POST['ret'];
}
else
{
    $sql1=$sql1." , duree_garantie_atelier=".$null;
}
if(empty($_POST['fin']))
{
    $sql1=$sql1." , date_fin_contrat='".$_POST['fin']."'";
}
else
{
    $sql1=$sql1." , date_fin_contrat=".$null;
}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 juil. 2005, 11:57

normalement non, mais essaye de remplacer empty par isset

Je n'aime pas utiliser empty car il considère pas mal de choses bizarement
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
pjl
ViPHP | 2119 Messages

05 juil. 2005, 12:44

Oui, un espace est considéré comme une chaine de caractères.

C'est quoi ce format de date pour stocker dans une base de données ?
echo date('d/m/Y'

Eléphant du PHP | 406 Messages

05 juil. 2005, 13:10

c est pour l affichage de ma date,
pour que sa l affiche comme sa jj/mm/aaaa au lieu de aaaa/mm/jj

ViPHP
pjl
ViPHP | 2119 Messages

05 juil. 2005, 13:47

A ton avis, pourquoi on s'est amusé à créer des formats de date dans les bases de données ?
Pour faire joli ou parce que c'est utile ?

Eléphant du PHP | 406 Messages

05 juil. 2005, 14:00

je te suis pas trop
explique ou tu veux en venir

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

05 juil. 2005, 14:18

Mieux vaut stocker tes dates au format SQL (voir la documentation MySQL chez Nexen) pour pouvoir faire des calculs sur les dates.
DONC dans ta base déclare la colonne date au format DATE !

Sinon, tu peux stocker ta date comme tu le fais avec des slashs si tu mets l'année en premier.

Vous pouvez spécifier les valeurs des colonnes DATETIME , DATE et TIMESTAMP , avec les formats communs suivants :

* Une chaîne au format 'AAAA-MM-JJ HH:MM:SS' ou 'AA-MM-JJ HH:MM:SS' . Une syntaxe plus souple est permise : tout caractère de ponctuation peut être utilisé comme délimiteur entre les parties de temps ou heure. Par exemple, '98-12-31 11:30:45' , '98.12.31 11+30+45' , '98/12/31 11*30*45' , et '98@12@31 11^30^45' sont équivalents.
* Une chaîne au format ' AAAA-MM-JJ ' ou ' AA-MM-JJ '. Une syntaxe plus flexible est aussi acceptée ici. Par exemple, ' 98-12-31 ', ' 98.12.31 ', ' 98/12/31 ', et ' 98@12@31 ' sont équivalent.
* Une chaîne sans aucun délimiteurs sous la forme ' AAAAMMJJHHMMSS ' ou ' AAMMJJHHMMSS ', en supposant qu'une telle chaîne ait un sens en terme de date. Par exemple ' 19970523091528 ' et ' 970523091528 ' sont interprétés comme ' 1997-05-23 09:15:28 ', mais ' 971122129015 ' est invalide (les minutes ne sont pas valides) et devient alors ' 0000-00-00 00:00:00 '.
* Une chaîne sans aucun délimiteurs sous la forme ' AAAAMMJJ ' ou ' AAMMJJ ', en supposant qu'une telle chaîne ait un sens en terme de date. Par exemple, ' 19970523 ' et ' 970523 ' sont interprétés comme ' 1997-05-23 ', mais ' 971332 ' est invalide (les mois ne sont pas valides) et devient alors ' 0000-00-00 '.
* Un nombre au format AAAAMMJJHHMMSS ou AAMMJJHHMMSS , en supposant qu'un tel nombre ait un sens en terme de date. Par exemple, 19830905132800 et 830905132800 sont interprétés comme ' 1983-09-05 13:28:00 '.
* Un nombre au format AAAAMMJJ ou AAMMJJ en supposant qu'un tel nombre ait un sens en terme de date. Par exemple, 19830905 et 830905 sont interprétés comme ' 1983-09-05 '.
* Un résultat de fonction qui retourne une valeur acceptable dans une colonne de type DATETIME , DATE , ou TIMESTAMP , tels que NOW() ou CURRENT_DATE .
Ne vous énervez pas et lisez le manuel.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 406 Messages

05 juil. 2005, 14:24

Merci
mais dans ma base la date est bien declarer au format date
et j utilise postgres ,ce qui fait que t es obliger de rentrer une date ou la valeur NULL, il n accepte pas les champs vide

ViPHP
pjl
ViPHP | 2119 Messages

05 juil. 2005, 15:00

Alors il y a un pb quelque part.

Le format de date dans une base de données est : yyyy-MM-DD

Toi, dans ton formulaire, tu fais
<input type="text" name="liv" value="<?  if(empty($_SESSION['date_livraison'])){ echo " ";}else{ echo date('d/m/Y', strtotime(@$_SESSION['date_livraison']));} ?>">
et tu traites ta date ainsi :
if(empty($_POST['liv']))
{
    $sql1=$sql1." , date_livraison='".$_POST['liv']."'";
}
else
{
    $sql1=$sql1." , date_livraison=".$null;
} 
ce qui signifie que tu récupères une date au format dd/mm/yyyy.
Il y a incompatibilité entre les 2, en plus si tu relis ta condition, elle est fausse.
Modifié en dernier par pjl le 05 juil. 2005, 15:04, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

05 juil. 2005, 15:00

As-tu testé le contenu de ta variable en la regardant ?

càd fait echo ou encore mieux var_dump() de ta variable avant la série de if/else ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 406 Messages

05 juil. 2005, 15:06

nan sa fonctionne maintenant
le probleme c etait qu il considerais le echo " " comme une chaine de caractere et ce qui fait que ma zone texte n etait jamais.
Donc j ai changer cela, en enlevant le echo et sa fonctionne
et Pjl
Alors il y a un pb quelque part.

Le format de date dans une base de données est : yyyy-MM-DD
en theorie c est vrai ce que tu dit,mais dans ma base il y a une option qui me permet de saisir ma date au format dd/mm/yyyy.Je l ai activer et c est pour cela que saisi ma date ainsi.
C est juste pour la saisi car dans ma base,la date reste toujours au format yyyy/mm/dd

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

05 juil. 2005, 15:07

Résolu alors ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 406 Messages

05 juil. 2005, 15:13

yes et merci