J'ai un formulaire qui transmet deux dates (début et fin) à un script PHP qui les ajoutera à une base de données. J'ai des problèmes pour valider cela. Je continue à avoir les erreurs suivantes
Une valeur numérique mal formée rencontrée
C’est à ce moment que j’utilise ce qui suit
date("d",$_GET['start_date']);
Mais lorsque j'utilise la fonction strtotime () comme conseillé par de nombreux sites, j'obtiens une date d'horodatage Unix du 1/1/1970 . Des idées pour obtenir la date exacte?
Parce que vous passez une chaîne en tant que second argument de la fonction date, qui doit être un entier.
string date (string $ format [ int $ timestamp = time ()])
Essayez strtotime qui analysera toute description de date/heure textuelle en anglais dans un timestamp Unix (entier):
date("d", strtotime($_GET['start_date']));
$_GET['start_date']
n'est pas numérique, c'est mon pari, mais un format de date non supporté par strtotime
. Vous devrez reformater la date en un format utilisable pour strtotime ou utiliser la combinaison de explode / mktime .
Je pourrais vous ajouter un exemple si vous aviez la gentillesse d’afficher le format que vous recevez actuellement.
Vous pouvez simplement résoudre ce problème en utilisant la fonction strtotime()
.
date("d",strtotime($_GET['start_date']));
J'ai rencontré la même situation (dans mon cas, avec une valeur de date dans un champ personnalisé PHP dans une vue Drupal), et ce qui a fonctionné pour moi était d'utiliser intval au lieu de strtotime pour transformer la valeur en entier, était fondamentalement un horodatage, mais sous la forme d'une chaîne plutôt que d'un entier. Évidemment, ce ne sera pas le cas pour tout le monde, mais cela pourrait valoir la peine d'essayer.
Cela m'a beaucoup aidé -
$new_date = date_format(date_create($old_date), 'Y-m-d');
C'est une vieille question, mais il y a une autre manière subtile que ce message peut arriver. C'est assez bien expliqué ici, dans la documentation .
Imaginez ce scénario:
try {
// code that triggers a pdo exception
} catch (Exception $e) {
throw new MyCustomExceptionHandler($e);
}
Et MyCustomExceptionHandler
est défini à peu près comme:
class MyCustomExceptionHandler extends Exception {
public function __construct($e) {
parent::__construct($e->getMessage(), $e->getCode());
}
}
Cela déclenchera en réalité une nouvelle exception dans le gestionnaire d'exceptions personnalisées, car la classe Exception
attend un numéro pour le deuxième paramètre de son constructeur, mais PDOException
peut avoir modifié de manière dynamique le type de retour de $e->getCode()
en chaîne.
Une solution de contournement serait de définir votre gestionnaire d'exceptions personnalisé, comme suit:
class MyCustomExceptionHandler extends Exception {
public function __construct($e) {
parent::__construct($e->getMessage());
$this->code = $e->getCode();
}
}
Si l'erreur est au moment d'un calcul, vérifiez que les valeurs ne contiennent pas de virgule (,). Les valeurs doivent être uniquement au format entier/float.
Vous devez définir le fuseau horaire à l'aide de date_default_timezone_set ().
Passer une chaîne n'est pas nécessairement un problème, si elle ne contient que des chiffres.
Cela peut arriver aussi si vous avez un espace avant ou après. Par exemple. "1557399276"