Avatar billede thulesen Nybegynder
31. maj 2006 - 19:08 Der er 10 kommentarer og
1 løsning

PHP udfører kommandoer i forkert rækkefølge..

Hej eksperter..

Jeg har følgende funktion script (forenklet):

function bruger_opret($brugernavn) {
    $result = mysql_query("SELECT id FROM brugere where brugernavn = '$brugernavn'") or die (mysql_error());
    if (mysql_num_rows($result) > 0) return "<font color=\"red\">Brugernavnet er optaget...</font>";
mysql_query("insert into brugere (`brugernavn`) values ('$brugernavn')") or die(mysql_error());
}

Funktionen returnerer altid fejlbeskeden 'brugernavnet er optaget' selvom der ikke findes nogen rækker i databasen hvor brugernavnet er det samme som inputtet i funktionen. Der skulle gerne blive sat en række ind i databasen lige efter den har tjekket om brugernavnet allerede findes. Men dette script gør det bare omvendt: den sætter først rækken ind i databasen, og derefter tjekker den om brugernavnet allerede findes.. Hvilket den jo sjovt nok altid gør.. :(
Er der nogen der har været udsat for noget lignende før? - Kan simpelthen ikke få det til at give mening..
Avatar billede michael_stim Ekspert
31. maj 2006 - 19:25 #1
function bruger_opret($brugernavn) {
$retur="";
$result = mysql_query("SELECT id FROM brugere where brugernavn = '$brugernavn'") or die (mysql_error());
if (mysql_num_rows($result) > 0){
$retur.= "<font color=\"red\">Brugernavnet er optaget...</font>";
}
else{
mysql_query("insert into brugere (`brugernavn`) values ('$brugernavn')") or die(mysql_error());
$retur.="Du er nu oprettet.";
}
return $retur;
}
Avatar billede thulesen Nybegynder
31. maj 2006 - 19:28 #2
Arh.. Sådan kan jeg selvfølgelig prøve at gøre det..
Men jeg troede bare at en funktion automatisk blev stoppet når der kom en return-sætning?
Avatar billede jakobdo Ekspert
31. maj 2006 - 19:57 #3
Thulesen, din funktion ser nu ellers fornuftig ud, så forstår ikke den altid melder Brugernavnet optaget.

Du kan forresten forenkle din sql til:
"SELECT id FROM brugere where brugernavn = '$brugernavn' LIMIT 1"
Hvis du finder en bruger med samme navn, er det nok info til dig.
Avatar billede erikjacobsen Ekspert
31. maj 2006 - 20:42 #4
Hvis jeg må gætte, så kommer du nok til at kalde din funktion 2 gange.
Avatar billede thulesen Nybegynder
31. maj 2006 - 21:26 #5
Hmm.. Jeg har prøvet at gøre som michael_stim har foreslået.. Og den siger både at brugernavnet er optaget, og samtidig med opretter den en bruger.. Men det giver jo ingen mening at den gør begge..! - Det må jo være enten eller.. Og funktionen bliver kun kaldt en gang.. Det er virkeligt underligt.. har brugt flere timer på det, og det burde være så simpelt..
Avatar billede erikjacobsen Ekspert
31. maj 2006 - 21:32 #6
Så har du vel valget at bruge endnu flere timer på det, eller vise os din kode.
Avatar billede olebole Juniormester
31. maj 2006 - 21:51 #7
<ole>

Jeg går udfra, dit brugernavns felt er unikt indekseret. I så fald laver du en insert-query med fejl-undertrykkelse:
    @mysql_query($sql);

Derefter spørger du:
    if (mysql_errno==1062) {
        // Brugernavnet er optaget
    } else {
        // Du er nu oprettet
    }

/mvh
</bole>
Avatar billede olebole Juniormester
31. maj 2006 - 21:52 #8
- ooops ... det er en funktion  :)
    if (mysql_errno()==1062) {
Avatar billede olebole Juniormester
31. maj 2006 - 21:54 #9
- og så burde den naturligvis hedde:

    if (mysql_errno()==1062) {
        // Brugernavnet er optaget
    }
    else if (mysql_errno()==0) {
        // Du er nu oprettet
    } else {
        // Some other shit hit the fan ...!
    }
Avatar billede thulesen Nybegynder
24. september 2008 - 15:53 #10
Så er det vist på tide at afslutte.. :P
Avatar billede jakobdo Ekspert
25. september 2008 - 08:11 #11
Korrekt, tag du bare point selv... :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester