[MySQL]UPDATE doet INSERT

Pagina: 1
Acties:
  • 196 views sinds 30-01-2008
  • Reageer

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 02-05 22:17
Ik heb een website met daarin een gebruikers database waarmee mensen kunnen inloggen e.d.
Nou wil ik natuurlijk ook dat mensen hun gegevens kunnen wijzigen. Ik gebruik daarvoor deze code
code:
1
2
$sql = "UPDATE users SET password = '".$md5password."' WHERE id = '".$_SESSION['user_id']."'";
mysql_query($sql) or die ("fout in query");

Wat er dan gebeurt is dat er niks geupdate word, maar er word gewoon een nieuwe user aangemaakt zonder naam. Met in dit geval alleen een password.
Ik heb bovenin de pagina een testje of m'n sessie wel loopt, en die werkt goed. Je moet namelijk uiteraard eerst ingelogd zijn om je gegevens te veranderen.

Hij geeft verder ook geen foutmeldingen.

Ik gebruik MySQL 4.0

Hallo met Tim


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Wat is de query die uiteindelijk word uitgevoerd?

Programmer - an organism that turns coffee into software.


  • ripperke
  • Registratie: Augustus 2003
  • Laatst online: 15-10-2025

ripperke

w00t!

je hebt een veld "password"; dit is een mysql functie en mag dus niet gebruikt worden volgens mij....

If TCP/IP handshaking was less formal, perhaps SYN/ACK would be YO/WASSUP


Verwijderd

is je id een character ja?

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 02-05 22:17
Ik heb in m'n aanmeldscript ook password, en dat gaat prima.
is je id een character ja?
Dunno wat je bedoeld, maar mijn id ($_SESSION['user_id']) is een getalletje(INT). 1 in het geval waar ik mee test.

[ Voor 6% gewijzigd door Pkunk op 24-06-2005 17:13 ]

Hallo met Tim


Verwijderd

Dunno wat je bedoeld, maar mijn id ($_SESSION['user_id']) is een getalletje. 1 in het geval waar ik mee test.
omdat je expleciet id='1' gebruikt

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 02-05 22:17
Verwijderd schreef op vrijdag 24 juni 2005 @ 17:05:
[...]
omdat je expleciet id='1' gebruikt
Dat doe niet. Ik heb er nu 3 gebruikers in staan en bij elk van die gebruikers hetzelfde verhaal. Maar wat is de achterliggende gedachte daarachter?

Hallo met Tim


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Timlog schreef op vrijdag 24 juni 2005 @ 17:04:
Ik heb in m'n aanmeldscript ook password, en dat gaat prima.
Probeer dan toch maar eens `password` (met backticks eromheen dus) te gebruiken in plaats van gewoon password. :)
Timlog schreef op vrijdag 24 juni 2005 @ 17:08:
Dat doe niet. Ik heb er nu 3 gebruikers in staan en bij elk van die gebruikers hetzelfde verhaal. Maar wat is de achterliggende gedachte daarachter?
Dat doe je wel, maar in principe maakt dat niet uit. Je vergelijkt nu een id-veld met waarschijnlijk daarin een integer met een string. Als er 1 in een veld staat, dan doe je deze vergelijking: 1 = '1'. MySQL is dan nog wel zo aardig om die string te casten naar een int, maar eigenlijk is het niet zo netjes. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Dat doe niet. Ik heb er nu 3 gebruikers in staan en bij elk van die gebruikers hetzelfde verhaal. Maar wat is de achterliggende gedachte daarachter?
Sorrie, ik ben onduidelijk bezig ... het is vrijdag!!

in je satatement zet je die id tussen quotes .. alsof je wil dat de update uitgevoerd moet worden op de rij waarbij het veld id de string [een nummer karakter] bevat..

maar ik zit dus echt te slapen want in een normale mysql config zou hij dat gewoon vanzelf moeten typecasten

Verwijderd

Overigens is password GEEN reserved word in mySql dus dat moet je gewoon zo kunnen gebruiken (heb ik net zelf ook even getest)

http://dev.mysql.com/doc/mysql/en/reserved-words.html

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 02-05 22:17
-NMe- schreef op vrijdag 24 juni 2005 @ 17:15:
[...]

