beste manier query in mysqli

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dave schaafsma

dave schaafsma

12/04/2012 10:16:19
Quote Anchor link
Wat is de beste en veiligste query in mysqli ?

Ik was even bezig met leren query's te gaan maken.

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
<?php

$sql_query
=
"INSERT INTO members (id,username,password,email,pemail,birthyear)
 VALUES  (
            '',
            '"
.mysqli_real_escape_string($_POST['username'])."',
            '"
.mysqli_real_escape_string($_POST['password'])."',
            '"
.mysqli_real_escape_string($_POST['email'])."',
            '"
.mysqli_real_escape_string($_POST['pemail'])."',
            '"
.mysqli_real_escape_string($_POST['birthyear'])."',  
          )    
 "
;


?>

 


Doe ik dat zo goed in msqli of niet ? ,
Gewijzigd op 12/04/2012 10:22:33 door Dave schaafsma
 
PHP hulp

PHP hulp

19/01/2022 08:19:10
 
- Ariën -
Beheerder

- Ariën -

12/04/2012 10:19:32
Quote Anchor link
Of je hebt een Italiaanse/Spaanse versie van MySQL, of je maakt een typfout met INSERTO ;-)...

Verder ziet de query er wel netjes en veilig uit....
Gewijzigd op 12/04/2012 10:19:50 door - Ariën -
 
Wouter J

Wouter J

12/04/2012 10:22:23
Quote Anchor link
Het is niet de veiligste en handigste methode. Beter kun je gebruik maken van prepared statements. Voorbeeldje:
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
<?php
$iQuery
= "
INSERT INTO
    members
    (
        username,
        password,
        email,
        pemail,
        birthyear
    )
VALUES
(
    ?,
    ?,
    ?,
    ?,
    ?
)
"
;

$stmt = $mysqli->prepare($iQuery);
$stmt->bind_param('ssssi', $_POST['username'], $_POST['password'], $_POST['email'], $_POST['pemail'], (int) $_POST['birthyear']);
if (!$stmt->execute()) {
    echo 'Some error while executing the query: '.$stmt->error;
}

$stmt->close();
?>
 
Dave schaafsma

dave schaafsma

12/04/2012 10:24:26
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
<?php
//## Connection
 error_reporting (E_ALL && E_STRICT);
    
    $mysqli = new mysqli('host', 'gebruikersnaam', 'wachtwoord', 'database');
        if (mysqli_connect_errno())
            {

                printf("No connection avaible");
            }

//## Register


if (isset ($_POST['submit'])) {
  
  //#functies  
  
  
  
      
}



$iQuery = "
INSERT INTO
    members
    (
        username,
        password,
        email,
        pemail,
        birthyear
    )
VALUES
(
    '',
    '"
.mysqli_real_escape_string($_POST['username'])."',
    '"
.mysqli_real_escape_string($_POST['password'])."',
    '"
.mysqli_real_escape_string($_POST['email'])."',
    '"
.mysqli_real_escape_string($_POST['pemail'])."',
    '"
.mysqli_real_escape_string($_POST['birthyear']).",
)
"
;

    $stmt = $mysqli->prepare($iQuery);
    $stmt->bind_param('ssssi', $_POST['username'], $_POST['password'], $_POST['email'], $_POST['pmail'], (int) $_POST['birthyear']);

      if(!$stmt->execute()) {
            echo 'some error while executing the query: ' .$stmt->error;  
        }

    
    $stmt->close();
?>



Maar nu stop hij gewoon de wachtwoorden zoals de gebruiker intypt in de database.
Als dit zo zou zijn hoe en wat is de beste manier van de wachtwoorden te versleutelen met md5 of salt , ik heb eigenlijk geen idee wat nou het beste is om dat te doen.

Weet iemand ook een goeie tutorial over php functies om de inputs te controleren ? ,
Gewijzigd op 12/04/2012 11:53:02 door dave schaafsma
 
Reshad F

Reshad F

