Insert msql database - PHP script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Geert Geerts

Geert Geerts

12/02/2019 19:11:10
Quote Anchor link
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
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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
Gewijzigd op 12/02/2019 19:12:18 door Geert Geerts
 
PHP hulp

PHP hulp

12/12/2019 08:51:09
 
Verwijderd 31683

Verwijderd 31683

12/02/2019 19:33:26
Quote Anchor link
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?
 
- Ariën -
Beheerder

- Ariën -

12/02/2019 19:45:47
Quote Anchor link
Tabelnamen horen niet tussen quotes, enkel de values.
Verder is er, zoals Thomas bedoelt, gevaar voor SQL-Injection.
 
Geert Geerts

Geert Geerts

12/02/2019 21:52:44
Quote Anchor link
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.

Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
?>
Gewijzigd op 12/02/2019 21:53:12 door Geert Geerts
 
- Ariën -
Beheerder

- Ariën -

12/02/2019 22:09:29
Quote Anchor link
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.
Gewijzigd op 12/02/2019 22:10:42 door - Ariën -
 
Geert Geerts

Geert Geerts

13/02/2019 22:21:20
Quote Anchor link
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?
Gewijzigd op 13/02/2019 22:21:45 door Geert Geerts
 
- Ariën -
Beheerder

- Ariën -

13/02/2019 22:55:53
Quote Anchor link
Let wel op SQL-injection. Dus gebruik 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.
 
Geert Geerts

Geert Geerts

14/02/2019 21:55:57
Quote Anchor link
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?


Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 );
    }

?>
 
Rob Doemaarwat

Rob Doemaarwat

14/02/2019 22:07:58
Quote Anchor link
Kun je de data niet in een array meegeven (met de kolomnaam als key)?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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']) . ")";
 
- Ariën -
Beheerder

- Ariën -

14/02/2019 22:43:32
Quote Anchor link
Of maak een genormaliseerde database.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.