Probeer dan toch maar eens `password` (met backticks eromheen dus) te gebruiken in plaats van gewoon password. :)
Geprobeert. Hielp niet. Ik heb overigens wel meer velden dan alleen password hoor.
-NMe- schreef op vrijdag 24 juni 2005 @ 17:15:

Dat doe je wel, maar in principe maakt dat niet uit. Je vergelijkt nu een id-veld met waarschijnlijk daarin een integer met een string. Als er 1 in een veld staat, dan doe je deze vergelijking: 1 = '1'. MySQL is dan nog wel zo aardig om die string te casten naar een int, maar eigenlijk is het niet zo netjes. :)
achzo.. "Ignorance is a bliss" :) Maar het werkt nog steeds niet overigens
Modbreak:Schoppen is pas toegestaan als er 24 uur lang geen replies in je topic zijn geweest. Niet iedereen is 24/7 online, zeker niet nu het zulk warm weer is. Heb dus gewoon even geduld.

[ Voor 18% gewijzigd door NMe op 24-06-2005 18:55 ]

Hallo met Tim


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:36
Sedert wanneer kan een UPDATE query ervoor zorgen dat je een nieuwe rij krijgt ?

https://fgheysels.github.io/


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

whoami schreef op vrijdag 24 juni 2005 @ 20:07:
Sedert wanneer kan een UPDATE query ervoor zorgen dat je een nieuwe rij krijgt ?
Heel goeie vraag. Volgens mij is dat gewoon niet mogelijk.

@TS: weet je heel zeker dat dit de code is die uitgevoerd wordt? Staat er niet in dezelfde file nog ergens een insert in een andere vertakking? Zo ja: weet je 100% zeker dat deze query wordt uitgevoerd en niet die insert-query?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Kan je niet wat meer code posten? Deze query ziet er namelijk valid uit en kan niet misgaan, mits je de goede tabel- en kolomnamen hebt gebruikt. Misschien zou daarom wat meer code verhelderend zijn.

Hoe weet je trouwens dat er niet geüpdate wordt? Het kan ook zijn dat de variabele md5password niet goed gevuld wordt. Van een spatie bijvoorbeeld wordt ook gewoon een md5 gemaakt. Vergelijk de md5 is met elkaar. Kan ook zijn dat md5password zijn initialisatiewaarde behoudt.

[ Voor 42% gewijzigd door Verwijderd op 25-06-2005 09:01 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Timlog schreef op vrijdag 24 juni 2005 @ 16:58:
Wat er dan gebeurt is dat er niks geupdate word, maar er word gewoon een nieuwe user aangemaakt zonder naam. Met in dit geval alleen een password.
MySQL doet rare dingen af en toe, maar hier geloof ik vooralsnog niks van.

Of je controleert niet goed of er inderdaad wat ge-update is en ziet dat aan voor een nieuwe insert, of je hebt ergens domweg een insert/replace waarvan je dacht dat ie niet uitgevoerd werd ofzo.

Kijk na je update-query ook nog even wat mysql_affected_rows teruggeeft.
Ik gebruik MySQL 4.0
Ik neem aan dat je een recente versie daarvan gebruikt?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 14:03

curry684

left part of the evil twins

ACM schreef op zaterdag 25 juni 2005 @ 09:45:
[...]

MySQL doet rare dingen af en toe, maar hier geloof ik vooralsnog niks van.
Zou wel gaaf zijn op zich, ik heb best wel eens gezocht naar een INSERT-if-cannot-UPDATE functie, maar ik kan me inderdaad niet herinneren 'm ooit in een ANSI-standaard of DBMS teruggevonden te hebben :Y)

Professionele website nodig?


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

curry684 schreef op zaterdag 25 juni 2005 @ 10:15:
Zou wel gaaf zijn op zich, ik heb best wel eens gezocht naar een INSERT-if-cannot-UPDATE functie, maar ik kan me inderdaad niet herinneren 'm ooit in een ANSI-standaard of DBMS teruggevonden te hebben :Y)
MySQL's replace doet iets wat er op lijkt, maar echt handig vind ik hem niet en het is sowieso geen ANSI. 't Nadeel is dat je alleen een single-row-update kan voorzien van een insert, en daarom kan ik me wel voorstellen dat ze d'r expres geen speciale functie voor gemaakt hebben.

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 02-05 22:17
dan zal ik maar even de hele lap code posten :)

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

