Requête dans une boucle foreach
Résolu
someone
-
someone -
someone -
Bonjour,
Je cherche à mettre à jours de données après un test.
Je fais donc un select pour récupérer les donnés qui seront testées et après pour chacune des données tester je fais une mise à jour.
Je récupère bien les données et la mise à jour se passe bien mais j'arrive pas à mettre à jour la base de donnée.
Voici mon code.
Pouvez vous m'aider
Je cherche à mettre à jours de données après un test.
Je fais donc un select pour récupérer les donnés qui seront testées et après pour chacune des données tester je fais une mise à jour.
Je récupère bien les données et la mise à jour se passe bien mais j'arrive pas à mettre à jour la base de donnée.
Voici mon code.
$req2 = $db->prepare("SELECT IP, Etat, statut FROM lecteur_oui");
$req2->execute();
$row2 = $req2->fetchAll();
if($row2){
foreach ($row2 as $etat){
$ping = exec("ping -n 1 " . $etat['IP']);
if (strpos($ping, "perte 100%")) {
$newetat = "non";
} else {
$newetat = "oui";
}
$etat['statut']='';
if($etat['Etat'] != $newetat){
$etat['Etat'] = $newetat;
$etat['statut'] = 'non-vérifié';
}
//echo $etat['IP']." - ".$etat['Etat']." - ".$etat['statut'];
$db->exec("UPDATE lecteur_oui SET Etat = ".$etat['Etat']." AND statut = ".$etat['statut']);
}
}
Pouvez vous m'aider
A voir également:
- Requête dans une boucle foreach
- Boucle excel sans macro - Forum Excel
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Mise à disposition de boucle locale dédiée ✓ - Forum Freebox
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
3 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonjour,
comment détermines-tu quel enregistrement est mis à jour?
comment détermines-tu quel enregistrement est mis à jour?
someone
Quand je teste l'enregistrement 'ip' pour savoir son état, si l'état à une valeur différente de celle contenue dans la bdd et bien elle doit prendre la nouvelle valeur et ensuite je change le statut de l'ip tester en non-vérifié
Bonjour
Commence par ça
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Commence par ça
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
J'ai modifié mon code de sorte de voir les erreurs
et j'obtien comme erreur :
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp64\www\LEM_ControleAcces\Php\recupdonnee.php on line 32
( ! ) PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp64\www\LEM_ControleAcces\Php\recupdonnee.php on line 32
try {
$db = new PDO('mysql:host=localhost;dbname=bdd_ctrl_acces_dev', 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e){
die('Erreur de connexion à la base de données :' .$e->etMessage());
}
$req2 = $db->prepare("SELECT IP, Etat, statut FROM lecteur_oui");
$req2->execute();
$row2 = $req2->fetchAll();
if($row2){
foreach ($row2 as $etat){
$ping = exec("ping -n 1 " . $etat['IP']);
if (strpos($ping, "perte 100%")) {
$newetat = "non";
} else {
$newetat = "oui";
}
if($etat['Etat'] != $newetat){
$etat['Etat'] = $newetat;
$etat['statut'] = 'non-vérifié';
$sql = 'UPDATE lecteur_oui SET Etat = ? AND statut = ?';
$a = array('Etat'=>$etat['Etat'], 'statut='=>$etat['statut']);
try{
$req = $db -> prepare($sql);
$req ->execute($a);
} catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
print_r($etat);
}
}
echo $etat['IP']." - ".$etat['Etat']." - ".$etat['statut'];
}
}
et j'obtien comme erreur :
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp64\www\LEM_ControleAcces\Php\recupdonnee.php on line 32
( ! ) PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp64\www\LEM_ControleAcces\Php\recupdonnee.php on line 32