MySQL - Changement Web et Bdd

Signaler
-
Messages postés
11190
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 juin 2020
-
Bonjour,

J'ai rien à faire durant mon confinement alors je m'occupe... et je ne trouve pas de solutions
Je viens de créer une base de donnée.

Table 'seuils_alerte' avec les colonnes suivantes :
- une colonne pour indiquer le type de capteur (C0, CO2, TEMP, etc)
- une colonne pour le seuil mini
- une colonne pour le seuil maxi.

Et depuis ma page Web :
http://82.233.223.249:8088/seuils_alerte/alerte.php

J'aimerais :
- Par exemple capteur (CO) j'aimerais avoir 30 pour mini et 60 max, quand je fais valider.
ça me changer les valeurs dans la base de donnée en même temps.

J'ai déjà effectué la connexion avec la bdd.. il me manque plus que la relation..
Si vous avez des solutions...

Voici mon code actuellement :

<!DOCTYPE html>
<html>
    <head>

        <title>Seuils_Alerte</title>
        <meta charset="utf-8">
        <link rel="stylesheet" href="seuils.css" />
    </head>
    <body>
        <p>Modification des seuils d'alertes :  </p>
        
<table>
  <tr>
    
    <td><b>Capteur</b></td>
    <td><b>Seuils_Mini</td>
    <td><b>Seuils_Max</b></td>
    
  </tr>
  <tr>
    <td>CO</td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>  
  </tr>
  <tr>
    <td>BAT</td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
  <tr>
    <td>STR</td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    
  </tr>
  <tr>
    <td>LUX</td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
    <tr>
    <td>CO2</td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
  <tr>
    <td>PIR</td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    
  </tr>
  <tr>
    <td>LP</td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
    <tr>
    <td>TC</td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
  <tr>
    <td>HUM</td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    
  </tr>
  <tr>
    <td>PRES</td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
  <tr>
    <td>HALL</td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="name" minlength="4" maxlength="8" size="10"></td>
   
  </tr>

</table>
</br>
<input type="submit">

    </body>
<?php

class Database {

    private $host = "xxxx.xxxxx";
    private $username = "xxxxx";
    private $password = "xxxxx";
    private $database = "xxxx";

    public $connection;

    public function getConnection() {
        $this->connection = null;

        try {
            $this->connection = new PDO("mysql:host=".$this->host.";dbname=".$this->database, $this->username, $this->password);
            $this->connection->exec("set names utf8");

        } catch (PDOException $exception) {
            echo "Error: ".$exception->getMessage();
            die();
        }

        return $this->connection;
    }

    public function closeConnection() {
        $this->connection = null;
    }
}

?>
</html>

Mon CSS..
table{
  border-collapse: collapse
}

td{
  border: 1px solid black;
  padding: 10px;
}


Merci...
Je ne pense pas être dans le bon sujet de Forum.

Configuration: Windows / Chrome 80.0.3987.149

9 réponses

Messages postés
11190
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 juin 2020
640
bonjour,
où fais-tu "valider"?
as-tu déjà fais des exercices plus simples avec php et des formulaires?
Messages postés
28531
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juin 2020
2 500
Bonjour,

Pour que tes données soient transmises à ton php, il faut les placer dans un FORM dans le quel tu choisi le "mode" de tansmission : soit GET, soit POST

Je te conseille le POST.

Il te faut ensuite récupérer les variables transmises en POST pour les utiliser dans tes requêtes SQL

Voici un petit tuto sur l'utilisation des form
https://www.commentcamarche.net/contents/793-php-recuperation-de-donnees

Je t'invite également à lire ET à appliquer les conseils donnés ici :
https://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Ainsi que celui la :
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

.
<input type="submit"> -> ligne 88

Je suis en plein Projet, j'ai encore 2 mois pour finir ça..

C'est pour ça que j'ai besoin de vous pour m'aider sur cette exercice.

Si vous avez des idées, pour modifier mon code ou l'améliorer ?

Merci d'avance
Merci,

Je vais essayé de réaliser en suivant les tutos en cas de problème..

Je vous fais signe ;)
ReBonjour à tous,

Alors depuis quelques jours j'ai beaucoup avancé sur mon code.

Mais je suis bloqué, je ne comprends pour ça ne marche pas.

Normalement ça devrais modifié les valeurs dans la BDD quand je valide sur la page...

