URL parameters submitten naar MySQL DB

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Matts Tuijn

Matts Tuijn

22/01/2021 20:17:35
Quote Anchor link
Goedenavond allemaal,

Als beginnend en 'zelf-aanlerend' PHP gebruiker probeer ik het volgende te bereiken:

Ik gebruik een applicatie die data naar een webserver kan sturen middels een URL met variabelen. De data die in deze variabelen zit, wil ik graag opslaan in een database. De variabelen worden door de gebruiker van de applicatie ingevoerd. De applicatie werkt op basis van .xml bestanden om pagina's weer te geven in een desktop GUI.

Hierin kan ik ook berichten definieren, met een URL waar de data heen moet:
Quote:
<message id="test.msg" type="http" inactiveAdvisory="${psu.advisory.com}">
<url>http://127.0.0.1/test.php?Firstname=$disfname&amp;LastName=$dislname&amp;Role=$disrole</url>
<response />
</message>


In bovenstaand voorbeeld zijn 'Firstname', 'Lastname' en 'Role' de columns in mijn database tabel, en de waarden $disfname, $dislname en $disrole de variabelen die door de gebruiker in de GUI worden ingevuld en dus in de database tabel moeten worden gesubmit.

Het is me gelukt om een script te schrijven (test.php) en als ik daarin variabelen declareer, lukt het me om de waarden die daarin staan te inserten in de database tabel, maar ik mis nog het stukje om data van een 'externe' URL te gebruiken. Ik ben al een week hiermee bezig en het wil me maar niet lukken. Onderstaand de code van mijn test.php script.

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
<?php
$servername
= "localhost";
$username = "root";
$password = "";
$dbname = "messageserver";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}


$stmt = $conn->prepare("INSERT INTO `testtabel` (FirstName, LastName, Role) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $FirstName, $LastName, $Role);

$stmt->execute();

echo "Nieuwe regel toegevoegd!";

$stmt->close();
$conn->close();
?>


Ik ben overigens niet opzoek naar een kant-en-klaar antwoord (als dat al mogelijk is..) maar liever een paar aanwijzingen. Ik probeer het mezelf tenslotte allemaal aan te leren :)

Dank alvast!
Matts
 
PHP hulp

PHP hulp

02/02/2023 02:15:57
 
- Ariën  -
Beheerder

- Ariën -

22/01/2021 20:29:50
 
Aad B

Aad B