connectdb(); //verbinden

if(FALSE!==($rDbConn=connectdb()))
{
    if(check_login($rDbConn))
    {
        include('template.php');
    }
    
    else
    {
        include('template2.php');
    }

    //de rest...
    

    mysql_close($rDbConn);
}

connectdb(); 

$query =  mysql_query("SELECT * FROM users WHERE id like '".$_SESSION['user_id']."' ");
                    while ($list=mysql_fetch_array($query))
                        {
                        echo $_SESSION['user_id'];
                        echo "Ingelogd: ";
                        echo $list['username'];
                        }

$md5password = md5($_POST["password"]);
$username = $_POST["username"];
$Voornaam = $_POST["Voornaam"];
$Achternaam = $_POST["Achternaam"];
$Huisnummer = $_POST["Huisnummer"];
$Telefoon = $_POST["Telefoon"];
$Postcode = $_POST["Postcode"];

    // controle of de gebruikers naam al bestaat
    $sql = "SELECT * FROM users WHERE username LIKE '".$username."' ORDER BY id DESC";    
    $resultaat = mysql_query($sql) or die(mysql_error());    

    if ($row != mysql_fetch_object($resultaat)) {    
        echo "sorry deze gebruikers naam bestaat al";    
    }    
    else {    
        
        /*Maak SQL-query */     
       $sql = "UPDATE users SET 'password' = '".$md5password."' WHERE id = '".$_SESSION['user_id']."'";
       mysql_query($sql) or die ("fout in query");   

        // bericht weergeven
        echo "succesvol toegevoegd<br><br>";    
        echo "<a href=\"login.php\">inloggen</a>";    
    }    
}     
else {
?>
<link href="style.css" rel="stylesheet" type="text/css">
<form action="aanmelden.php" method="post">
    <table class="style1">
    <tr><td>password:</td><td><input type="Password" name="password"></td></tr>
    <tr><td>voornaam:</td><td><input type="Text" name="Voornaam"></td></tr>
    <tr><td>Achternaam:</td><td><input type="Password" name="Achternaam"></td></tr>
    <tr><td>Postcode:</td><td><input type="Password" name="Postcode"></td></tr>
    <tr><td>Huisnummer:</td><td><input type="Password" name="Huisnummer"></td></tr>
    <tr><td>Telefoon:</td><td><input type="Password" name="Telefoon"></td></tr>
    </table>
    <input type="image" src="aanmelden.gif">
</form>

<?php } // else einde
?>
<a href="JavaScript:history.back();">back</a>


Ik begrijp er geen zak van.. lijkt allemaal te kloppen

[ Voor 49% gewijzigd door Pkunk op 25-06-2005 11:59 ]

Hallo met Tim


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Deze code suggereert dat je een nieuwe gebruiker aan zou willen maken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$md5password = md5($_POST["password"]);
$username = $_POST["username"];
$Voornaam = $_POST["Voornaam"];
$Achternaam = $_POST["Achternaam"];
$Huisnummer = $_POST["Huisnummer"];
$Telefoon = $_POST["Telefoon"];
$Postcode = $_POST["Postcode"];

    // controle of de gebruikers naam al bestaat
    $sql = "SELECT * FROM users WHERE username LIKE '".$username."' ORDER BY id DESC";    
    $resultaat = mysql_query($sql) or die(mysql_error());    

    if ($row != mysql_fetch_object($resultaat)) {    
        echo "sorry deze gebruikers naam bestaat al";    
    }

Maar uiteindelijk doe je geen insert, slechts een update. Dus dat kan het niet zijn.
Ik begrijp er geen zak van.. lijkt allemaal te kloppen
Je hebt nog steeds niet gezegd hoe je controleert dat het een insert ipv een update is. Wellicht zit het bijna-lege record al in je DB voor je aan deze code toekomt en lijkt het dus een insert, maar was het dat niet. Wellicht doet je check_login-functie zoiets, het kan allemaal.

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 02-05 22:17
ACM schreef op zaterdag 25 juni 2005 @ 12:01:
Je hebt nog steeds niet gezegd hoe je controleert dat het een insert ipv een update is. Wellicht zit het bijna-lege record al in je DB voor je aan deze code toekomt en lijkt het dus een insert, maar was het dat niet. Wellicht doet je check_login-functie zoiets, het kan allemaal.
Ik kijk gewoon in phpmyadmin. Dan staat daar een nieuwe gebruiker met automatisch aangemaakte id en de velden die ik 'geupdate' heb..
Als mijn login functie zoiets zou doen zou ik dat ook wel hebben gemerkt. Daar kanhet probleem niet liggen.

