Versio

Update query doet andere dingen

Overzicht Reageren

Pagina: 1 2 volgende »

Pietje akkers

pietje akkers

14/11/2011 17:26:57
Quote Anchor link
Ik heb hier 2 codes, waar ik mijn gebruikers webbased kan veranderen. Nu is het zo, als ik een gebruiker wil veranderen, dan klik ik op submit. En dan kijk in mijn database, en tot mijn grote verbasing, zijn de gegevens van de gebruiker waarmee ik ingelogd ben, verandert in de gegevens van de persoon die ik heb verandert.. Ik snap totaal niet hoe! :O
hier mijn codes

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
60
61
62
63
64
65
66
67
68
69
70
<?php
session_start();

if(isset($_SESSION['ingelogd']))
    {

        if($_SESSION['rechten'] == '1')
        {

            if($_SERVER['REQUEST_METHOD'] == 'POST')
            {

                include 'dbconfig.php';
                
                $username_input = $_POST['username'];
                $password_input = $_POST['password'];
                $level_input = $_POST['rechten'];
                
                $id_check = $_SESSION['id'];
                
                $query = "UPDATE    users
                          SET   user='$username_input',
                                password='$password_input',
                                level_id='$level_input'
                          WHERE id='$id_check'"
;
                
                $result = mysql_query($query)
                          or die(mysql_error());
                
                if($result)
                {

                    header('refresh: 3; url=users.php');
                    echo "Uw wijziging is opgeslagen!";
                }
                
            }

            
            else
            {
                include 'dbconfig.php';

                $id = $_GET['id'];

                $query = "SELECT user,password,level_id FROM users WHERE id=$id";

                $result = @mysql_query($query,$connect)
                or die(mysql_error());

                $username = mysql_result($result,0,'user');
                $password = mysql_result($result,0,'password');
                $level  = mysql_result($result,0,'level_id');
                
                echo "<form action='edituser2.php' method='post'>";
                echo "Gebruikersnaam: <input name='username' type='text' value='".$username."'/> <br />";
                echo "Wachtwoord: <input name='password' type='text' style='margin-left: 21px;' value='".$password."'/> <br />";
                echo "Rechten: <input name='rechten' type='text' style='margin-left: 21px;' value='".$level."'/> <br />";
                echo "<input type='submit' name='submit' value='Wijziging opslaan' style='margin-left: 146px;' />";
                echo "</form>";
            }
        }

        else
        {
            header('refresh: 2; url=home.php');
            echo "U hebt geen rechten voor deze site, u wordt teruggestuurd naar het beginscherm.";
        }
    }

    
    else
    {
        header('refresh: 3; url=login.php');
        echo "U ben niet ingelogd, u wordt doorgestuurd naar de loginpagina.";
    }

?>



EN


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
<?php
session_start();

    if(isset($_SESSION['ingelogd']))
    {

        if($_SESSION['rechten'] == '1')
        {
            

            include 'dbconfig.php';

            $query = "SELECT id,user FROM users";

            $result = @mysql_query($query,$connect)
            or die(mysql_error());

            $aantal = mysql_num_rows($result);

            for($i=0;$i<$aantal;$i++)
            {

            $id = mysql_result($result,$i,"id");
            $user = mysql_result($result,$i,"user");

            echo "<b><a href='edituser2.php?id=$id'>".$user."</a></b><br />";
            }
        }

        
        else
        {
            header('refresh: 2; url=home.php');
            echo "U hebt geen rechten voor deze site, u wordt teruggestuurd naar het beginscherm.";
        }
    }

    
    else
    {
        header('refresh: 3; url=login.php');
        echo "U ben niet ingelogd, u wordt doorgestuurd naar de loginpagina.";
    }


?>


Heeft iemand raad?
Gewijzigd op 14/11/2011 20:22:37 door Pietje akkers
 
PHP hulp

PHP hulp

25/05/2012 16:58:17
Gesponsorde koppelingen:
 
Milo S

Milo S

14/11/2011 17:44:53
Quote Anchor link
Queries hoor je niet zo af te handelen, maak fatsoenlijke afhandeling...
Beveilig je $_GET en $_POST vars voor ze je query in gaan.
Haal variabelen buiten de quotes
en al die andere dingen die al 100000 keer gezegt zijn.

Daarbij vind ik je script opbouw maar een beetje vaag.
 
Pietje akkers

pietje akkers

14/11/2011 17:53:11
Quote Anchor link
Sorry hoor, maar ik ben een beginnende phper, en dan is het goed dat je kritiek geeft, maar dan kun je ook zeggen wat ik beter kan doen!

En verandert dat mijn fout?
 
- SanThe -

- SanThe -

14/11/2011 18:03:52
Quote Anchor link
Ik neem aan dat jouw id in de session staat.

$id_check = $_SESSION['id'];
WHERE id='$id_check'";

Dus is het logisch dat de update op jouw record gebeurt.
 
Pietje akkers

pietje akkers

