Fouten/tips
Quote:
Goede avond, als eerste hallo allemaal ik ben nieuw!
Ik ben nieuw met php, en ik probeer mijn database te updaten.
Nu werkt het update niet waarom weet ik niet?
Mischien zien jullie foutjes etc? Als ik de waardes $dbid etc echo werkt hij gewoon?
MVG willem
Ik ben nieuw met php, en ik probeer mijn database te updaten.
Nu werkt het update niet waarom weet ik niet?
Mischien zien jullie foutjes etc? Als ik de waardes $dbid etc echo werkt hij gewoon?
MVG willem
Quote:
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
45
46
47
48
49
50
51
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
48
49
50
51
<?php
$submit = $_POST['submit'];
$user = ($_POST['user']);
$woord = $_POST['woord'];
$nieuwwoord = ($_POST['nieuwwoord']);
$nieuwpassword = md5 ($_POST['nieuwpassword']);
if ($submit)
{
if ($user&&$woord)
{
{
$connect = mysql_connect("localhost","root","willem") or die("Kan geen verbinding maken met mysql server.");
mysql_select_db("users") or die("kon geen database selecteren.");
$query = mysql_query("SELECT * FROM users WHERE user='$user'");
$numrows = mysql_num_rows($query);
$dbid = $row['id'];
$dbname = $row['name'];
$dbuser = $row['user'];
$dbwoord = $row['woord'];
$dbdate = $row['date'];
("
UPDATE users
SET woord = '$nieuwwoord', password = '$nieuwpassword'
WHERE woord = '$woord'
");
die ("Woord aangepast.");
}
}
else
{
echo "Vul <b>alles</b> in!";
}
}
?>
$submit = $_POST['submit'];
$user = ($_POST['user']);
$woord = $_POST['woord'];
$nieuwwoord = ($_POST['nieuwwoord']);
$nieuwpassword = md5 ($_POST['nieuwpassword']);
if ($submit)
{
if ($user&&$woord)
{
{
$connect = mysql_connect("localhost","root","willem") or die("Kan geen verbinding maken met mysql server.");
mysql_select_db("users") or die("kon geen database selecteren.");
$query = mysql_query("SELECT * FROM users WHERE user='$user'");
$numrows = mysql_num_rows($query);
$dbid = $row['id'];
$dbname = $row['name'];
$dbuser = $row['user'];
$dbwoord = $row['woord'];
$dbdate = $row['date'];
("
UPDATE users
SET woord = '$nieuwwoord', password = '$nieuwpassword'
WHERE woord = '$woord'
");
die ("Woord aangepast.");
}
}
else
{
echo "Vul <b>alles</b> in!";
}
}
?>
Quote:
<html>
<center>
<p>
<form action='vraag112.php' method='POST'>
<table>
<tr>
<td>
Gebruikersnaam:
</td>
<td>
<input type='text' name='user' value=''>
</td>
</tr>
<tr>
<td>
Geheime woord:
</td>
<td>
<input type='text' name='woord' value=''>
</td>
</tr>
<tr>
<td>
Nieuw wachtwoord:
</td>
<td>
<input type='password' name='nieuwpassword'>
</td>
</tr>
<tr>
<td>
Nieuwe geheime woord:
</td>
<td>
<input type='text' name='nieuwwoord' value=''>
</td>
</tr>
</table>
<p>
<input type='submit' name='submit' value='Verander'>
</form>
</center>
</html>
<center>
<p>
<form action='vraag112.php' method='POST'>
<table>
<tr>
<td>
Gebruikersnaam:
</td>
<td>
<input type='text' name='user' value=''>
</td>
</tr>
<tr>
<td>
Geheime woord:
</td>
<td>
<input type='text' name='woord' value=''>
</td>
</tr>
<tr>
<td>
Nieuw wachtwoord:
</td>
<td>
<input type='password' name='nieuwpassword'>
</td>
</tr>
<tr>
<td>
Nieuwe geheime woord:
</td>
<td>
<input type='text' name='nieuwwoord' value=''>
</td>
</tr>
</table>
<p>
<input type='submit' name='submit' value='Verander'>
</form>
</center>
</html>
Gewijzigd op 16/11/2010 18:32:11 door Ocirina Ocirina
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
48
49
50
51
52
53
54
55
56
57
58
59
<?php
// Importeer database verbinding
include_once 'database.php';
// Controleren of er wat gepost is
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
// Hier nog wat controles uitvoeren op formulier velden?
if( trim( $_POST['veld'] ) == '' ) {
// fouten afhandeling, etc
}
// Select $query
$query =
"
SELECT
veld1,
veld2,
veld3,
etc
FROM
users
WHERE
user = '" .mysql_real_escape_string( $_POST['user'] ). "'
";
// Query uitvoeren
$result = mysql_query( $query );
// Controleren of query gelukt is
if( !$result ) {
echo 'Er is een fout opgetreden bij het uitvoeren van de query';
}
else {
// Update $query
$query =
"
UPDATE
users
SET
woord = '" .mysql_real_escape_string( $_POST['nieuwwoord'] ). "',
password = '" .md5( $_POST['nieuwpassword'] ). "'
WHERE
woord = '" .mysql_real_escape_string( $_POST['woord'] ). "'
";
// Query uitvoeren
$result = mysql_query( $query );
// Controleren of query gelukt is
if( !$result ) {
echo 'Er is een fout opgetreden bij het uitvoeren van de update query';
}
}
}
?>
// Importeer database verbinding
include_once 'database.php';
// Controleren of er wat gepost is
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
// Hier nog wat controles uitvoeren op formulier velden?
if( trim( $_POST['veld'] ) == '' ) {
// fouten afhandeling, etc
}
// Select $query
$query =
"
SELECT
veld1,
veld2,
veld3,
etc
FROM
users
WHERE
user = '" .mysql_real_escape_string( $_POST['user'] ). "'
";
// Query uitvoeren
$result = mysql_query( $query );
// Controleren of query gelukt is
if( !$result ) {
echo 'Er is een fout opgetreden bij het uitvoeren van de query';
}
else {
// Update $query
$query =
"
UPDATE
users
SET
woord = '" .mysql_real_escape_string( $_POST['nieuwwoord'] ). "',
password = '" .md5( $_POST['nieuwpassword'] ). "'
WHERE
woord = '" .mysql_real_escape_string( $_POST['woord'] ). "'
";
// Query uitvoeren
$result = mysql_query( $query );
// Controleren of query gelukt is
if( !$result ) {
echo 'Er is een fout opgetreden bij het uitvoeren van de update query';
}
}
}
?>
Dit helpt je denk ik een stuk verder :-) Toch zijn er nog een aantal die fout gaan. en waar je voortaan op moet letten. Sommige dingen heb ik verwerkt in het bovenstaande andere niet
- SQL injection
- Fouten afhandeling
- Formulier controlle
- Controleren van formulier, daar gebruiken we $_SERVER['REQUEST_METHOD'] voor.
- Naam geving van zowel je formulier velden als je database velden?
- Want, wat heeft woord met user te maken?
- Wat moet het script precies doen? Kan je dat omschrijven?
Gewijzigd op 16/11/2010 18:42:25 door Niels K
- form controle en validatie
- quoten
- script logica
- sql injectie
- het overbodig aamaken van variabelen
kortom, je doet alles fout wat je maar fout kunt doen
ik zie net dat niels je script al redelijkerwijs verbouwd heeft en wel op een zodanige manier dat bijna alle op en aanmerkingen daarin verwerkt zijn
Gewijzigd op 16/11/2010 18:44:54 door Noppes Homeland
Nu heb ik dat allemaal werkend. Ik wil nu ook een aanvraag formulier maken. Dit om met de gebruikersnaam en het geheime woord een nieuwe pass en woord in te kunnen stellen.
mvg dankje voor sneller reactie.
Toevoeging op 16/11/2010 18:52:51:
Dankjewel. Hij werkt echt super!!
Toevoeging op 16/11/2010 18:56:04:
Even buitenom.
Quote:
$password = md5 ($password);
$repeatpassword = md5 ($repeatpassword);
$repeatpassword = md5 ($repeatpassword);
zou dan ook:
Quote:
moet zijn? Ik ben trouwens al heel hard bezig met het lezen van boeken over sql en php. mvg$password = md5 ($_POST['password']);
$repeatpassword = md5 ($_POST['repeatpassword']);
$repeatpassword = md5 ($_POST['repeatpassword']);
je kan in je query direct je $_POST vars neer gooien.. Je maakt nu onnodig variabelen aan wat noppes dus bedoeld:)
Niels Kieviet op 16/11/2010 20:49:21:
je kan in je query direct je $_POST vars neer gooien.. Je maakt nu onnodig variabelen aan wat noppes dus bedoeld:)
Ja kan direct $_POST vars in je query gooien, maar ik zou het persoonlijk afraden. Persoonlijk haal ik alle benodigde data eenmalig en in 1x uit $_POST en zet ze dan in een variable.
Daarna voer ik de nodige controles op die variables uit en uiteindelijk gooi ik ze in de query.
Zoiets:
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
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
<?php
function mysql_quote($str)
{
return sprintf("'%s'", mysql_real_escape_string($str));
}
if(array_key_exists("id", $_POST)
&& array_key_exists("title", $_POST))
{
$id = $_POST["id"]; // eventueel strip_slashes erover.
$title = $_POST["title"]; // eventueel strip_slashes erover.
if(!is_numeric($id))
throw new Exception("'id' moet een getal zijn.");
$id = intval($id);
if(empty($title))
throw new Exception("'title' mag niet leeg zijn.");
$result = mysql_query(sprintf("UPDATE foo SET title = %s WHERE id = %d LIMIT 1",
mysql_quote($title), $id));
// doe iets met $result, zoals een controle of de query gelukt was en of er inderdaad 1 row was aangepast.
}
?>
function mysql_quote($str)
{
return sprintf("'%s'", mysql_real_escape_string($str));
}
if(array_key_exists("id", $_POST)
&& array_key_exists("title", $_POST))
{
$id = $_POST["id"]; // eventueel strip_slashes erover.
$title = $_POST["title"]; // eventueel strip_slashes erover.
if(!is_numeric($id))
throw new Exception("'id' moet een getal zijn.");
$id = intval($id);
if(empty($title))
throw new Exception("'title' mag niet leeg zijn.");
$result = mysql_query(sprintf("UPDATE foo SET title = %s WHERE id = %d LIMIT 1",
mysql_quote($title), $id));
// doe iets met $result, zoals een controle of de query gelukt was en of er inderdaad 1 row was aangepast.
}
?>
Gewijzigd op 16/11/2010 21:01:10 door toby hinloopen
Mvg
zoek gewoon op en probeer. :)
www.phptuts.nl www.w3schools.com www.pfz.nl. etc Kortom veel meer informatie dan dat je het in een boek kan vinden.
hier op phphulp zijn tutorials te vinden maar ook op, Quote:
Ja kan direct $_POST vars in je query gooien, maar ik zou het persoonlijk afraden. Persoonlijk haal ik alle benodigde data eenmalig en in 1x uit $_POST en zet ze dan in een variable.
En dat is nu net niet de bedoeling, je hebt de waarde in de _POST zitten, waarom zal je dan het geheugen extra vervuilen met een variabele waarin dezelfde waarde staat als welke in de _POST zit.
Voor de rest zal ik niet is_numeric gebruiken, die zal merendeels niet strict genoeg zijn voor het uitvoeren van sulks controles
en dan toch nog maar een keer aanhalen dat empty een zinlose functie is.
controles voer je uit met
1. ordinaire vergelijkingen
2. ctype functies
3. preg functies
4. of andere functies zoals inderdaad array_key_exist ed
en nu ziet ik ook nog dat je een intval haalt over iets wat met is_numeric gecontroleerd is, dus daar hebben we gelijk het bewijs dat is_numeric een foute keuze is en dat je daar in feite ctype_digit had moeten gebruiken
en als mysql_quote bedoelt is - en dat is het - om de '' om een string te plaatsen dan ben je in mijn ogen ook niet helemaal goed bezig, die horen in dit geval in de string van het sql statement te staan
Je maakt te veel omwegen om te komen tot een goed resultaat, moeilijk doen als het makkelijker en overzichtelijker kan.