[RESOLU] Probleme de conversion de Datetime

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 : [RESOLU] Probleme de conversion de Datetime

Re: [RESOLU] Probleme de conversion de Datetime

par @rthur » 23 nov. 2016, 18:51

Je fais pareil également two3d, j'ai arrêté les INSERT... VALUES pour ne plus utiliser que des INSERT... SET car c'est beaucoup + lisible et simple à relire/debuguer

Re: [RESOLU] Probleme de conversion de Datetime

par two3d » 23 nov. 2016, 15:15

Perso, je fais mes insert mysql comme ceci:
$requete="INSERT INTO ma_table SET monchamp1='valeur1(en varchar par exemple, donc avec les guillemets simple ou double suivant comment tu entoure cette requete...)',monchamp2=542"); //sans guillemets si c'est un champ de type int ou autre type chiffres
Pour ceux qui connaisse cette méthode d'insert (avec SET) qu'en pensez-vous ? est ce correcte comme façon ?

Re: Probleme de conversion de Datetime

par Vapegnast » 23 nov. 2016, 12:14

Oui je pense aussi :S
Merci a vous je met le post en resolu!

Re: Probleme de conversion de Datetime

par moogli » 23 nov. 2016, 12:06

En effet merci pour cette réponse détaillée,
lorsque j'utilise mysqli_real_escape_string cela me donne

Code : Tout sélectionner

Warning: mysqli_real_escape_string() expects parameter 2 to be string, object given in C:\wamp64\www\intranet3\check_form\check_task.php on line 14
le problème est le même que je le première et que j'ai détaillé.

Pour le reste soit tu utilises des champs qui peuvent être null, soit une valeur par défaut.

je pense que rechercher des cours sur les bases du SQL serait pas mal ;)

@+

Re: Probleme de conversion de Datetime

par Naroth » 23 nov. 2016, 11:51

Bonjour,

Pour ne pas modifier le type de quantity et de price tu aurais pu écrire ta requete ainsi

Version avec NULL

Code : Tout sélectionner

INSERT INTO task ( id_user, task_type, id_client, brand, quantity, price, attr1 , attr2 , attr3 , com , date_task) VALUES( '2' , 'passed_call','259','','',NULL,NULL,'','','','2016-11-23 09:21:06.000000')
Price et Quantity sont inconnus

Version avec -1

Code : Tout sélectionner

INSERT INTO task ( id_user, task_type, id_client, brand, quantity, price, attr1 , attr2 , attr3 , com , date_task) VALUES( '2' , 'passed_call','259','','',-1,-1,'','','','2016-11-23 09:21:06.000000')
Price et Quantity sont à des valeurs impossibles

Si tu mets quelque chose entre doubles ou simple quote dans une requete SQL, ce quelquechose sera considéré comme une chaîne de caractères (varchar)

Re: Probleme de conversion de Datetime

par Vapegnast » 23 nov. 2016, 11:41

ma colonne quantity est en int(5), price est en float,
mon problème est résolu quand je les ai modifier en varchar 255 mais je trouve que c'est pas très propre, pour la date j'ai rajouter :

Code : Tout sélectionner

$date = $date->setTimezone(new DateTimeZone('Europe/Paris'));

Re: Probleme de conversion de Datetime

par Vapegnast » 23 nov. 2016, 11:22

J'ai fais un var_dump de ma requete qui est :

Code : Tout sélectionner

INSERT INTO task ( id_user, task_type, id_client, brand, quantity, price, attr1 , attr2 , attr3 , com , date_task) VALUES( '2' , 'passed_call','259','','','','','','','','2016-11-23 09:21:06.000000')
et dans phpmyadmin il me disent :
#1366 - Incorrect integer value: '' for column 'quantity' at row 1

Re: Probleme de conversion de Datetime

par @rthur » 22 nov. 2016, 19:53

Ce serait + simple si tu nous donnais le message d'erreur exact ;)

Re: Probleme de conversion de Datetime

par Vapegnast » 22 nov. 2016, 18:50

Apparemment si je ne remplis pas les cases prix et quantité il me met une erreur d'insertion
alors que dans ma bdd leur valeur par défaut sont NULL

Re: Probleme de conversion de Datetime

par Vapegnast » 22 nov. 2016, 18:37

En effet merci pour cette réponse détaillée,
lorsque j'utilise mysqli_real_escape_string cela me donne

Code : Tout sélectionner

Warning: mysqli_real_escape_string() expects parameter 2 to be string, object given in C:\wamp64\www\intranet3\check_form\check_task.php on line 14
J'ai corrigé mon code en mettant

Code : Tout sélectionner

$date = $date->format('Y-m-d H:i:s.u');
a la place de

Code : Tout sélectionner

$date->format('Y-m-d H:i:s.u');
Maintenant je n'ai plus de probleme d'insertion sauf que la date que j'insert dans la bdd et en retard d'une heure.
J'ai 16h36 a la place de 17h36.

Re: Probleme de conversion de Datetime

par two3d » 22 nov. 2016, 18:13

Salut,

essaye en mettant directement la date comme ceci:

Code : Tout sélectionner

$date=date('Y-m-d H:i:sP');

Re: Probleme de conversion de Datetime

par moogli » 22 nov. 2016, 16:46

salut,

c'est parce que essai de mettre directement la variable $date, qui est un objet de type DateTime, dans une chaîne de caractère et ceci n'est pas possible.
tu emplois déjà la méthode format, c'est très bien mais il faut récupérer le retour de cette méthode et l'utiliser dans la chaîne de caractères.
en clair cette ligne $date->format('Y-m-d H:i:sP'); ne sert à rien vu que tu n'utilises pas de le retour.

ton code est très bien pour une bonne injection SQL.
utilise mysqli_real_escape_string ou bien une requêtes préparées (même si la première option me semble meilleur).

Dernière chose, dans ton cas il semble que l'utilisation de la classe DateTime te sert à insérer la date courante dans la base (dans le champ date_task). Si ce champs est un champ de type date autant utiliser le faire directement en SQL => current_date ou now().


@+

Probleme de conversion de Datetime

par Vapegnast » 22 nov. 2016, 16:21

Bonjour j'ai ceci dans mon code:

Code : Tout sélectionner

<?php $id_user = $_SESSION['user_id']; $task_type = $_POST['task_type']; $id_client = $_POST['client_username']; $brand = $_POST['brand']; $quantity = $_POST['quantity']; $price = $_POST['price']; $attr1 = $_POST['attr1']; $attr2 = $_POST['attr2']; $attr3 = $_POST['attr3']; $com = $_POST['com']; $date = new DateTime(); $date->format('Y-m-d H:i:sP'); var_dump($date); $rq = "INSERT INTO task ( id_user, task_type, id_client, brand, quantity, price, attr1 , attr2 , attr3 , com , date_task) VALUES( '{$id_user}' , '{$task_type}','{$id_client}','{$brand}','{$quantity}','{$price}','{$attr1}','{$attr2}','{$attr3}','{$com}','{$date}') "; $decode = mysqli_query($connection,"SET NAMES utf8"); $query = mysqli_query( $connection, $rq); if($query){ echo "reussi"; // header('Location: index.php?page=task'); }else{ echo "echec"; echo $rq; } ?>
et il m'affichent Catchable fatal error: Object of class DateTime could not be converted to string in C:\wamp64\www\intranet3\check_form\check_task.php on line 16