14/11/2011 19:15:38
Quote Anchor link
Ja klopt. Maar ik weet niet hoe ik het dan moet doen, want nu verander ik inderdaad mijn record. hier maak ik de session aan:

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
session_start();

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    $username = $_POST['username'];
    $password = $_POST['password'];
    
    include 'dbconfig.php';
    
    $query = "SELECT b.rechten,a.id
              FROM users a INNER JOIN level b ON a.level_id = b.id
              WHERE user='$username'
              AND password='$password'"
;
    
    $result = mysql_query($query)
              or die(mysql_error());

              while($row = mysql_fetch_assoc($result))
              {

                $rechten = $row['rechten'];
                $id = $row['id'];
              }

    
    if(mysql_num_rows($result))
    {

       header("refresh: 2; url=home.php");
        
       echo "Welkom terug <b>" .$username. "</b>, u word automatisch doorgestuurd.";
      
       $_SESSION['ingelogd'] = true;
       $_SESSION['username'] = $username;  
       $_SESSION['rechten'] = $rechten;
       $_SESSION['id'] = $id;
    }

    
    else
    {
        echo "Er is iets fout gegaan";
    }
}


else
{
?>

<style type="text/css">
    
    input[type="text"]
    {
        margin-left:15px;
    }
    
    input[type="password"]
    {
        margin-left: 34px;
    }
    
    input[type="submit"]
    {
        margin-left: 213px;
    }
</style>

<form action="login.php" method="post">
    Gebruikersnaam: <input type="text" name="username"/>
    <br />
    Wachtwoord: <input type="password" name="password"/>
    <br />
    <input type="submit" value="Inloggen" name="submit"/>
</form>

<?php
}

?>


hoe zou ik het dan moeten aanpakken?
 
- SanThe -

- SanThe -

14/11/2011 19:25:26
Quote Anchor link
Hoe weet je welke gebruiker je wilt wijzigen?
 
Pietje akkers

pietje akkers

14/11/2011 19:32:33
Quote Anchor link
doordat dit de output is:

echo "<b><a href='edituser2.php?id=$id'>".$user."</a></b><br />";

Als ze op de naam klikken, dan kunnen ze het wijzigen. En dan haal ik het id op:

$id = $_GET['id'];

En dan verwerk ik de gegevens die ze invullen:
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
$username_input = $_POST['username'];
                $password_input = $_POST['password'];
                $level_input = $_POST['rechten'];
                
                $id_check = $_SESSION['id'];
                
                $query = "UPDATE    users
                          SET   user='$username_input',
                                password='$password_input',
                                level_id='$level_input'
                          WHERE id='$id_check'";
                
                $result = mysql_query($query)
                          or die(mysql_error());
 
- SanThe -

- SanThe -

14/11/2011 19:37:31
Quote Anchor link
Probleem: Als je op de link klikt is het formulier niet gepost.
Verder zal je de (gecontroleerde/beveiligde) GET-waarde moeten gebruiken in de WHERE.
 
Pietje akkers

pietje akkers

14/11/2011 19:40:08
Quote Anchor link
Hoe bedoel je, waar is hij niet gepost?

en bedoel je dit met de get?

$id_check = $_GET['id'];

$query = "UPDATE users
SET user='$username_input',
password='$password_input',
level_id='$level_input'
WHERE id='$id_check'";
 
Cake Masher

Cake Masher

14/11/2011 20:30:20
Quote Anchor link
Als ik het zo zie (verbeter me als ik het fout heb) set jij een aantal sessies wanneer een gebruiker inlogt. Zoals de ingelogd sessie, de rechten die hij heeft en volgens mij set jij $_SESSION['id'] met het id van de persoon die inlogt. Wat dus inhoud als jij inlogt, $_SESSION['id'] de id bevat van de account waar jij ingelogt mee bent.

Als we dan gaan kijken naar jouwn code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
            $username_input
= $_POST['username'];
                $password_input = $_POST['password'];
                $level_input = $_POST['rechten'];
                
                $id_check = $_SESSION['id'];
                
                $query = "UPDATE    users
                          SET   user='$username_input',
                                password='$password_input',
                                level_id='$level_input'
                          WHERE id='$id_check'"
;
?>


zie ik hier dat je $_SESSION['id'] bij 'WHERE' hebt staan. Wat dus inhoud (als mijn bovenstaande theorie correct is) dat je daadwerkelijk ook gewoon je eigen account waarmee je bent ingelogt aan het veranderen bent.

Veder, zoals al eerder genoemd, dien je POST en GET gegevens te beveiligen voordat je ze gebruikt in je query.

Dit betekend dat de code als volgt word:

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
<?php
$username_input
    = mysql_real_escape_string ($_POST['username']);
$password_input    = mysql_real_escape_string ($_POST['password']);
$level_input    = mysql_real_escape_string ($_POST['rechten']);
                
$id_check        = mysql_real_escape_string ($_GET['id']);
                
$query = "UPDATE users
         SET    
                 user        = '"
. $username_input . "',
                password    = '"
. $password_input . "',
                level_id    = '"
. $level_input . "'
        WHERE     
                id    = '"
. $id_check . "'";

?>