12/04/2012 11:54:43
Quote Anchor link
je kan voor het versleutelen salt & pepper gebruiken, md5 is een beetje teveel achterhaald. verder is er een leuke class door iemand gepost genaamd Form Validation Class, misschien kan je dat gebruiken?

die kan je hier vinden
 
Erwin H

Erwin H

12/04/2012 12:08:55
Quote Anchor link
Uhm Dave, die vraagtekens in Wouter zijn script staan er met een reden. Als je parameters gebruikt moet je wel placemarkers hebben en dat zijn die vraagtekens. Zoals jij het nu doet gaat het dus niet werken. Bekijk Wouter zijn voorbeeld nog eens goed.
 
Dave schaafsma

dave schaafsma

12/04/2012 12:20:37
Quote Anchor link
Volgens mij heb ik het nog niet helemaal door wat ik nou fout doe ,wat doen de place makers precies ?
 
Erwin H

Erwin H

12/04/2012 12:28:46
Quote Anchor link
Als je met parameters werkt dan vertel je de database driver eigenlijk alleen het SQL statement, maar je geeft op bepaalde plekken nog geen waarde mee. Je geeft alleen de locatie mee waar je later een waarde zult invoegen. Zie het als een functie waarin je een variabele meegeeft. Je schrijft de hele functie al, maar je zegt nog niet met welke waarde het uiteindelijk zal worden uitgevoerd.
De database driver zal dan het SQL statement voorbereiden, maar voert het nog niet uit. Eerst geef je database driver de waardes (via de functie bind_param) en dan geef je de opdrachte het uit te voeren (met execute).

Het nut hiervan is tweeledig. In de eerste plaats zal de database driver er zorg voor dragen dat de waardes veilig worden ingevuld. Er kan geen SQL injectie plaats vinden, want wat er ook in de waarde staat (zelfs als is het een heel SQL statement), het geheel zal in de kolom in je tabel geplaatst worden.
Ten tweede geeft dit je ook de mogelijkheid om meerdere records snel achter elkaar in te voeren. Je prepared het statement een maal en dan geef je meerdere keren de bind_param en execute opdracht, elke keer met andere waardes.
 
Dave schaafsma

dave schaafsma

12/04/2012 12:54:47
Quote Anchor link
Oke bedankt zoek het even uit , het is wel erg lastig hoor !

Ben nu echt even helemaal de kluts kwijt iemand die mij opweg kan helpen doormidden van een voorbeeld ? , wat moet er met die vraagtekens gebeuren ik snap dat nog niet helemaal ?
Gewijzigd op 12/04/2012 13:00:12 door dave schaafsma
 
Erwin H

Erwin H

12/04/2012 13:16:13
Quote Anchor link
Het voorbeeld van Wouter is compleet.... dus wat heb je nog meer nodig?
 
Dave schaafsma

dave schaafsma

12/04/2012 13:39:29
Quote Anchor link
Dus dan vervalt gewoon het gehele mysqli_real_escape_string ? ,
Heb nog nooit gezien dat je aleen vraagtekens moest doen.

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
<?php
//## Connection
 error_reporting (E_ALL && E_STRICT);
    
    $dc = new mysqli('host', 'gebruikersnaam', 'wachtwoord', 'database');
        if (mysqli_connect_errno())
            {

                printf("No connection avaible");
            }

//## Register






$iQuery = "
INSERT INTO
    members
    (
        username,
        password,
        email,
        pemail,
        birthyear
    )
VALUES
(
    ?,
    ?,
    ?,
    ?,
    ?,
    ?
)
"
;

    $stmt = $mysqli->prepare($iQuery);
    $stmt->bind_param('ssssi', $_POST['username'], $_POST['password'], $_POST['email'], $_POST['pmail'], (int) $_POST['birthyear']);

      if(!$stmt->execute()) {
            echo 'some error while executing the query: ' .$stmt->error;  
        }

    
    $stmt->close();
?>


BEgin wel al vooruitgang te maken.
Gewijzigd op 12/04/2012 13:43:38 door dave schaafsma
 



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.