Insert msql database - PHP script
Ik ben al een tijdje aan het zoeken achter een manier om redelijk universeel via mijn arduino data in mijn SQL data base te krijgen
Ik heb ondertussen onderstaand schript gevonden en het werkt.
http://www.tata.be/Home_control/write_Inp.php?Inp_6=0&Inp_7=1
Quote:
Maar als ik probeer om de tabel en kolom mee te geven lukt het niet meer.
http://www.tata.be/Home_control/write_Inp.php?Tab=Home_Inp&kol_1=Inp_6&kol_2=Inp_7&Inp_6=0&Inp_7=1
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Iemand sugesties?
mvg,
Geert
Gewijzigd op 12/02/2019 19:12:18 door Geert Geerts
Ik denk dat de kolomnamen zelf niet tussen quotes dienen te staan, maar vanwaar deze foutgevoelige en uit oogpunt van veiligheid tekort schietende constructie via GET?
Verder is er, zoals Thomas bedoelt, gevaar voor SQL-Injection.
Waarom ik daarvoor gekozen heb. Vermoedelijk wegens niet voldoende kennis.
Ondertussen effe Wikipedia gelezen en toch eens kijken ofdat ik het niet anders kan aan passen.
Moet ik me zorgen maken over het op halen van informatie uit de database?
Bedankt alvast.
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$con=mysqli_connect("xxx","xxx","xxx","xxx");
$result = mysqli_query($con,'SELECT * FROM HomInp ORDER BY id DESC LIMIT 10');
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['time'] . "</td>";
echo "<td>" . $row['I6'] . "</td>";
echo "<td>" . $row['I7'] . "</td>";
echo "<td>" . $row['I8'] . "</td>";
echo "<td>" . $row['I9'] . "</td>";
echo "<td>" . $row['I10'] . "</td>";
echo "<td>" . $row['I11'] . "</td>";
echo "<td>" . $row['I12'] . "</td>";
echo "<td>" . $row['I13'] . "</td>";
echo "<td>" . $row['I14'] . "</td>";
echo "<td>" . $row['I15'] . "</td>";
echo "</tr>";
}
// Close the connection
mysqli_close($con);
?>
$con=mysqli_connect("xxx","xxx","xxx","xxx");
$result = mysqli_query($con,'SELECT * FROM HomInp ORDER BY id DESC LIMIT 10');
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['time'] . "</td>";
echo "<td>" . $row['I6'] . "</td>";
echo "<td>" . $row['I7'] . "</td>";
echo "<td>" . $row['I8'] . "</td>";
echo "<td>" . $row['I9'] . "</td>";
echo "<td>" . $row['I10'] . "</td>";
echo "<td>" . $row['I11'] . "</td>";
echo "<td>" . $row['I12'] . "</td>";
echo "<td>" . $row['I13'] . "</td>";
echo "<td>" . $row['I14'] . "</td>";
echo "<td>" . $row['I15'] . "</td>";
echo "</tr>";
}
// Close the connection
mysqli_close($con);
?>
Gewijzigd op 12/02/2019 21:53:12 door Geert Geerts
Echter is die echo-put een beetje onnodig ;-)
Je kan ook die HTML buiten je PHP-blok plaatsen. En over genummerde velden in een database, daar ben ik eigenlijk ook niet echt een voorstander van. Het is niet bepaald genormaliseerd.
Gewijzigd op 12/02/2019 22:10:42 door - Ariën -
Het zal dus verder met het PHP script worden :-(
Het enige waar ik momenteel nog mee zit is dat ik, afhankelijk van wat ik wil weg schrijven niet steeds evenveel kolommen ga schrijven.
Ik kan de url wel voorzien voor 10 kolommen en values maar dan verwacht die er ook 10 en geeft die een foutmelding.
Onderstaande url werkt
$sql_insert = "INSERT INTO '".$_GET["Tab"]."' ('".$_GET["kol_1"]."','".$_GET["kol_2"]."') VALUES ('".$_GET["Inp_6"]."','".$_GET["Inp_7"]."')";
http://www.tata.be/Home_control/write_Inp.php?Tab=Home_Inp&kol_1=Inp_6&kol_2=Inp_7&Inp_6=0&Inp_7=1
Als ik slechts 1 kolom in vul werkt het niet meer
http://www.tata.be/Home_control/write_Inp.php?Tab=Home_Inp&kol_1=Inp_6&Inp_6=0
Is hier nog iets aan te doen zodat ik mijn PHP script voor 10 kolommen voorzie en het ook blijft werken dal ik er maar 5 gebruik?
Gewijzigd op 13/02/2019 22:21:45 door Geert Geerts
mysqli_real_escape_string
Als er nu een schadelijk teken zoals een ' voorkomt, dan loopt je query stuk.
Zoals:
mysqli_real_escape_string($con,$_GET['kol_1'])
En gebruik dat consistent voor alle input in je query wat aan te passen is.
Let wel op SQL-injection. Dus gebruik Als er nu een schadelijk teken zoals een ' voorkomt, dan loopt je query stuk.
Zoals:
mysqli_real_escape_string($con,$_GET['kol_1'])
En gebruik dat consistent voor alle input in je query wat aan te passen is.
Ik heb ondertussen het script aangepast dus dat zou in orde moeten zijn.
Alleen ben ik nog steeds verplicht om 6 kolommen en 6 waardes mee te geven ook al wil ik er maar 1 in vullen.
Kan me iemand hier voor een oplossing helpen?
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
include ('connection.php');
$Tab = mysqli_real_escape_string($con,$_GET["Tab"]);
$k1 = mysqli_real_escape_string($con,$_GET["k1"]);
$k2 = mysqli_real_escape_string($con,$_GET["k2"]);
$k3 = mysqli_real_escape_string($con,$_GET["k3"]);
$k4 = mysqli_real_escape_string($con,$_GET["k4"]);
$k6 = mysqli_real_escape_string($con,$_GET["k5"]);
$k7 = mysqli_real_escape_string($con,$_GET["k6"]);
$w1 = mysqli_real_escape_string($con,$_GET["w1"]);
$w2 = mysqli_real_escape_string($con,$_GET["w2"]);
$w3 = mysqli_real_escape_string($con,$_GET["w3"]);
$w4 = mysqli_real_escape_string($con,$_GET["w4"]);
$w5 = mysqli_real_escape_string($con,$_GET["w5"]);
$w6 = mysqli_real_escape_string($con,$_GET["w6"]);
$sql_insert = "INSERT INTO $Tab ($k1 , $k2 , $k3 , $k4 , $k5 , $k6) VALUES ($w1 , $w2 , $w3 , $w4 , $w5 , $w6)";
//
if(mysqli_query($con,$sql_insert))
{
echo "Done";
mysqli_close($con);
}
else
{
echo "error is ".mysqli_error($con );
}
?>
include ('connection.php');
$Tab = mysqli_real_escape_string($con,$_GET["Tab"]);
$k1 = mysqli_real_escape_string($con,$_GET["k1"]);
$k2 = mysqli_real_escape_string($con,$_GET["k2"]);
$k3 = mysqli_real_escape_string($con,$_GET["k3"]);
$k4 = mysqli_real_escape_string($con,$_GET["k4"]);
$k6 = mysqli_real_escape_string($con,$_GET["k5"]);
$k7 = mysqli_real_escape_string($con,$_GET["k6"]);
$w1 = mysqli_real_escape_string($con,$_GET["w1"]);
$w2 = mysqli_real_escape_string($con,$_GET["w2"]);
$w3 = mysqli_real_escape_string($con,$_GET["w3"]);
$w4 = mysqli_real_escape_string($con,$_GET["w4"]);
$w5 = mysqli_real_escape_string($con,$_GET["w5"]);
$w6 = mysqli_real_escape_string($con,$_GET["w6"]);
$sql_insert = "INSERT INTO $Tab ($k1 , $k2 , $k3 , $k4 , $k5 , $k6) VALUES ($w1 , $w2 , $w3 , $w4 , $w5 , $w6)";
//
if(mysqli_query($con,$sql_insert))
{
echo "Done";
mysqli_close($con);
}
else
{
echo "error is ".mysqli_error($con );
}
?>
Code (php)
1
2
3
4
5
6
2
3
4
5
6
//write_inp.php?Tab=Home_Inp&data[Inp_6]=5&data[Inp_35]=2.4 <- 2 kolommen
//write_inp.php?Tab=Home_Inp&data[Inp_6]=5&data[Inp_35]=2.4&data[Inp_41]=7 <- 3 kolommen, enz
$sql_insert = "
INSERT INTO $Tab (" . implode(',',array_keys($_GET['data'])) . ")
VALUES (" . implode(',',$_GET['data']) . ")";
//write_inp.php?Tab=Home_Inp&data[Inp_6]=5&data[Inp_35]=2.4&data[Inp_41]=7 <- 3 kolommen, enz
$sql_insert = "
INSERT INTO $Tab (" . implode(',',array_keys($_GET['data'])) . ")
VALUES (" . implode(',',$_GET['data']) . ")";
Of maak een genormaliseerde database.