(verbeter me als ik 't fout heb)
 
Pietje akkers

pietje akkers

14/11/2011 20:34:02
Quote Anchor link
Je hebt helemaal gelijk. Nu heb ik 2 vragen.
ik heb namelijk de $id_check inderdaad ook verandert in : $id_check = mysql_real_escape_string ($_GET['id']);

Maar dan gebeurt er niets meer, dan kan ik het helemaal niet meer wijzigen, tenminste hij slaat niets meer op. Wat nu?

En, wat doet mysql_real_escape_string?

EDIT: Overigens, bedankt voor je uitgebreide reactie, top!
Gewijzigd op 14/11/2011 20:34:25 door pietje akkers
 
Milo S

Milo S

14/11/2011 21:46:35
Quote Anchor link
Wat ik zou gaan doen als ik jou was, is even opnieuw beginnen. Denk eerst uit wat je wilt doen.
Volgens mij wil jij eerst inloggen. Ben je eenmaal ingelogd wil je een gebruiker kunnen kiezen om te wijzigen. Zodra je de keuze hebt gemaakt wil je gegevens aanpassen en vervolgens die gegevens updaten.
Je kunt dit dus heel simpel in deze volgorde doen.

Let op:
- het beveiligen van je query's
- het uit de quotes halen van je variabelen
- het niet onnodig aanmaken van variabelen
- het goed afhandelen van je query's. Dus geen or die();

Voor het gemak als beginnende PHP'er kun je overbodige dingen als header(); nog even achterwegen laten. Zorg eerst dat de basis van je script goed is.
Daarbij geef ik je graag de tip om HTML met single quotes te echoën zodat je niet hoeft te escapen of single quotes in je HTML te gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// Dus
echo '<a href="#">link</a>';
// In plaats van
echo "<a href='#'>link</a>";
// of in plaats van
echo "<a href=\"#\">link</a>";
?>
Gewijzigd op 14/11/2011 21:48:27 door Milo S
 
Pietje akkers

pietje akkers

14/11/2011 21:54:14
Quote Anchor link
Is er ook nog een andere oplossing, ipv opnieuw beginnen? Want volgensmij zijn er vast wel mensen die mij kunnen helpen om deze fout weg te krijgen?
 
Milo S

Milo S

15/11/2011 16:25:55
Quote Anchor link
Die is er wel, maar het is denk sneller als je gewoon even nieuw documentje openend en je jezelf aan die volgorde houd.
Vergeet ook niet een beetje commentaar toe te voegen. Dit is voor een andere developer makkelijk. Dus ook voor ons hier op het forum.
Gewijzigd op 15/11/2011 16:28:33 door Milo S
 
Pietje akkers

pietje akkers

15/11/2011 16:47:01
Quote Anchor link
Ik heb het al voor elkaar ;)
het probleem was inderdaad (SanThe) dat hij niet gepost word, dus moest ik het id ook in het volgende formulier zetten, en toen kon ik het wel ophalen.
 
Milo S

Milo S

15/11/2011 17:00:15
Quote Anchor link
Nu kun je het wel voor elkaar hebben, maar heb je ook nog iets gedaan met al die andere tips? Ze worden niet voor niets gegeven he.
Trouwens je database connectie pagina kun je ook 1 keer invoegen bovenaan je script. Scheelt weer.
Gewijzigd op 15/11/2011 17:01:36 door Milo S
 
Pietje akkers

pietje akkers

15/11/2011 17:52:04
Quote Anchor link
Ja, andere mensen geven goede tips ipv opnieuw beginnen. Dus zo doende hebben ze gezegt (op een ander forum) wat heb probleem was.
 
Milo S

Milo S

15/11/2011 18:48:22
Quote Anchor link
Ik ga je niet rechtstreeks je antwoord geven als er nog zoveel andere fouten inzitten. Maak eerst dat goed doe dan de rest.
Maar blijf dan lekker op dat andere forum als ze daar toch betere tips geven.
Gewijzigd op 15/11/2011 18:48:43 door Milo S
 
Pietje akkers

pietje akkers

15/11/2011 18:56:03
Quote Anchor link
Milo S op 15/11/2011 18:48:22:
Ik ga je niet rechtstreeks je antwoord geven als er nog zoveel andere fouten inzitten. Maak eerst dat goed doe dan de rest.
Maar blijf dan lekker op dat andere forum als ze daar toch betere tips geven.


2 forums is toegestaan ;)
 
Milo S

Milo S

15/11/2011 19:07:11
Quote Anchor link
Zie je ergens in mijn bericht staan dat je hier niet mag zijn? Ik uit alleen maar me mening over het feit dat jij min of meer weergeeft dat hier geen goede tips worden gegeven en daar wel.
Hier word gewoon op een andere manier gewerkt. Als dat andere forum beter bevalt wat tips betreft, dan mag je van mij daar blijven.
 
Pietje akkers

pietje akkers

15/11/2011 19:10:26
Quote Anchor link
Zie je ergens in mijn bericht staan dat hier geen goede tips worden gegeven? Daar werd even de goude tip gegeven. ;) En ik blijf op 2 forums, dat vind ik fijner omdat phphulp.nl zijn voordelen heeft en het andere forum ook ;)
 

Pagina: 1 2 volgende »



Overzicht Reageren