Versio

Fouten/tips

Overzicht Reageren

Ocirina Ocirina

Ocirina Ocirina

16/11/2010 18:26:30
Quote Anchor link
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
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
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!";
 }


}




?>

Quote:
<html>
<center>
<p>
<form action='vraag112.php' method='POST'>
<table>
<tr>
<td>
Gebruikersnaam:
</td>
<td>
<input type='text' name='user' value='
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $user ?>
'>
</td>
</tr>
<tr>
<td>
Geheime woord:
</td>
<td>
<input type='text' name='woord' value='
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $woord ?>
'>
</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='
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $nieuwwoord ?>
'>
</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
 
PHP hulp

PHP hulp

24/05/2012 17:46:56
Gesponsorde koppelingen:
 
Niels Kieviet
Beheerder

Niels Kieviet

16/11/2010 18:42:10
Quote Anchor link
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
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';
        }
    }
}


?>



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 Kieviet
 
Noppes Homeland

Noppes Homeland

16/11/2010 18:43:13
Quote Anchor link
En waarom lees jij dan niet eerst wat beginners handleidingen over:

- 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
 
Ocirina Ocirina

Ocirina Ocirina

16/11/2010 18:46:15
Quote Anchor link
Kijk ik heb een login gemaakt, met registreer pagina.
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);

zou dan ook:
Quote:
$password = md5 ($_POST['password']);
$repeatpassword = md5 ($_POST['repeatpassword']);
moet zijn? Ik ben trouwens al heel hard bezig met het lezen van boeken over sql en php. mvg
 
Niels Kieviet
Beheerder

Niels Kieviet

16/11/2010 20:49:21
Quote Anchor link
je kan in je query direct je $_POST vars neer gooien.. Je maakt nu onnodig variabelen aan wat noppes dus bedoeld:)
 
Toby hinloopen

toby hinloopen

16/11/2010 20:59:05
Quote Anchor link
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)
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
<?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.
}
?>
Gewijzigd op 16/11/2010 21:01:10 door toby hinloopen
 
Ocirina Ocirina

Ocirina Ocirina

16/11/2010 21:05:59
Quote Anchor link
Oke bedankt, maar zouden jullie boeken aanraden om goed php te leren of meer web tuts?
Mvg
 
PHP Jasper

PHP Jasper

16/11/2010 21:06:29
Quote Anchor link
zoek gewoon op en probeer. :)
 
Niels Kieviet
Beheerder

Niels Kieviet

16/11/2010 21:10:22
Quote Anchor link
hier op phphulp zijn tutorials te vinden maar ook op, www.phptuts.nl www.w3schools.com www.pfz.nl. etc Kortom veel meer informatie dan dat je het in een boek kan vinden.
 
Noppes Homeland

Noppes Homeland

16/11/2010 21:13:10
Quote Anchor link
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.
 



Overzicht Reageren

Get Adobe Flash player