Gegevens uit database halen en tonen
ik probeer een pagina te maken waarin contactgegevens uit een database worden gehaald en op deze pagina worden getoond. Niet zo heel lastig leek mij? Nu kom ik toch tegen een foutje aan. Weet misschien één van jullie zo op het eerste gezicht wat er fout aan is?
<script>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$user = "root";
$pass = "usbw";
$db = "login";
$host = "localhost";
mysql_connect($host, $user, $pass) or die ("kan geen verbinding maken met de database.");
mysql_select_db($db) or DIE ("Kan database niet vinden.");
$sql = "SELECT naam FROM contactgegevens WHERE id = '1'";
$result = mysql_query($sql);
?>
$user = "root";
$pass = "usbw";
$db = "login";
$host = "localhost";
mysql_connect($host, $user, $pass) or die ("kan geen verbinding maken met de database.");
mysql_select_db($db) or DIE ("Kan database niet vinden.");
$sql = "SELECT naam FROM contactgegevens WHERE id = '1'";
$result = mysql_query($sql);
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<table>
<tr>
<td>Naam:</td>
<td></td>
</tr>
<tr>
</script>
Je vergeet namelijk nog te fetchen met mysql_fetch_assoc().
Lees ook eens: http://www.phptuts.nl/view/41/
Gewijzigd op 21/11/2012 14:39:35 door - Ariën -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$user = "root";
$pass = "usbw";
$db = "login";
$host = "localhost";
mysql_connect($host, $user, $pass) or die ("kan geen verbinding maken met de database.");
mysql_select_db($db) or DIE ("Kan database niet vinden.");
$sql = "SELECT naam FROM contactgegevens WHERE id = '1'";
$result = mysql_query($sql);
$naam = mysql_fetch_assoc($result);
echo $naam;
?>
$user = "root";
$pass = "usbw";
$db = "login";
$host = "localhost";
mysql_connect($host, $user, $pass) or die ("kan geen verbinding maken met de database.");
mysql_select_db($db) or DIE ("Kan database niet vinden.");
$sql = "SELECT naam FROM contactgegevens WHERE id = '1'";
$result = mysql_query($sql);
$naam = mysql_fetch_assoc($result);
echo $naam;
?>
Helaas is de output op mijn beeldscherm dan "array". Enig idee voor een oplossing?
$naam['naam']
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$user = "root";
$pass = "usbw";
$db = "login";
$host = "localhost";
mysql_connect($host, $user, $pass) or die ("kan geen verbinding maken met de database.");
mysql_select_db($db) or DIE ("Kan database niet vinden.");
$sql = "SELECT * FROM contactgegevens WHERE id = '1'";
$result = mysql_query($sql);
$naam = mysql_fetch_assoc($result);
echo $naam['naam']
?>
$user = "root";
$pass = "usbw";
$db = "login";
$host = "localhost";
mysql_connect($host, $user, $pass) or die ("kan geen verbinding maken met de database.");
mysql_select_db($db) or DIE ("Kan database niet vinden.");
$sql = "SELECT * FROM contactgegevens WHERE id = '1'";
$result = mysql_query($sql);
$naam = mysql_fetch_assoc($result);
echo $naam['naam']
?>
Nu nog een vraag, ik heb nog meer gegevens in de database zitten zoals telefoonnummer, adres etc. Kan ik deze ook dmv. "SELECT * FROM contactgegevens WHERE id='1'" in een array kunnen zetten en dan in een tabel apart de uitkomsten van deze array zetten? Dus zeg maar zo:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
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
<?php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<table>
<tr>
<td>Naam:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Telefoonnummer:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Telefoonnummer (2):</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>E-mailadres:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Fax nummer:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Adres:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Postcode:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Woonplaats:</td>
<td>//gegeven database</td>
</tr>
</table>
</body>
</html>
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<table>
<tr>
<td>Naam:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Telefoonnummer:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Telefoonnummer (2):</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>E-mailadres:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Fax nummer:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Adres:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Postcode:</td>
<td>//gegeven database</td>
</tr>
<tr>
<td>Woonplaats:</td>
<td>//gegeven database</td>
</tr>
</table>
</body>
</html>
?>
(PHP tekens voor wat overzichtelijkheid)
Gewijzigd op 21/11/2012 15:08:08 door Johhny Westra
$naam is op zich al een array, waarin alle velden staan per element van de gekozen gebruiker.
Gewijzigd op 21/11/2012 15:09:15 door - Ariën -
- Aar - op 21/11/2012 14:39:02:
Lees ook eens: http://www.phptuts.nl/view/41/
Heb je deze tip al opgevolgd?
Ik zie ook nergens foutafhandeling van je query. Lees die PHPtuts tutorial maar eens.
Alles werkt. Maar nu wil ik alleen de gegevens laten zien van de user die zich inlogt.
Dat zal dan met een post variabele zijn maar dat lukt mij niet.
php code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//---------------------------------
// Een database openen in MySQL
//---------------------------------
// variabelen initialiseren
$host="localhost";
$username="root";
$password = "usbw";
$dbnaam="users";
$fout = "FOUT: openen database mislukt";
$query="SELECT * FROM users";
// ---- einde initialisatie
$db=mysql_connect($host, $username, $password) or die ($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>
//---------------------------------
// Een database openen in MySQL
//---------------------------------
// variabelen initialiseren
$host="localhost";
$username="root";
$password = "usbw";
$dbnaam="users";
$fout = "FOUT: openen database mislukt";
$query="SELECT * FROM users";
// ---- einde initialisatie
$db=mysql_connect($host, $username, $password) or die ($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>
<html>
<head>
<title>test</title>
</head>
<body>
<table border="1" width="70%" align="center">
<tr>
<td colspan="10"><h2 align="center">Werknemers</h2></td>
</tr>
<tr>
<th>id</th>
<th>email</th>
<th>wachtwoord</th>
<th>admin</th>
<th>naam</th>
<th>adres</th>
<th>plaats</th>
<th>postcode</th>
<th>land</th>
<th>nieuwsbrief</th>
</tr>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php while ($rij = mysql_fetch_array($result)){
echo ("<tr><td>". $rij['id'] . " </td> " .
"<td>" . $rij['email'] . " </td>" .
"<td>" . $rij['wachtwoord'] . " </td> " .
"<td>" . $rij['admin'] . " </td> " .
"<td>" . $rij['naam'] . " </td> " .
"<td>" . $rij['adres'] . " </td> " .
"<td>" . $rij['plaats'] . " </td> " .
"<td>" . $rij['postcode'] . " </td> " .
"<td>" . $rij['land'] . " </td> " .
"<td>" . $rij['nieuwsbrief'] . " </td></tr>\n ");
}
?>
echo ("<tr><td>". $rij['id'] . " </td> " .
"<td>" . $rij['email'] . " </td>" .
"<td>" . $rij['wachtwoord'] . " </td> " .
"<td>" . $rij['admin'] . " </td> " .
"<td>" . $rij['naam'] . " </td> " .
"<td>" . $rij['adres'] . " </td> " .
"<td>" . $rij['plaats'] . " </td> " .
"<td>" . $rij['postcode'] . " </td> " .
"<td>" . $rij['land'] . " </td> " .
"<td>" . $rij['nieuwsbrief'] . " </td></tr>\n ");
}
?>
</table>
<hr>
</body>
</html>
Wordt dan iets als
SELECT * FROM users WHERE id = id_van_de_ingelogde_user
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$host="localhost";
$username="root";
$password = "usbw";
$dbnaam="users";
$fout = "FOUT: openen database mislukt";
$query= "SELECT * from users WHERE id=" .$_GET["id"];
<input type="hidden" name="id" value="<?php echo($_GET["id"]);?>">
// ---- einde initialisatie
$db=mysql_connect($host, $username, $password) or die ($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>
$host="localhost";
$username="root";
$password = "usbw";
$dbnaam="users";
$fout = "FOUT: openen database mislukt";
$query= "SELECT * from users WHERE id=" .$_GET["id"];
<input type="hidden" name="id" value="<?php echo($_GET["id"]);?>">
// ---- einde initialisatie
$db=mysql_connect($host, $username, $password) or die ($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>
En op de beveiligde pagina na het inloggen
iets zoals dit
<div id="content">
Code (php)
<h3>Welkom op deze beveiligde pagina</h3>
U bent aangemeld als : <br>
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$query = "SELECT * FROM users WHERE email='$email';";
$resbew = mysql_query($query);
$email = $_SESSION["email"];
?>
$query = "SELECT * FROM users WHERE email='$email';";
$resbew = mysql_query($query);
$email = $_SESSION["email"];
?>
"Uw gegevens aanpassen? Dit kan <a href=\"test.php?id=['id'].">hier</a>
</div>
Maar nu werkt de link niet. Doe ik iets fout? Ik werk nog niet zolang met php...
Dit is lek => Zie sql-injection.
Hier kan de hele layout mee worden vernaggeld.
Ik zie nergens een session starten en ook niet dat je $_SESSION["username"] vult.
Hiermee kijk je of een willekeurig emailadres in je database zit.
Heeft niks met de ingelogde persoon te maken.
Gewijzigd op 18/03/2013 17:35:14 door - SanThe -
Dit is volledige file(beveiligd.php). Dit krijgt men na het inloggen.
<html>
<head>
<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
<title>Beveiligde pagina</title>
</head>
<body>
<div id="container" style="width:960px;height:500px;">
<div id="menu" style="background-color:#888888;width:960px;text-align:center;">
<!-- <a href="index.html">Home</a>
   
<a href="verkooppunten/verkooppunten.html">Verkooppunten</a>
   
<a href="contact/contact.html">Contact</a>
    -->
<a href="logout1.php">Uitloggen</a>
</div>
<div id="content">
Code (php)
<h2>Welkom op deze beveiligde pagina</h2>
U bent aangemeld als : <br>
Uw wachtwoord is : <br>
</div>
</div>
</body>
</html>
Dan is het de bedoeling dat ze hun gegevens kunnen opvragen/wijzigen
dat is dan deze file (opvragen)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$host="localhost";
$username="root";
$password = "usbw";
$dbnaam="users";
$fout = "FOUT: openen database mislukt";
$query= "SELECT * from users WHERE id=" .$_GET["id"];
<input type="hidden" name="id" value="<?php echo($_GET["id"]);?>">
// ---- einde initialisatie
$db=mysql_connect($host, $username, $password) or die ($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>
$host="localhost";
$username="root";
$password = "usbw";
$dbnaam="users";
$fout = "FOUT: openen database mislukt";
$query= "SELECT * from users WHERE id=" .$_GET["id"];
<input type="hidden" name="id" value="<?php echo($_GET["id"]);?>">
// ---- einde initialisatie
$db=mysql_connect($host, $username, $password) or die ($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>
<html>
<head>
<title>gegevens</title>
</head>
<body>
<!--kolomkoppen voor de tabel in plain HTML schrijven -->
<table border="0" width="70%" align="center">
<tr>
<td colspan="10"><h2 align="center">Werknemers</h2></td>
</tr>
<tr>
<th>id</th>
<th>email</th>
<th>wachtwoord</th>
<th>admin</th>
<th>naam</th>
<th>adres</th>
<th>plaats</th>
<th>postcode</th>
<th>land</th>
<th>nieuwsbrief</th>
</tr>
<!-- Vanaf hier de PHP while()-lus. Elke lusdoorgang schrijft
een tabelrij naar het scherm -->
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php while ($rij = mysql_fetch_array($result)){
echo ("<tr><td>". $rij['id'] . " </td> " .
"<td>" . $rij['email'] . " </td>" .
"<td>" . $rij['wachtwoord'] . " </td> " .
"<td>" . $rij['admin'] . " </td> " .
"<td>" . $rij['naam'] . " </td> " .
"<td>" . $rij['adres'] . " </td> " .
"<td>" . $rij['plaats'] . " </td> " .
"<td>" . $rij['postcode'] . " </td> " .
"<td>" . $rij['land'] . " </td> " .
"<td>" . $rij['nieuwsbrief'] . " </td></tr>\n ");
}
?>
echo ("<tr><td>". $rij['id'] . " </td> " .
"<td>" . $rij['email'] . " </td>" .
"<td>" . $rij['wachtwoord'] . " </td> " .
"<td>" . $rij['admin'] . " </td> " .
"<td>" . $rij['naam'] . " </td> " .
"<td>" . $rij['adres'] . " </td> " .
"<td>" . $rij['plaats'] . " </td> " .
"<td>" . $rij['postcode'] . " </td> " .
"<td>" . $rij['land'] . " </td> " .
"<td>" . $rij['nieuwsbrief'] . " </td></tr>\n ");
}
?>
<!-- Einde van de lus, tabel afsluiten -->
</table>
<hr>
<!-- Eventueel rest van de pagina -->
</body>
</html>
Waarom een (onnodige) variabele aanmaken? Kost alleen maar geheugen.
Om de html-quotes niet steeds te hoeven escapen gebruik je enkele quotes voor php.
Dus niet:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$tekst = "<h2>U bent nog niet aangemeld.</h2>
U kunt <a href=\"login1.php\">hier inloggen</a> of<br>
U kunt zich <a href=\"registreer.php\">hier registreren</a>";
echo($tekst);
?>
$tekst = "<h2>U bent nog niet aangemeld.</h2>
U kunt <a href=\"login1.php\">hier inloggen</a> of<br>
U kunt zich <a href=\"registreer.php\">hier registreren</a>";
echo($tekst);
?>
Maar:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
echo '<h2>U bent nog niet aangemeld.</h2>
U kunt <a href="login1.php">hier inloggen</a> of<br>
U kunt zich <a href="registreer.php">hier registreren</a>';
?>
echo '<h2>U bent nog niet aangemeld.</h2>
U kunt <a href="login1.php">hier inloggen</a> of<br>
U kunt zich <a href="registreer.php">hier registreren</a>';
?>
Deze regel gaat daar waar die nu staat een fout geven.
Verder hoort die niet vóór je html code maar er in.
Met deze code kan je dus de gegevens van elke willekeurige gebruiker opvragen. Als je dit dus op je 'beveiligde' pagina hebt staan ben je zeer hackbaar.
- SanThe - op 18/03/2013 17:34:32:
Ga eerst wat doen aan beveiliging en logica.
Gewijzigd op 18/03/2013 18:42:20 door - SanThe -
Sommige van de velden kunnen niet aangepast worden. Deze bevatten dan gegevens die in principe ook nooit hoeven veranderd te worden, bv geboortedatum, geboorteplaats, ...
http://www.plaatscode.be/142138/
Kijk gerust of je er iets van kan gebruiken.
Opmerkingen om dit nog te verbeteren zijn steeds welkom.
Verder zou ik alleen de gegevens voor verbinding met de db in een config bestandje steken en deze includen. Dan hoef je al deze gegevens niet op elke pagina te plaatsen. In mijn voorbeeld heb ik al die gegevens in db_connect.php gestoken
Gewijzigd op 31/03/2020 10:15:11 door Lowie Dewit
Let voortaan even op de datum van het laatste bericht ;-)
Anyway, toen in 2013 was mysql nog gewoon.
Dit topic gaat dicht.