http://82.233.223.249:8088/seuil_alerte/alerte.php

Concernant les erreurs PDO.. je le ferais plus tard.. je m'occupe que ça marche principalement..

Voici mon code :

Database.php :

<?php

$SmCO=$_POST["SmCO"];
$SMCO=$_POST["SMCO"];

$SmBAT=$_POST["SmBAT"];
$SMBAT=$_POST["SMBAT"];

$SmSTR=$_POST["SmSTR"];
$SMSTR=$_POST["SMSTR"];

$SmLUX=$_POST["SmLUX"];
$SMLUX=$_POST["SMLUX"];

$SmCO2=$_POST["SmCO2"];
$SMCO2=$_POST["SMCO2"];

$SmPIR=$_POST["SmPIR"];
$SMPIR=$_POST["SMPIR"];

$SmLP=$_POST["SmLP"];
$SMLP=$_POST["SMLP"];

$SmTC=$_POST["SmTC"];
$SMTC=$_POST["SMTC"];

$SmHUM=$_POST["SmHUM"];
$SMHUM=$_POST["SMHUM"];

$SmPRES=$_POST["SmPRES"];
$SMPRES=$_POST["SMPRES"];

$SmHALL=$_POST["SmHALL"];
$SMHALL=$_POST["SMHALL"];



class Database {

    // on se connecte à MySQL
    $db = mysql_connect('xxxxxx', 'xxxxx', 'xxx');

    // on sélectionne la base
    mysql_select_db('xxxxx',$db);

    //Envoie de la rêquetes à la base de donnée
    $mysqli->real_query(Update seuil_alertes SET seuil_mini = 'SmCO', seuil_max ='SMCO'  Where Capteur='CO') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmBAT', seuil_max ='SMBAT' Where Capteur='BAT') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmSTR', seuil_max ='SMSTR' Where Capteur='STR') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmLUX', seuil_max ='SMLUX' Where Capteur='LUX') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmCO2', seuil_max ='SMCO2' Where Capteur='CO2') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmPIR', seuil_max ='SMPIR' Where Capteur='PIR') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmLP', seuil_max ='SMLP' Where Capteur='LP') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmTC', seuil_max ='SMTC' Where Capteur='TC') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmHUM', seuil_max ='SMHUM' Where Capteur='HUM') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmPRES', seuil_max ='SMPRES' Where Capteur='PRES') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmHALL', seuil_max ='SMHALL' Where Capteur='HALL') or die("insertion impossible");

    $res = $mysqli->use_result();

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
}

?>


Page alerte.php :

<!DOCTYPE html>
<html>
    <head>
  <include 'Database.php'>
        <title>Seuils_Alerte</title>
        <meta charset="utf-8">
        <link rel="stylesheet" href="seuils.css" />
    </head>
    <body>
        <p>Modification des seuils d'alertes :  </p>
<form method="post">
<table>
  <tr>
    
    <td><b>Capteur</b></td>
    <td><b>Seuils_Mini</td>
    <td><b>Seuils_Max</b></td>
    
  </tr>
  <tr>
    <td>CO</td>
    <td><input type="text" name="SmCO" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="SMCO" minlength="4" maxlength="8" size="10"></td>
    
  </tr>
  <tr>
    <td>BAT</td>
    <td><input type="text" name="SmBAT" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="SMBAT" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
  <tr>
    <td>STR</td>
    <td><input type="text" name="SmSTR" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="SMSTR" minlength="4" maxlength="8" size="10"></td>
    
  </tr>
  <tr>
    <td>LUX</td>
    <td><input type="text" name="SmLUX" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="SMLUX" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
    <tr>
    <td>CO2</td>
    <td><input type="text" name="SmCO2" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="SMCO2" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
  <tr>
    <td>PIR</td>
    <td><input type="text" name="SmPIR" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="SMPIR" minlength="4" maxlength="8" size="10"></td>
    
  </tr>
  <tr>
    <td>LP</td>
    <td><input type="text" name="SmLP" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="SMLP" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
    <tr>
    <td>TC</td>
    <td><input type="text" name="SmTC" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="SMTC" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
  <tr>
    <td>HUM</td>
    <td><input type="text" name="SmHUM" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="SMHUM" minlength="4" maxlength="8" size="10"></td>
    
  </tr>
  <tr>
    <td>PRES</td>
    <td><input type="text" name="SmPRES" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="SMPRES" minlength="4" maxlength="8" size="10"></td>
   
  </tr>
  <tr>
    <td>HALL</td>
    <td><input type="text" name="SmHALL" minlength="4" maxlength="8" size="10"></td>
    <td><input type="text" name="SMHALL" minlength="4" maxlength="8" size="10"></td>
   
  </tr>

