Usuwanie tabeli z bazy danych podczas odświeżania strony

0

Cześć wszystkim,
robię projekt na uczelnię symulację inteligentnego domu. Dodaje zmienne do bazy danych i wyświetlam je na stronie internetowej.

  1. Nie wiem czego użyć, aby podczas odświeżania strony, stara tabela się usunęła z bazy i strony, a wgrała się nowa.
  2. W jaki sposób napisać pętle, aby zapętlić wpisywanie się danych do bazy?

Z góry dzięki!

Tak to wygląda póki co:
screenshot-20201119183526.png

A tutaj kod:

<html>
<head>
<title>Inteligentny dom</title>

<style>
	table{
		border-collapse:collapse;
		width:100%;
		color:#588c7e;
		font-family:monospace;
		font-size:16px;
		text-align:center;
	}

	th{
		background-color:#588c7e;
		color:#fff;
	}

	tr:nth-child(even){
		background-color:#f2f2f2;
	}

	h1{
		display:inline-block;
		width:100%;
		margin:0 auto;
		text-align:center;
		color:#444;
	}

</style>	
</head>
<body>

	<h1>Światlo</h1>
	<table>
		<tr>
			<th>Port</th>
			<th>Wejście/Wyjście</th>
			<th>Stan</th>
			<th>Obszar</th>
			<th>Poziom</th>
			<th>Pomieszczenie</th>
			<th>Nazwa</th>
			<th>Funkcja</th>
			<th>DataGodzina</th>
		</tr>


	<?php

	$insertdate = date('Y:m:d H:i:s');
	include 'connect.php';
	include 'swiatlo.php';
	include 'data.php';
	
	$sql = "SELECT Port, wejscieWyjscie, Stan, Obszar, Poziom, Pomieszczenie, Nazwa, Funkcja, DataGodzina from dom";
	$result = $conn-> query($sql);
	
	if($result-> num_rows > 0){
		while($row = $result-> fetch_assoc()){
			echo "<tr><td>".$row["Port"]."</td><td>".$row["wejscieWyjscie"]."</td><td>".$row["Stan"]."</td><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td>".$row["Funkcja"]."</td><td>".$row["DataGodzina"]."</td></tr>";
		}
		echo "</table>";
	}
	else{
		echo "0";
	}

	?>
	
	
	
<p style="dfont-size:20px; text-align:center; text-transform:uppercase"></p>
</body>

</html>


swiatlo.php


	<?php


	$insertdate = date('Y:m:d H:i:s');
	$stan0 = rand(0,1);
	$stan1 = rand(0,1);
	$stan2 = rand(0,1);
	$stan3 = rand(0,1);
	$stan4 = rand(0,1);
	$stan5 = rand(0,1);
	$stan6 = rand(0,1);
	$stan7 = rand(0,1);
	$stan8 = rand(0,1);
	$stan9 = rand(0,1);
	$stan10 = rand(0,1);


	$sql0 = "INSERT INTO dom (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjscie','$stan0','dom',-1,'piwnica','dom','światlo','$insertdate')";
	$sql1 = "INSERT INTO dom (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjscie','$stan1','dom',0,'pokój','gościnny','światlo','$insertdate')";
	$sql2 = "INSERT INTO dom (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjscie','$stan2','dom',0,'kuchnia','dom','światlo','$insertdate')";
	$sql3 = "INSERT INTO dom (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjscie','$stan3','dom',0,'garaż','dom','światlo','$insertdate')";
	$sql4 = "INSERT INTO dom (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjscie','$stan4','dom',0,'salon','dom','światlo','$insertdate')";
	$sql5 = "INSERT INTO dom (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjscie','$stan5','dom',0,'łazienka','dom','światlo','$insertdate')";
	$sql6 = "INSERT INTO dom (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjscie','$stan6','dom',0,'ogród','dom','światlo','$insertdate')";
	$sql7 = "INSERT INTO dom (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjscie','$stan7','dom',1,'pokój1','dom','światlo','$insertdate')";
	$sql8 = "INSERT INTO dom (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjscie','$stan8','dom',1,'pokój2','dom','światlo','$insertdate')";
	$sql9 = "INSERT INTO dom (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjscie','$stan9','dom',1,'łazienka','dom','światlo','$insertdate')";
	$sql10 = "INSERT INTO dom (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjscie','$stan10','dom',1,'garderoba','dom','światlo','$insertdate')";






	
	

connect.php

	<?php
	$servername = "localhost";
	$username = "admin";
	$password = "kuba1234";
	$db = "Baza";

	$conn = mysqli_connect($servername, $username, $password, $db);
	
	if ($conn===false) {
		die("connection failed: " . $conn->connect_error);
	}
	else
	echo "Pomyślnie połączono z bazą danych! ";

		

	
	

data.php

<?php

	mysqli_query($conn,$sql0);
	mysqli_query($conn,$sql1);
	mysqli_query($conn,$sql2);
	mysqli_query($conn,$sql3);
	mysqli_query($conn,$sql4);
	mysqli_query($conn,$sql5);
	mysqli_query($conn,$sql6);
	mysqli_query($conn,$sql7);
	mysqli_query($conn,$sql8);
	mysqli_query($conn,$sql9);
	mysqli_query($conn,$sql10);
1

Pętla for.
Pomieszczenia wrzuć w tablicę i z każdą iteracją pętli dodawaj pomieszczenie z kolejnym indeksem.

Co do usuwania danych to przed pętlą wrzuć zapytanie do bazy usuwającą dane - po odświeżeniu strony dane zostaną usunięte a następnie dodane za pomocą pętli.