Hallo met Tim


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
curry684 schreef op zaterdag 25 juni 2005 @ 10:15:
[...]

Zou wel gaaf zijn op zich, ik heb best wel eens gezocht naar een INSERT-if-cannot-UPDATE functie, maar ik kan me inderdaad niet herinneren 'm ooit in een ANSI-standaard of DBMS teruggevonden te hebben :Y)
Sinds SQL:2003 kent SQL een <merge statement> (ISO/IEC 9075-2:2003 14.9).
code:
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
<merge statement> ::=
    MERGE INTO <target table> [ [ AS ] <merge correlation name> ]
    USING <table reference>
    ON <search condition> <merge operation specification>

<merge correlation name> ::= <correlation name>

<merge operation specification> ::= <merge when clause>...

<merge when clause> ::=
    <merge when matched clause>
  | <merge when not matched clause>

<merge when matched clause> ::=
    WHEN MATCHED THEN <merge update specification>

<merge when not matched clause> ::=
    WHEN NOT MATCHED THEN <merge insert specification>

<merge update specification> ::= UPDATE SET <set clause list>

<merge insert specification> ::=
    INSERT [ <left paren> <insert column list> <right paren> ]
    [ <override clause> ]
    VALUES <merge insert value list>

etc.

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

heb je al geprobeert om vlak voordat je een query uitvoert een echo $sql; te plaatsen, zo kan je iig zien of niet per-ongeluk de verkeerde qiuery uitgevoerd wordt, of dat er meer queries worden uitgevoert dan je denkt....

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

En selecteer de gegevens van het record direct voor en direct na de update en geef ze weer om te zien of het inderdaad die update is.

Verwijderd

Timlog schreef op zaterdag 25 juni 2005 @ 11:54:
dan zal ik maar even de hele lap code posten :)
[...]
Ben er even snel overheen gegaan, dus misschien kloppen niet al mijn opmerkingen?

Waarom connectdb() je twee maal aan het begin?
Wat doet de check_login() functie precies?
Je closed daarna ook weer een mysql connectie om die vervolgens meteen weer te openen. Dat is dan al de derde keer. Kun je de connectie niet gewoon open houden?
Even terzijde: let ook goed op je input checking voor malicious user input. Je script zou namelijk behoorlijk open kunnen staan voor SQL injection...

Je doet vervolgens een query die de user info ophaalt, maar je gebruikt daarvoor een LIKE functie? Kun je niet gewoon rechtstreeks vergelijken (is gelijk teken)? Of probeer je echt meerdere users te laten zien met bv. wildcards in je query? Je hebt namelijk daarna inderdaad een while-loop om alle matches te printen. Je print echter de user_id uit de sessie variable (dus met eventuele wildcards) en niet degene die uit de query naar voren komt? En zouden alle users uit de 'users' tabel met matchende IDs ook echt ingelogd zijn?

