Hey,

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

<?php

include ('connection.php');
$sql_insert = "INSERT INTO Home_Inp (Inp_6,Inp_7) VALUES ('".$_GET["Inp_6"]."','".$_GET["Inp_7"]."')";
if(mysqli_query($con,$sql_insert))
{
echo "Done";
mysqli_close($con);
}
else
{
echo "error is ".mysqli_error($con );
}
?>


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

<?php

include ('connection.php');
$sql_insert = "INSERT INTO '".$_GET["Tab"]."' ('".$_GET["kol_1"]."','".$_GET["kol_2"]."') VALUES ('".$_GET["Inp_6"]."','".$_GET["Inp_7"]."')";
if(mysqli_query($con,$sql_insert))
{
echo "Done";
mysqli_close($con);
}
else
{
echo "error is ".mysqli_error($con );
}
?>



Iemand sugesties?


mvg,
Geert
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?
Tabelnamen horen niet tussen quotes, enkel de values.
Verder is er, zoals Thomas bedoelt, gevaar voor SQL-Injection.
Ok, dat werkt (tijdelijk).

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.

<?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);
?>
Nee, ik zie dat niemand invloed kan uitoefenen op je query,
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.
Ondertussen ben ik er achter dat je bij one.com niet van buitenaf kan connecteren op je database.
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?
Let wel op SQL-injection. Dus gebruik [php]mysqli_real_escape_string[/php]
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.
Ok so far so good… Alle dat denk ik dan toch.

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?



<?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 );
}
?>
Kun je de data niet in een array meegeven (met de kolomnaam als key)?

//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']) . ")";
Of maak een genormaliseerde database.

Reageren