0

A mam pytanie jeszcze: chciałbym aby te nowe dane losowały się np. co 10sekund, już bez odświeżania strony. W jaki sposób mogę to osiągnąć?
Celem ogólnie jest stworzenie jeszcze przycisków, które zmieniały by te wartości np. wyłączenie światła to "stan" zmieniony z 1 na 0 - tu cytałem, że przyda się metoda php CRUD.
screenshot-20201121131131.png

1

Poczytaj sobie o js + ajax, jeśli chodzi o automatyczne odświeżanie i wysyłanie danych bez odświeżania.

CRUD to nie jest metoda, i nie jest zarezerwowane to dla PHP, tylko dla wszystkich języków. https://pl.wikipedia.org/wiki/CRUD

0

Cześć trochę pozmieniałem pliki i dodałem ajax do odświeżania danych automatycznie co X sekund. Utknąłem jednak w miejscu gdy chcę każdy stan z kolumny "Stan" losować osobno. Znaczy, żeby np. pierwszy losował się 5 sekund, a drugi co 7 a drugi co 3sek i jednocześnie z nimi aktualizowała się data zmiany stanu. Nie wiem jak zapętlić dane funkcje, próbowałem powielić funkcje setInterval, ale strona wariowała. Kod wygląda tak:

index.php

<html>
<head>
	<title>Inteligentny dom</title>
	<link rel="stylesheet" href="style.css">
</head>
<body>
	<div class="data" id="data">
		
		

	<?php
	include 'connect.php';//połączenie z baza
	include 'deleteTableSwiatlo.php';//usuwanie starej tabeli
	include 'createTableSwiatlo.php';//dodawanie nowej tabeli
	include 'addDataSwiatlo.php';//wypełnianie tabeli danymi
	
	?>

	
	</div>
		

	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
	<script type="text/javascript">
		$(document).ready(function() {
			setInterval(function () {
				$('#data').load('data.php')
			}, 1000);
		});
	</script>


	
</body>

</html>

data.php

<?php 
$conn = new mysqli('localhost', 'root', '********', 'baza');
if ($conn->connect_error) {
	die("Connection error: " . $conn->connect_error);
}
 echo "
 <h1>Światło</h1>
 <table>
 <tr>
	 <th>Nr</th>
	 <th>Port</th>
	 <th>Wejście/Wyjście</th>
	 <th>Stan</th>
	 <th>Obszar</th>
	 <th>Poziom</th>
	 <th>Pomieszczenie</th>
	 <th>Nazwa</th>
	 <th>Funkcja</th>
	 <th>DataGodzina</th>
 </tr>";
$stan=rand(0,1);
$sql = "SELECT Nr, Port, wejscieWyjscie, Stan, Obszar, Poziom, Pomieszczenie, Nazwa, Funkcja, DataGodzina from swiatlo";
$result = $conn-> query($sql);
if ($result->num_rows > 0) {
	while($row = $result-> fetch_assoc()){
		$upt = "UPDATE swiatlo SET Stan='$stan' WHERE Nr=1";
		mysqli_query($conn, $upt);
		echo "<tr><td>".$row["Nr"]."</td><td>".$row["Port"]."</td><td>".$row["wejscieWyjscie"]."</td><td>".$row["Stan"]."</td><td>".$row["Obszar"]."</td><td>".$row["Poziom"]."</td><td>".$row["Pomieszczenie"]."</td><td>".$row["Nazwa"]."</td><td>".$row["Funkcja"]."</td><td>".$row["DataGodzina"]."</td></tr>";
	}
	echo "</table>";
}
else{
	echo "0";
}

?>
   

addDataSwiatlo.php


	<?php

	//losowa data
	$start = strtotime("2020-11-19 00:00:00");
	$end =  strtotime("2020-11-20 23:59:59");
	//zmienne
	$pomieszczenia = array('piwnica', 'pokoj', 'kuchnia','garaż','salon','łazienka1','ogród','pokój1','pokój2','łazienka2','garderoba');
	$poziomy = array(-1,0,0,0,0,0,0,1,1,1,1);
	$stan = array();
	$randomDate = array();

	//pętla przypisująca dane
	for($x=0; $x<=10; $x++){
		array_push($stan, rand(0,1));
		array_push($randomDate, date("Y-m-d H:i:s", rand($start, $end)));
		$sql[$x] = "INSERT INTO swiatlo (Port,wejscieWyjscie,Stan,Obszar,Poziom,Pomieszczenie,Nazwa,Funkcja,DataGodzina) VALUES (8080,'wyjście','$stan[$x]','dom','$poziomy[$x]','$pomieszczenia[$x]','dom','światło','$randomDate[$x]')";
		mysqli_query($conn,$sql[$x]);
	}
	
	





	
	
3

Nie widzę aby to wywołanie Ajaxem gdzieś przeładowywało jakąś część strony. Może więc nie ma sensu go używać? Do cyklicznych zadań możesz użyć CRON w Linux lub windows taks menadżera ( Windows).

Jeśli z kolei chcesz to robić z wywołaniem przez Ajax możesz np. od strony PHP po wywołaniu skryptu z przeglądarki wykonywać czynności z jakimś timeoutem.
Coś w stylu

function clearTable();
sleep(2);
function insertToTable();

Względnie w JS w setInterval używaj setTimout w środu funckji wywoływanej w setInterval.
https://kursjs.pl/kurs/intervals/intervals.php

1 użytkowników online, w tym zalogowanych: 0, gości: 1