23/01/2021 21:29:24
Quote Anchor link
Misschien simpel iets met GET params:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$stmt = $conn->prepare('insert into tabel values ($_GET["var_1"]
Dit haalt de waarden uit de http aanroep van de app. De URL met variabelen moet dan de bijpassende aanroep doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
http://jouw_pagina.php?var_1='12345'
var_1 stuur je dan met een ; separated string of als meedere get variabelen
Een en ander afhankelijk van hoe je app de data verzend. Kan je dat sturen of is het een vast formaat?
Gewijzigd op 24/01/2021 10:31:49 door Aad B
 
Matts Tuijn

Matts Tuijn

24/01/2021 11:01:37
Quote Anchor link
- Ariën - op 22/01/2021 20:29:50:


Hi Ariën,

Dank voor je reply. Dit lijkt inderdaad een waardevolle functie te (kunnen) zijn. Dat zou betekenen dat ik de waarde(s) die deze functie van de URL maakt in een array moet zetten om die vervolgens verderop in het .php bestand op de server in een SQL statement moet plaatsen?



Toevoeging op 24/01/2021 11:10:55:

Aad B op 23/01/2021 21:29:24:
Misschien simpel iets met GET params:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$stmt = $conn->prepare('insert into tabel values ($_GET["var_1"]
Dit haalt de waarden uit de http aanroep van de app. De URL met variabelen moet dan de bijpassende aanroep doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
http://jouw_pagina.php?var_1='12345'
var_1 stuur je dan met een ; separated string of als meedere get variabelen
Een en ander afhankelijk van hoe je app de data verzend. Kan je dat sturen of is het een vast formaat?


Goedemorgen Aad,

Dit lijkt mij inderdaad een stuk eenvoudiger. De app die de data submit via de http request vereist alleen wel dat de variabelen tussen {} staan (en volgens mij wordt php daar niet zo blij van??) en dat variabelen gescheiden worden door
Quote:
&amp;
. Ik kan de URL zelf bepalen in een XML bestand (zie mijn eerste bericht) mits ik mij aan de bovengenoemde beperkingen houdt van de ${} en de &amp;.

Er zijn verschillende soorten berichten, maar ik kan zelf bepalen in welke volgorde de data (maw de variabelen) in de URL staan. Ik zit nu alleen naar mijn php script te kijken, en vermoed dat ik een variabele mis waardoor de SQL query niet werkt. Bij het binden van de parameters noem ik '$FirstName', '$LastName' en 'Role', terwijl de values in de SQL query als ? staan. Wanneer ik in mijn browser 'http://127.0.0.1/script.php?FirstName=Berend&LastName=Botje&Role=Kapitein' invoer, krijg ik netjes de echo 'Nieuwe regel toegevoegd!' te zien, maar in mijn database gebeurt helemaal niets..

Hartstikke interessant en leuk om mezelf PHP, XML en SQL aan te leren, maar soms ook wel eens frustrerend ;-)
 
- Ariën  -
Beheerder

- Ariën -

24/01/2021 13:12:49
Quote Anchor link
Om te zien wat er fout gaat, zul je de error vanuit PDOException op moeten halen.

Zie ook het voorbeeld onderaan deze link: https://www.w3schools.com/php/php_mysql_prepared_statements.asp (met de try/catch methode)
 
Aad B

Aad B

24/01/2021 13:42:54
Quote Anchor link
Matss je krijgt via
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
http://127.0.0.1/test.php?Firstname= etc
al iets binnen voor PHP en begin eens met een
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
.
.

echo $_GET["Firstname"];
echo $_GET["Lastname"];
echo $_GET["disrole"];
.
.

?>
om te kijken of wellicht de hele regel of een deel van de regel in Firstname staat? Als dat zo is dan kan je de regel verder binnen php wel ontleden.
Gewijzigd op 24/01/2021 14:05:15 door Aad B
 
Matts Tuijn

Matts Tuijn

24/01/2021 14:31:33
Quote Anchor link
Yes het is me eindelijk gelukt!
Ik heb een nieuw php script geschreven met behulp van bronnen op het internet, en enkele aanpassingen in het xml bestand van de applicatie die de data verstuurd middels de HTTP request.

Even ter referentie mijn 'nieuwe' code, mocht iemand anders ooit met een vergelijkbaar issue zitten:

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
<?php
$link
= mysqli_connect("localhost", "MijnGebruikersnaam", "MijnWachtwoord", "messageserver");
 
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

$sql = "INSERT INTO `test` (firstname, lastname) VALUES (?, ?)";
 
if($stmt = mysqli_prepare($link, $sql)){
    mysqli_stmt_bind_param($stmt, "ss", $FirstName, $LastName);
    
    $FirstName = $_REQUEST['firstname'];
    $LastName = $_REQUEST['lastname'];
    
    if(mysqli_stmt_execute($stmt)){
        echo "Nieuwe regel toegevoegd!.";
    }
else{
        echo "ERROR: Could not execute query: $sql. " . mysqli_error($link);
    }
}
else{
    echo "ERROR: Could not prepare query: $sql. " . mysqli_error($link);
}


// Close statement
mysqli_stmt_close($stmt);
 
// Close connection
mysqli_close($link);
?>


En nu lekker verder spelen, dank beiden voor jullie input en hulp!
Matts
 
Ad Fundum

Ad Fundum

24/01/2021 15:23:52
Quote Anchor link
Goed gedaan met prepared statements!
Nog 1 advies: zet je PHP bestand niet in de webroot van de webserver, mocht die ooit verkeerd geconfigureerd zijn en PHP als tekst laten zien, dan weet niet iedereen je wachtwoord.
 
Matts Tuijn

Matts Tuijn

25/01/2021 19:00:45
Quote Anchor link
Hi Ad,

Ja daar had ik al wel over nagedacht, maar toch bedankt voor de reminder :)
Voor nu werk ik lokaal met Xampp, van welke ik de connectie naar buiten toe volledig heb afgeknepen.
 
Aad B

Aad B

25/01/2021 21:29:03
Quote Anchor link
Mooi dat het goed gelukt is en Xampp is prima voor de lokale connectie en ontwikkelen.
 



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.