HTML form vullen in PHP met gelezen MySQL variabele

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Filip Lambinet

Filip Lambinet

22/05/2017 13:42:07
Quote Anchor link
Hallo,

Ik heb een probleempje met het opvullen van een html form binnen php.
Ik lees Mysql variabelen, en probeer ze dan in een form te stoppen
zodanig dat ik ze daarna kan wijzigen.

Echter, de variabele wordt niet correct terug gegeven...

Alvast bedankt voor een oplossing...

Hierbij de code uit mijn php bestand:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php

echo "<body style='background-color:#edd9c0; font-size: 16px;'>";
echo ('<font face="verdana" size="2" color="black">');

//------------------------------------------------------------------
$inputvar = $_GET["boxnr"];
$zoeknr = intval($inputvar);

//------------------------------------------------------------------
$servername = "localhost";
$username = "root";
$password = "pass";
$dbname = "boxdb";

//------------- Create connection -------------
$conn = new mysqli($servername, $username, $password, $dbname);

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


//----------------Select data -----------------
$sql = "SELECT * FROM basis WHERE nr='$zoeknr'";
$result = $conn->query($sql);

if ($result->num_rows > 0)
   {

   // ---------------------------------
   while($row = $result->fetch_assoc())
        {

        echo "test<br>";
        echo ($row["vnaam"]);
        $var = $row["vnaam"];
        echo ("<br>".$var);
        // Het volgende werkt niet:
        echo "<form>";
        echo '<input name="voornaam" type="text" size="45" id="voornaam" value="$var"';
        echo "</form>";        
        }
   }


//------------- Close connection -------------
$conn->close();

?>
 
PHP hulp

PHP hulp

27/11/2024 01:24:41
 
- Ariën  -
Beheerder

- Ariën -

22/05/2017 13:51:33
Quote Anchor link
Waarom wil je $row["vnaam"] in $var opslaan?
Wat is je gedachte daarachter?

Als ik een paar goede tip mag geven:
- Je hoeft niet voro elke regel een echo te gebruiken. Een echo werkt ook over meerdere regels, en je kan zelf voor hele lappen HTML zelfs beslissen om je PHP-blok tussentijd te onderbreken met ?> en <?php.

Ook raad ik aan om systematisch altijd $conn->real_escape_string(..) toe te voegen aan alle manipuleerbare variabelen in je query, waaronder $_GET, $_POST, $_COOKIE en $_ENV. Zo voorkom je hacking d.m.v. SQL-injection.

Verder is inline-CSS niet aan te raden, en kan ik een CSS-stylesheet adviseren voor CSS-styling.
 
Filip Lambinet

Filip Lambinet

22/05/2017 13:57:08
Quote Anchor link
Het opslaan in $var heb ik gedaan bij testen om te zien of die correct wordt opgevuld.
Meer zit er niet achter.

Het is enkel de volgende (oorspronkelijke) regel die niet werkt:

echo '<input name="voornaam" type="text" size="45" id="voornaam" value="$row["vnaam"]" ';

De output in mijn form field is dan de volgende:

$row[

Dank je, ook voor de extra tips, die ga ik zeker toepassen.

Filip
 
- Ariën  -
Beheerder

- Ariën -

22/05/2017 14:06:25
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo '<input name="voornaam" type="text" size="45" id="voornaam" value="'.$row["vnaam"].'">';


Haal je variabelen bij sterke voorkeur altijd buiten je quotes. Je eindig je string met dezelfde quote waarmee je hem begin (single-quote hier in je voorbeeld), en met de punt koppel je er een variabele aan vast. Daarna eindig je het laatste stukje nog met een stujke gekoppelde string.
Gewijzigd op 22/05/2017 14:08:41 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

22/05/2017 14:12:31
Quote Anchor link
Indien je het volgende doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$test
= 'hoi';
echo 'Dit is een test: $test';
?>

Wordt het volgende weergegeven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Dit is een test: $test

Dit komt omdat binnen een string met enkele quotes variabelen niet vervangen worden door hun corresponderende waarden.

Daarnaast is het ook niet nodig om lappen (statische) HTML te echo'en. Je kunt on-the-fly PHP-blokken starten en eindigen. Het volgende werkt prima:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input name="voornaam" type="text" size="45" id="voornaam" value="<?php echo $row['vnaam'] ?>">


ECHTER, DIT IS NIET VEILIG / WATERDICHT
Je bent bezig met data weergeven in een HTML-context. Dit betekent dat bepaalde karakters in deze context (denk aan een dubbele quote ("), een openingshaak (<), een sluitingshaak (>), een ampersand (&) et cetera) een speciale betekenis hebben. Vooral als gebruikers invoer verzorgen (user input) is het belangrijk om de deze invoer van (mogelijk) speciale betekenis te ontdoen. Dit doe je met escaping-functies.

Net zoals je in de SQL-context DATA ontdoet van enige speciale betekenis met behulp van escaping-functies zodat deze niet als SQL geïnterpreteerd kan worden (met behulp van de real_escape_string() functie, die overigens NIET veilig is ZONDER het gebruik van quotes) gebruik je in de HTML-context de escaping-functie htmlspecialchars() zodat DATA niet als HTML geïnterpreteerd kan worden.

Een veiliger alternatief zou dus het volgende zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input name="voornaam" type="text" size="45" id="voornaam" value="<?php echo htmlspecialchars($row["vnaam"], ENT_QUOTES) ?>">

En dan hebben we het nog niet eens over character encoderingen gehad :p. Escaping-functionaliteit werkt namelijk alleen goed als dit wordt gedaan in de gehanteerde character encoding. Als je werkt met encoding A en escapet volgens encoding B dan wordt mogelijk niet alles wat gevaarlijk is geneutraliseerd.

Alles begint eigenlijk bij de bewustwording dat alles een character encodering heeft.
Gewijzigd op 22/05/2017 14:19:33 door Thomas van den Heuvel
 
Filip Lambinet

Filip Lambinet

22/05/2017 14:18:58
Quote Anchor link
Gewijzigd...
En, inhoud kwijt... verdorie :-(
Gewijzigd op 22/05/2017 14:25:45 door Filip Lambinet
 
- Ariën  -
Beheerder

- Ariën -

22/05/2017 14:20:21
Quote Anchor link
Je hoeft niet het voorgaande bericht volledig te quoten, Filip. Kan je je bericht even aanpassen door daar op Afbeelding te drukken?
Gewijzigd op 22/05/2017 14:21:05 door - Ariën -
 
Filip Lambinet

Filip Lambinet

22/05/2017 14:20:52
Quote Anchor link
:-)
Ik ben ook slechts enkele weken in deze talen aan het programmeren.
Van opleiding en job ervaring ben ik mainframe programmeur (IBM, DB2, COBOL, PL1, SQL, ...)

Dank je Thomas, ik ga het meteen allemaal uitproberen en hou je op de hoogte.

Filip


Toevoeging op 22/05/2017 14:22:29:


Sorry, heb te snel op button geklikt.
Ben ook nieuw op dit forum, alsook het werken met forums (respons, reacte, ...).
Thanks :-)
 
Filip Lambinet

Filip Lambinet

23/05/2017 16:34:47
Quote Anchor link
Thomas,
Bovenstaand probleempje is opgelost.
Dankje voor je hulp.
 



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.