Vervolgens maak je een serie variablen uit de post-data die de eerste keer dat je naar je pagina gaat leeg zullen zijn, dit is waarschijnlijk het moment dat je niet-bestaande gebruiker gecreeerd wordt. Ik neem aan dat je moet controleren of het formulier al ingestuurd is, of nog niet (tenzij de code niet van 'aanmelden.php' is?

Overigens kunnen je niet-bestaande POST variablen hier dus 'unset' variablen op leveren, en die mag je helemaal niet in een query stoppen (wordt wellicht NULL, maar als je dat tussen aanhalingstekens zet is dat voor SQL weer geen NULL, maar gewoon een string). Kijk eens of je het warning level bovenaan je script kan opvoeren om meer errors en warnings te krijgen van PHP (zie http://nl3.php.net/error_reporting )

Let er ook op dat je variablen soms met een hoofdletter begint, in verband met case sensitivity. Gebruikelijk is om alles lower-case te doen om dit soort lullige problemen te voorkomen.

Om te zien of een naam al bestaat doe je weer een LIKE query, maar waarom heb je daar een ORDER BY clause in zitten? Lijkt me toch niet nodig?

Vervolgens haal je het resultaat op, en vergelijkt dit met een (niet bestaande?) $row variable? Die check zal dus wel altijd FALSE zijn, waardoor de UPDATE query uitgevoerd gaat worden.

Als laatste vroeg ik me af waarom bijna al je velden van het type 'password' zijn (achternaam, postcode, etc.)

  • bakkerl
  • Registratie: Augustus 2001
  • Laatst online: 18-04 21:45

bakkerl

Let there be light.

Laat mysql eens een log aanmaken. Dit doe je door in de my.cnf een regel toe te voegen:
log = /var/log/mysql.log

Zorg dat er op dat moment *niets* met de database gebeurt en test je applicatie dan. Je log file laat dan precies zien welke queries (en connectes en disconnectes en de rest) er allemaal gedaan zijn.

  • Bananeman
  • Registratie: Juli 2000
  • Niet online
Er zal wel iets in één van de geïnclude files zitten ofzo; misschien wat debug-code?

Motor-forum.nl


  • Gwaihir
  • Registratie: December 2002
  • Niet online
Timlog schreef op zaterdag 25 juni 2005 @ 12:16:
[...]

Ik kijk gewoon in phpmyadmin. Dan staat daar een nieuwe gebruiker met automatisch aangemaakte id en de velden die ik 'geupdate' heb..
Ehm? Dus niet eens met de ID die je via de WHERE clause aan het meegeven zou moeten zijn?

Heet het "user_id" dan wel exact zo in het $_SESSION array? Gebruik je daar niet net effe wat anders, zoals "usr_id", "gebruiker_id", o.i.d.?

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 02-05 22:17
Je hebt nog steeds niet gezegd hoe je controleert dat het een insert ipv een update is. Wellicht zit het bijna-lege record al in je DB voor je aan deze code toekomt en lijkt het dus een insert, maar was het dat niet. Wellicht doet je check_login-functie zoiets, het kan allemaal.
Birdie schreef op zaterdag 25 juni 2005 @ 16:42:
[...]

Ehm? Dus niet eens met de ID die je via de WHERE clause aan het meegeven zou moeten zijn?

Heet het "user_id" dan wel exact zo in het $_SESSION array? Gebruik je daar niet net effe wat anders, zoals "usr_id", "gebruiker_id", o.i.d.?
Ik geloof dat ik niet helemaal begrijp wat jullie bedoelen... De id die ik gebruik word wel geprint op die pagina. Het hele WHERE gebeuren is niet van toepassen en kan ik er eigelijk ook wel uitgooien.

Hallo met Tim


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Timlog schreef op zaterdag 25 juni 2005 @ 18:37:
Ik geloof dat ik niet helemaal begrijp wat jullie bedoelen... De id die ik gebruik word wel geprint op die pagina. Het hele WHERE gebeuren is niet van toepassen en kan ik er eigelijk ook wel uitgooien.
Ok, het is heel simpel:
MySQL doet geen insert bij wat voor omstandigheden ook met een update. Als jij dat wel ervaart heb je ofwel een bug in MySQL ontdekt of, en dat geef ik een hogere kans, in je eigen code.

Om erachter te komen of dat ene update-statement een insert doet moet je voor je het update statement uitvoert alle relevante records (degene die dus aan de where-clause van de update voldoen) opvragen en bekijken hoe ze er dan uitzien. En er direct na.
En dan dus niet via phpmyadmin ofzo, maar direct in de code die je hier toont.

Kortom, doe zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$sql = "UPDATE users SET 'password' = '".$md5password."' WHERE id = '".$_SESSION['user_id']."'";

echo "Voor de query: " . $sql . "\n";
$select = "SELECT * FROM users WHERE id = '". $_SESSION['user_id'] ."' ";
$res = mysql_query($select);
while($row = mysql_fetch_assoc($res))
{
   print_r($row);
}

mysql_query($sql) or die ("fout in query");   

echo "Na de query\n";
$res = mysql_query($select);
while($row = mysql_fetch_assoc($res))
{
   print_r($row);
}

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
MySQL heeft btw wel de ON DUPLICATE KEY clause voor een insert.

code:
1
2
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
    -> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Gwaihir
  • Registratie: December 2002
  • Niet online
Timlog schreef op zaterdag 25 juni 2005 @ 18:37:Ik geloof dat ik niet helemaal begrijp wat jullie bedoelen...
Ok.. bij deze dan ook nog effe een low-tech inleiding op ACM hierboven:

De regels code die je hier hebt laten zien (met de UPDATE) doen zeker weten niet wat jij beschrijft. Je zult verder moeten zoeken; ergens in het script inclusief alle includes zal een stukje zitten met een INSERT die je probleem veroorzaakt.
Timlog schreef op zaterdag 25 juni 2005 @ 18:37:Het hele WHERE gebeuren is niet van toepassen en kan ik er eigelijk ook wel uitgooien.
Ehm..? Ik kan me geen UPDATE zonder WHERE clausule voorstellen. Hoe weet MySQL dan welke regel(s) hij moet updaten? (Hij doet dan neem ik aan alle of geen.)

  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 05-05 21:55

Guldan

Thee-Nerd

Het kan ook aan mij liggen maar in je code.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  // controle of de gebruikers naam al bestaat
    $sql = "SELECT * FROM users WHERE username LIKE '".$username."' ORDER BY id DESC";    
    $resultaat = mysql_query($sql) or die(mysql_error());    

    if ($row != mysql_fetch_object($resultaat)) {    
        echo "sorry deze gebruikers naam bestaat al";    
    }    
    else {    
        
        /*Maak SQL-query */     
       $sql = "UPDATE users SET 'password' = '".$md5password."' WHERE id = '".$_SESSION['user_id']."'";
       mysql_query($sql) or die ("fout in query");   

        // bericht weergeven
        echo "succesvol toegevoegd<br><br>";    
        echo "<a href=\"login.php\">inloggen</a>";    
    }


zolang er dus een dubbele user is met dezelfde naam dan geeft de code een fout en als de toegevoegde user nieuw is dan voert hij een update query uit. Dat klopt niet echt toch? dat zou toch een INSERT moeten worden omdat de gegevens aan de database toegevoegd moeten worden.

Ook zie ik een Else staan maar geen if om aan te geven dat er iets gepost word. Dat zou je kunnen doen door aan het formulier veld een hidden veld toe te voegen met
[html]
<input type='hidden' name='submit'>
[/html]

en daar dan op te checken met
PHP:
1
2
3
4
5
6
if(isset($_POST['submit']))
{
//Er is op de OK knop gedrukt van het formulier
}else{
//Geef de html pagina weer
}


Ook kan je op een makkelijker manier checken of een user al bestaat.
door dit:
PHP:
1
2
3
 if ($row != mysql_fetch_object($resultaat)) {    
        echo "sorry deze gebruikers naam bestaat al";    
    }


te vervangen door

PHP:
1
2
3
4
5
6
7
8
 $aantal = mysql_num_rows($resultaat);
if($aantal >0)
{
echo "Deze naam bestaat al";
}else{
//deze naam bestaat niet..
//voeg de user toe aan de database m.b.v een insert query
}

Ik hoop dat je hier wat aan hebt iig. Als je het niet snapt vraag maar raak :). Zoals je de code nu post is de enige fout die ik kan vinden de fout met de update in plaats van een insert. Andere dingen zijn tips :)

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?


  • BreeeZe
  • Registratie: Februari 2000
  • Laatst online: 09:17

BreeeZe

Devt

Guldan schreef op dinsdag 28 juni 2005 @ 13:18:

zolang er dus een dubbele user is met dezelfde naam dan geeft de code een fout en als de toegevoegde user nieuw is dan voert hij een update query uit. Dat klopt niet echt toch? dat zou toch een INSERT moeten worden omdat de gegevens aan de database toegevoegd moeten worden.
Ik denk dat je bij hem je username kan veranderen in je prefs, en dat daarom die dubbele username check er in zit.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 14:03

curry684

left part of the evil twins

Birdie schreef op dinsdag 28 juni 2005 @ 13:02:
[...]

Ehm..? Ik kan me geen UPDATE zonder WHERE clausule voorstellen. Hoe weet MySQL dan welke regel(s) hij moet updaten? (Hij doet dan neem ik aan alle of geen.)
Is logischerwijs 'alle' ja, weet chem alles van O-)

[ Voor 4% gewijzigd door curry684 op 28-06-2005 14:36 ]

Professionele website nodig?

Pagina: 1