</table>
</br>
<input type="submit">
</form>
</br>


    </body>

</html>


Code seuils.css :

table{
  border-collapse: collapse
}

td{
  border: 1px solid black;
  padding: 10px;
}


Voilà, si vous avez des solutions ?

Merci d'avance
Messages postés
11190
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 juin 2020
640
quelle réponse reçois-tu de la page?
la première chose que je ferais, c'est d'ajouter des echo pour comprendre ce que fait le code.
si je voulais progresser, je lirais et j'appliquerais les conseils donnés en #3.
D'accord, je vais m'occuper des erreurs PDO tout de suite alors.. et je verrais les réponses en cas d'erreurs avec la BDD.

Après avoir finis l'installation PDO je reviens vers vous.
Messages postés
28531
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juin 2020
2 500
Il n'y a pas que les erreurs PDO à gérer... il y a aussi

Je t'invite également à lire ET à appliquer les conseils donnés ici :
https://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Si j'ai bien suivis les indications..

Ma classe Database...
Pas de résultat sur ma page web..

class Database {

    private $host = "xxxxx";
    private $username = "xxxxx";
    private $password = "xxxxx";
    private $database = "xxxxx";

    public $connexion;

    function __construct(){
        $this->getconnexion();
    }
    
    public function getconnexion() {
        $this->connexion = null;

        try {
            $this->connexion = new PDO("mysql:host=".$this->host.";dbname=".$this->database .';charset=utf8', $this->username, $this->password);
            // Activation des erreurs PDO
             $this->connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
             $this->connexion->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        } catch (PDOException $exception) {
            echo "Error: ".$exception->getMessage();
            die();
        }
        return $this->connexion;
    }

    public function closeconnexion() {
        $this->connexion = null;
    }



    //Envoie de la rêquetes à la base de donnée
    $mysqli->real_query(Update seuil_alertes SET seuil_mini = 'SmCO', seuil_max ='SMCO'  Where Capteur='CO') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmBAT', seuil_max ='SMBAT' Where Capteur='BAT') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmSTR', seuil_max ='SMSTR' Where Capteur='STR') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmLUX', seuil_max ='SMLUX' Where Capteur='LUX') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmCO2', seuil_max ='SMCO2' Where Capteur='CO2') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmPIR', seuil_max ='SMPIR' Where Capteur='PIR') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmLP', seuil_max ='SMLP' Where Capteur='LP') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmTC', seuil_max ='SMTC' Where Capteur='TC') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmHUM', seuil_max ='SMHUM' Where Capteur='HUM') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmPRES', seuil_max ='SMPRES' Where Capteur='PRES') or die("insertion impossible");
    $mysqli->real_query(Update seuil_alertes set seuil_mini = 'SmHALL', seuil_max ='SMHALL' Where Capteur='HALL') or die("insertion impossible");

    $res = $mysqli->use_result();

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
}
Messages postés
11190
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 juin 2020
640
pas de résultat, malgré les echo que tu as ajoutés?
Messages postés
11190
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 juin 2020
640
as-tu examiné la source html de ta page? tu seras surpris par ce qu'on y voit.
Messages postés
28531
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juin 2020
2 500
- Les instructions qui permettent d'afficher les erreurs PHP se placent AU DEBUT du script pas à la fin.
- Tu as des instructions en mysqli ... alors que ta connexion est en PDO
- Tu as des instructions placées à la fin de ta class... qui ne devraient pas se trouver DANS la class (ou alors, dans une fonction.. pas posées là comme ça au pif ! )
En vrai je craque.. ça fais quelques jours que je suis déçu j'ai vraiment envie que ça se termine.

Alors si vous avez la gentillesse de me le faire ?
Je sais que c'est pas bien... mais à un moment..
Messages postés
11190
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 juin 2020
640
tu avais écrit que tu faisais cela pour t'occuper. pourquoi as-tu envie que cela se termine?
Messages postés
28531
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juin 2020
2 500
Je ne sais pas si tu craques... mais je ne vais pas tarder non plus à craquer......

