Probleme de requete

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 : Probleme de requete

par donny » 05 juil. 2005, 15:13

yes et merci

par mere-teresa » 05 juil. 2005, 15:07

Résolu alors ?

par donny » 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

par mere-teresa » 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 ?

par pjl » 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.

par donny » 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

par mere-teresa » 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.

par donny » 05 juil. 2005, 14:00

je te suis pas trop
explique ou tu veux en venir

par pjl » 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 ?

par donny » 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

par pjl » 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'

par zeus » 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

par donny » 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;
}

par zeus » 05 juil. 2005, 11:47

fait un var_dump() sur chaque variable $_POST[]

Probleme de requete

par donny » 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