par
kevin254kl » 04 févr. 2019, 10:52
Bonjour à tous,
Encore moi
Je fais appelle à votre sagesse pour un problème ou je ne sais pas comment procéder.
J'ai cette fonction qui va récupérer un objet mission et l'initialiser dans un array
Code : Tout sélectionner
private function update_mission_api($mission)
{
try
{
$db = $this->db;
$crud = $this->crud;
$data = array(
'mission_competence' => $mission->competence,
'mission_depart_groupe_possible' => $mission->departGroupePossible,
'mission_numero' => $mission->numero,
'mission_description' => $mission->descriptif,
'mission_dispositif_possible' => $mission->dispositifPossible,
'mission_historique_partenaire_local' => $mission->historiquePartenaireLocal,
'mission_langues' => $mission->langues,
'mission_name' => $mission->name,
'mission_nb_beneficiaires' => $mission->nbBeneficiaire,
'mission_nb_min_volontaires' => $mission->nbMinVolontaires,
'mission_niveau_langues' => $mission->niveauLangues,
'mission_nb_max_volontaires' => $mission->nbMaxVolontaires,
'mission_objectif_justification' => $mission->objectifJustification,
'mission_profil_niveau_beneficiaires' => $mission->profilNiveauBeneficiaires,
'mission_partenaire_nom' => $mission->nomPartenaire,
'mission_pays' => $mission->pays,
'mission_thematique' => $mission->thematique,
'mission_type_beneficiaires' => $mission->typeBeneficiaires,
'mission_ville' => $mission->ville,
'mission_intervention_attendu_volontaire' => $mission->interventionAttenduVolontaire,
'mission_aeroport_arrivee' => $mission->aeroportArrivee,
'mission_accueil_transfert' => $mission->accueilTransfert,
'mission_hebergement' => $mission->hebergement,
'mission_materiel_disponible_sur_place' => $mission->materielDisponibleSurPlace,
'mission_remarque' => $mission->remarque,
'mission_motivation_attendu' => $mission->motivationAttendu
);
// update all field date
for($i= 1; $i < 5; $i++)
{
$dateDebut = (!empty($mission->datesDebuts[$i-1])) ? $mission->datesDebuts[$i-1] : NULL;
$tmp = array( 'mission_date_debut_' . $i => $dateDebut);
$data = array_merge($tmp, $data);
}
for($i= 1; $i < 21; $i++)
{
$dateFin = (!empty($mission->datesFins[$i-1])) ? $mission->datesFins[$i-1] : NULL;
$tmp = array( 'mission_date_fin_' . $i => $dateFin);
$data = array_merge($tmp, $data);
}
// get dates, dates is cleaned by main php function no need to control
echo '<pre style="background-color:black;color:white;">';var_dump( $data );echo '</pre>';
$crud->pdoUpdate('missions', $data, $db, 'mission_id_sf', $mission->idMission);
}
catch(\Exception $e)
{
echo "update_mission_api: " . $e->getMessage();
}
}
Dans ma base j'ai des dates de début et de fin, si elle n'existe pas dans mon objet je mets à null
Code : Tout sélectionner
for($i= 1; $i < 21; $i++)
{
$dateFin = (!empty($mission->datesFins[$i-1])) ? $mission->datesFins[$i-1] : NULL;
$tmp = array( 'mission_date_fin_' . $i => $dateFin);
$data = array_merge($tmp, $data);
}
Dans mon var_dump c'est ok
Code : Tout sélectionner
'mission_date_fin_20' => null
'mission_date_fin_19' => null
'mission_date_fin_18' => null
'mission_date_fin_17' => null
'mission_date_fin_16' => null
'mission_date_fin_15' => null
'mission_date_fin_14' => null
'mission_date_fin_13' => null
'mission_date_fin_12' => null
'mission_date_fin_11' => null
'mission_date_fin_10' => null
'mission_date_fin_9' => null
'mission_date_fin_8' => null
'mission_date_fin_7' => null
'mission_date_fin_6' => null
'mission_date_fin_5' => null
'mission_date_fin_4' => null
'mission_date_fin_3' => null
'mission_date_fin_2' => null
'mission_date_fin_1' => string '2018-12-30' (length=10)
'mission_date_debut_4' => null
'mission_date_debut_3' => null
'mission_date_debut_2' => null
'mission_date_debut_1' => string '2017-12-31' (length=10)
Par contre à la fin j'appelle ma fonction qui va mettre à jour
Code : Tout sélectionner
$crud->pdoUpdate('missions', $data, $db, 'mission_id_sf', $mission->idMission);
qui est
Code : Tout sélectionner
/* update data .
*
* @param string $tableName Name of the table we are inserting into.
* @param array $data An "array" containing our row data.
* @param PDO $pdoObject Our PDO object.
* @param string $idName name of id table.
* @param string $idValue id salesforce with alphanumeric caracters
* @return boolean TRUE on success. FALSE on failure.
*/
public function pdoUpdate(string $tableName, array $data, \PDO $pdoObject, string $idName, string $idValue) : bool
{
try
{
//Will contain SQL snippets.
$rowsSQL = array();
//Will contain the values that we need to bind.
$toBind = array();
$sql = "UPDATE $tableName SET ";
//Loop through our $data array.
$params = array();
$i = 0;
$len = count($data);
// construct sql
foreach($data as $columnName => $columnValue){
if(strlen($columnValue) < 1) continue;
$sql .= $columnName . ' = :' . $columnName .' ';
$param = ":" . $columnName;
$params[] = $param;
$toBind[$param] = $columnValue;
$sql .= ',';
$i++;
}
// delete last comma for avoid sql error
$sql = rtrim($sql, ',');
$sql .= " WHERE $idName = :idValue";
//Prepare our PDO statement.
$pdoStatement = $pdoObject->prepare($sql);
//Bind our values.
foreach($toBind as $param => $val){
$pdoStatement->bindValue($param, $val);
}
//bind id values
$pdoStatement->bindValue(':idValue', $idValue);
return $pdoStatement->execute();
}
catch(\PDOException $e)
{
echo "pdoUpdate: " . $e->getMessage();
}
}
Le problème c'est que les dates sont mises à jour à 0000-00-00 et non à NULL . J'ai cru comprendre que c'est dû aux quotes le problème si je modifie la fonction juste pour les dates elle ne sera plus générique? Quel sont vos conseils?
Merci.
Bonjour à tous,
Encore moi :)
Je fais appelle à votre sagesse pour un problème ou je ne sais pas comment procéder.
J'ai cette fonction qui va récupérer un objet mission et l'initialiser dans un array
[code] private function update_mission_api($mission)
{
try
{
$db = $this->db;
$crud = $this->crud;
$data = array(
'mission_competence' => $mission->competence,
'mission_depart_groupe_possible' => $mission->departGroupePossible,
'mission_numero' => $mission->numero,
'mission_description' => $mission->descriptif,
'mission_dispositif_possible' => $mission->dispositifPossible,
'mission_historique_partenaire_local' => $mission->historiquePartenaireLocal,
'mission_langues' => $mission->langues,
'mission_name' => $mission->name,
'mission_nb_beneficiaires' => $mission->nbBeneficiaire,
'mission_nb_min_volontaires' => $mission->nbMinVolontaires,
'mission_niveau_langues' => $mission->niveauLangues,
'mission_nb_max_volontaires' => $mission->nbMaxVolontaires,
'mission_objectif_justification' => $mission->objectifJustification,
'mission_profil_niveau_beneficiaires' => $mission->profilNiveauBeneficiaires,
'mission_partenaire_nom' => $mission->nomPartenaire,
'mission_pays' => $mission->pays,
'mission_thematique' => $mission->thematique,
'mission_type_beneficiaires' => $mission->typeBeneficiaires,
'mission_ville' => $mission->ville,
'mission_intervention_attendu_volontaire' => $mission->interventionAttenduVolontaire,
'mission_aeroport_arrivee' => $mission->aeroportArrivee,
'mission_accueil_transfert' => $mission->accueilTransfert,
'mission_hebergement' => $mission->hebergement,
'mission_materiel_disponible_sur_place' => $mission->materielDisponibleSurPlace,
'mission_remarque' => $mission->remarque,
'mission_motivation_attendu' => $mission->motivationAttendu
);
// update all field date
for($i= 1; $i < 5; $i++)
{
$dateDebut = (!empty($mission->datesDebuts[$i-1])) ? $mission->datesDebuts[$i-1] : NULL;
$tmp = array( 'mission_date_debut_' . $i => $dateDebut);
$data = array_merge($tmp, $data);
}
for($i= 1; $i < 21; $i++)
{
$dateFin = (!empty($mission->datesFins[$i-1])) ? $mission->datesFins[$i-1] : NULL;
$tmp = array( 'mission_date_fin_' . $i => $dateFin);
$data = array_merge($tmp, $data);
}
// get dates, dates is cleaned by main php function no need to control
echo '<pre style="background-color:black;color:white;">';var_dump( $data );echo '</pre>';
$crud->pdoUpdate('missions', $data, $db, 'mission_id_sf', $mission->idMission);
}
catch(\Exception $e)
{
echo "update_mission_api: " . $e->getMessage();
}
}[/code]
Dans ma base j'ai des dates de début et de fin, si elle n'existe pas dans mon objet je mets à null
[code] for($i= 1; $i < 21; $i++)
{
$dateFin = (!empty($mission->datesFins[$i-1])) ? $mission->datesFins[$i-1] : NULL;
$tmp = array( 'mission_date_fin_' . $i => $dateFin);
$data = array_merge($tmp, $data);
}[/code]
Dans mon var_dump c'est ok
[code] 'mission_date_fin_20' => null
'mission_date_fin_19' => null
'mission_date_fin_18' => null
'mission_date_fin_17' => null
'mission_date_fin_16' => null
'mission_date_fin_15' => null
'mission_date_fin_14' => null
'mission_date_fin_13' => null
'mission_date_fin_12' => null
'mission_date_fin_11' => null
'mission_date_fin_10' => null
'mission_date_fin_9' => null
'mission_date_fin_8' => null
'mission_date_fin_7' => null
'mission_date_fin_6' => null
'mission_date_fin_5' => null
'mission_date_fin_4' => null
'mission_date_fin_3' => null
'mission_date_fin_2' => null
'mission_date_fin_1' => string '2018-12-30' (length=10)
'mission_date_debut_4' => null
'mission_date_debut_3' => null
'mission_date_debut_2' => null
'mission_date_debut_1' => string '2017-12-31' (length=10)[/code]
Par contre à la fin j'appelle ma fonction qui va mettre à jour [code]$crud->pdoUpdate('missions', $data, $db, 'mission_id_sf', $mission->idMission);[/code]
qui est
[code] /* update data .
*
* @param string $tableName Name of the table we are inserting into.
* @param array $data An "array" containing our row data.
* @param PDO $pdoObject Our PDO object.
* @param string $idName name of id table.
* @param string $idValue id salesforce with alphanumeric caracters
* @return boolean TRUE on success. FALSE on failure.
*/
public function pdoUpdate(string $tableName, array $data, \PDO $pdoObject, string $idName, string $idValue) : bool
{
try
{
//Will contain SQL snippets.
$rowsSQL = array();
//Will contain the values that we need to bind.
$toBind = array();
$sql = "UPDATE $tableName SET ";
//Loop through our $data array.
$params = array();
$i = 0;
$len = count($data);
// construct sql
foreach($data as $columnName => $columnValue){
if(strlen($columnValue) < 1) continue;
$sql .= $columnName . ' = :' . $columnName .' ';
$param = ":" . $columnName;
$params[] = $param;
$toBind[$param] = $columnValue;
$sql .= ',';
$i++;
}
// delete last comma for avoid sql error
$sql = rtrim($sql, ',');
$sql .= " WHERE $idName = :idValue";
//Prepare our PDO statement.
$pdoStatement = $pdoObject->prepare($sql);
//Bind our values.
foreach($toBind as $param => $val){
$pdoStatement->bindValue($param, $val);
}
//bind id values
$pdoStatement->bindValue(':idValue', $idValue);
return $pdoStatement->execute();
}
catch(\PDOException $e)
{
echo "pdoUpdate: " . $e->getMessage();
}
}
[/code]
Le problème c'est que les dates sont mises à jour à 0000-00-00 et non à NULL . J'ai cru comprendre que c'est dû aux quotes le problème si je modifie la fonction juste pour les dates elle ne sera plus générique? Quel sont vos conseils?
Merci.