Je t'ai donné, dans une de tes précédente question un code pour ta class Database et qui montre également comment utiliser l'affichage des erreurs php...
Pour rappel : https://forums.commentcamarche.net/forum/affich-36538219-sql-php-2-requetes-probleme

Autant, une personne qui pose une question et qui a du mal à comprendre.. ok... mais quand il a déjà eu des réponses de notre part et qu'il ne fait aucun effort pour en tenir compte.. franchement... pourquoi s'embêter à continuer à l'aider. Quelle perte de temps !

Quoi qu'il en soit, comme je ne veux pas être la cause de ton craquage .. voila à quoi ton code devrait ressembler.

<?php
/**
  Fichier Database.php
  Class de connexion à la bdd
*/
class Database {

    private $host = "xxxxxx";
    private $username = "yyyyy";
    private $password = "yyyy";
    private $database = "yyyyyyyyyyyyyyyy";

    public $connexion;

	function __construct(){
		$this->getconnexion();
	}
	
    public function getconnexion() {
        $this->connexion = null;

        try {
            $this->connexion = new PDO("mysql:host=".$this->host.";dbname=".$this->database .';charset=utf8', $this->username, $this->password);
            // Activation des erreurs PDO
             $this->connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
             $this->connexion->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        } catch (PDOException $exception) {
            echo "Error: ".$exception->getMessage();
            die();
        }
        return $this->connexion;
    }

    public function closeconnexion() {
        $this->connexion = null;
    }
	
	
	/**
	Execution d'une requete preparee
	*/
	public function db_Exec($sql,$datas=NULL){
	
		//Execution de la requete
		try{
		  $requete = $this->connexion->prepare($sql) ;
		  $requete->execute($datas) ;
		}catch(Exception $e){
		  // en cas d'erreur :
		   echo " Erreur ! ".$e->getMessage();
		   echo " Les datas : " ;
		  print_r($datas);
		  exit;
		}
		return $requete;
	}
	
	/**
	 Requête SELECT
	 @sql string
	 @datas array
	 @return Array
	*/
	public function db_All($sql,$datas=NULL){
		$req = $this->db_Exec($sql,$datas);
		return $req->fetchAll();
	}
	
	
}


<?php
/**
Fichier : Capteur.php
Class pour gérer les capteurs
 - extends de la class DataBase
*/
class Capteur extends Database{

	function __construct(){
		parent::__construct(); //appel le constructeur du parent
	}
	
	
	public function update_SeuilAlertes($seuilMini=0,$seuilMaxi=0,$capteur=NULL){
	
		$sql = "UPDATE seuil_alertes 
				SET seuil_mini = :seuilMini
				  , seuil_max = :seuilMaxi  
				WHERE Capteur=:capteur";
		$datas = array(':seuilMini'=>$seuilMini ,':seuilMaxi'=>$seuilMaxi   ,':capteur'=>$capteur );
		
		return parent::db_Exec($sql,$datas);
	}
	
}


<?php
/**
 Script de mise à jour des capteurs
 - Besoin d'inclure la class Database
 - et la classe Capteur
*/

 //Affichage des erreurs PHP
 error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//class de connexion à la bdd
require_once 'Database.php';
require_once 'Capteur.php';

// on instancie la class Capteur
$oCapteur = new Capteur();

// si la MAJ ne fonctionne toujours pas,
// décommente la ligne en dessous et montre nous :
// print_r($_POST);


//récupération PROPRE DES VALEURS AVANT DE LES UTILISER
$SmCO_min= !empty($_POST["SmCO"]) ? $_POST["SmCO"] : NULL;
$SmCO_max= !empty($_POST["SMCO"]) ? $_POST["SMCO"] : NULL;
$SmBAT_min= !empty($_POST["SmBAT"]) ? $_POST["SmBAT"] : NULL;
$SmBAT_max= !empty($_POST["SMBAT"]) ? $_POST["SMBAT"] : NULL;
  //etc...
  

//mise à jour des données :
if($SmCO_min && $SmCO_max){
	$oCapteur->update_SeuilAlertes($SmCO_min,$SmCO_max,'CO');
}

if($SmBAT_min && $SmBAT_max){
	$oCapteur->update_SeuilAlertes($SmBAT_min,$SmBAT_max,'BAT');
}


//etc...

?>