Avatar billede kimols1 Nybegynder
23. november 2006 - 20:09 Der er 15 kommentarer og
1 løsning

Chekke om brugernavn eksitere i databasen

jeg har lavet en opret-bruger-ting på mit site med php & mysql. hvordan laver jeg nemmest et scriptn, der chekker om brugernavnet eksitere i databasen.
Avatar billede udvikler Nybegynder
23. november 2006 - 20:12 #1
$query = mysql_query("SELECT * FROM database WHERE brugernavn = '$bruger' AND kodeord = '$kode'") Or die(mysql_error());

if (!mysql_result($query,0)) {
    echo "brugeren findes ikke";
}else{
    echo "brugeren findes";
}
Avatar billede webstuff Nybegynder
23. november 2006 - 20:14 #2
Når du brugeren opretter sig får du højst sansynligvis fat i det sådan her:

$brugernavn = $_POST["brugernavn"];

Så kan du lave en mysql forespørgsel som ser sådan her ud:
---------------------------------------

$brugernavn = $_POST["brugernavn"];

$query = mysql_query("SELECT COUNT(*) FROM bruger_Tabel WHERE brugernavn = '$brugernavn' LIMIT 1") or die(mysql_error());
$count = mysql_result($query, 0);

if($count > 0)
{
print "Brugernavnet er optaget!";
}
else
{
//Opret brugeren
}
-------------------------------

Du kan også lave din query sådan her:

--------------------------------

$query = mysql_query("SELECT brugernavn FROM bruger_Tabel WHERE brugeravn = '$brugernavn' LIMIT 1") or die(mysql_error());
$count = mysql_num_rows($query);

--------------------------------

Jeg vil dog foreslå den første, da den efter sigende skulle give bedre performance.
Og en anden ting som også kan sikre det er hvis du gør "brugernavn" i tabellen til "unique" :-)
Det gør du ude i højre side i phpmyadmin, der hvor du også sætter primary_key osv..

Mvh. Andreas
Avatar billede coderdk Praktikant
23. november 2006 - 20:14 #3
$sql = sprintf( "SELECT 1 FROM tabel WHERE brugernavn = '%s'", mysql_real_escape_string( $_POST['brugernavn'] ) );
$qh = mysql_query( $sql ) or die( mysql_error() );
if ( mysql_num_rows( $qh ) > 0 )
{
  // Brugernavnet er taget
}
else
{
  // Brugernavnet er ledigt
}
Avatar billede arne_v Ekspert
23. november 2006 - 20:15 #4
jeg ville supplere med et unikt index på brugernavns kolonne, så du får fejl
ved indsæt af duplikat (som er smuttet forbi SELECT testet p.g.a. samtidighed)
Avatar billede webstuff Nybegynder
23. november 2006 - 20:16 #5
#Udvikler: Kan mysql_result() ikke kun bruges på COUNT() querys?

Og det er da forkert at tjekke kodeordet også, flere brugere kan jo godt have samme kodeord?
Avatar billede coderdk Praktikant
23. november 2006 - 20:17 #6
"Jeg vil dog foreslå den første, da den efter sigende skulle give bedre performance."

Baseret på hvad? Hvis der er index på brugernavn, så ville jeg tro at de begge giver samme performance. Hvis jeg skulle gætte, ville den første give dårligere performance pga. COUNT(), men jeg tror nu query-optimiseren tricks så den performer på samme måde som nummer 2.

Jeg ville foretrække min ;)
Avatar billede udvikler Nybegynder
23. november 2006 - 20:18 #7
Det kan jeg ikke helt huske desværre, jeg plejer enten at bruge mysql_num_rows eller mysql_result

Og jo, men den finder stadig kun brugeren hvor koden _matcher_ med brugernavnet ;-)
Avatar billede coderdk Praktikant
23. november 2006 - 20:19 #8
webstuff, mysql_result kan bruges på alle select queries ;)
Avatar billede webstuff Nybegynder
23. november 2006 - 20:19 #9
forresten, som coderdk har i sin kode, så skal man altid sørge for at validere det input man har før man tjekker i databasen, altså skal:

$brugernavn = $_POST["brugernavn"];

være

$brugernavn = mysql_real_escape_string($_POST["brugernavn"]);

Du kan med fordel også kigge på disse funktioner:

htmlentities()
addslashes() + get_magic_quotes_gpc()
htmlspecialchars()
strip_tags()
Avatar billede udvikler Nybegynder
23. november 2006 - 20:19 #10
Tjaa, hvis det er et meget veludviklet system du bruger kimols1 og hvis dine koder skal være ekstrem gode performance mæssigt så ville jeg blande coderdk's løsning sammen med arne_v's forslag også har du en super kode :-)
Avatar billede webstuff Nybegynder
23. november 2006 - 20:20 #11
#coderdk -> Okay, så lærte jeg noget idag, det var nu også et spørgsmål og ikke en "jeg-ved-bedre" kommentar :-)
Avatar billede webstuff Nybegynder
23. november 2006 - 20:23 #12
[  citat  ]
"Jeg vil dog foreslå den første, da den efter sigende skulle give bedre performance."

Baseret på hvad? Hvis der er index på brugernavn, så ville jeg tro at de begge giver samme performance. Hvis jeg skulle gætte, ville den første give dårligere performance pga. COUNT(), men jeg tror nu query-optimiseren tricks så den performer på samme måde som nummer 2.

[/  citat  ]

Ahh, nu jeg tænker mig om så var det faktisk en diskution omkring "JOIN" og "WHERE" hvor de viste sig at den ene gav bedre performance end den anden - my bad :-)
Avatar billede kimols1 Nybegynder
23. november 2006 - 21:16 #13
det jeg er i gang behøves ikk være superkode. og har ikk den helt store erfaring med php oh mysql så webstuffs første forslag er for mig, det mest overskuelige.
men tak til alle jer andre osse!

$brugernavn = $_POST["brugernavn"];

$query = mysql_query("SELECT COUNT(*) FROM bruger_Tabel WHERE brugernavn = '$brugernavn' LIMIT 1") or die(mysql_error());
$count = mysql_result($query, 0);

if($count > 0)
{
print "Brugernavnet er optaget!";
}
else
{
//Opret brugeren
}
-------------------------------
Avatar billede kimols1 Nybegynder
23. november 2006 - 21:19 #14
er der i øvrigt forskel på print og echo?
Avatar billede webudvikleren Nybegynder
23. november 2006 - 22:02 #15
Man kan også gøre det endnu mere simpelt

echo (mysql_result( mysql_query("SELECT COUNT(`id`) FROM tabel WHERE brugernavn = '" . $_POST['navn'] . "'"),0)==1) ? "Brugernavnet er optaget!" : "Brugernavnet er ikke optaget";

Vil enten udskrive brugernavnet er optaget, eller ej.

Så kan du eventuelt bygge det over funktioner.

Når brugernavnet er optaget skal den gå til funktion:

public static function DebugMode ( $String )
{
        return $String;
}


-- og til at kalde til oprettelsessystemet :

public static function Membership ( $Navn )
{
    /** indsæt til databasen **/
}


Eksempelvis

echo (mysql_result( mysql_query("SELECT COUNT(`id`) FROM tabel WHERE brugernavn = '" . $_POST['navn'] . "'"),0)==1) ? DebugMode('Brugernavnet er optaget') : Membership($_POST['navn']);
Avatar billede webstuff Nybegynder
28. november 2006 - 14:13 #16
Snuppet direkte fra: http://rowl.dk/showarticle.asp?id=123&succes=&page=0

----------------------------------------------

print frem for echo

Jeg synes, der er flere grunde til at bruge print frem for echo. For der er nemlig en del forskellige på de to. I manual sammenhæng ser de to nemlig sådan ud:

void echo([mixed…]);
int print([mixed…]);

Hvis du bare skal udskrive noget på skærmen er det lidt ligegyldigt hvilken en du bruger, men hvis du for alt i verden vil have en return value, skal du bruge print. Den returnerer nemlig 1 (true) hvis det lykkedes den at skrive noget, ellers returnerer den 0 (false):

<?
echo @(print $var) === true ? 'Print udskrev noget på skærmen' : 'Print udskrev ikke noget på skærmen';
?>

Følgende vil skrive ’Print udskrev ikke noget på skærmen’, fordi variablen $var ikke er oprettet.

En anden ting er..

<?
# Du kan gøre sådan her:
echo print 'Hej';
# Og sådan her:
$var = print 'Hej';

# Men ikke sådan her:
print echo 'Hej';
# Eller sådan her:
$var = echo 'Hej';
?>

Hvis jeg kort skulle forklare det med mine egne ord, så ville jeg sige print er en funktion, mens echo er en såkaldt ”contruct”. De er faktisk begge af typen ”contruct”, men print opfører sig mere som en funktion, fordi den returnerer en værdi, hvor echo bare bruges til at udskrive noget på skærmen.

Det kan diskuteres hvor relevant det er, om man bruger print eller echo, for i princippet er det jo op til dig selv, jeg tænkte bare lige jeg ville tage den med, fordi der faktisk er mange der ikke kender til forskellen.

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

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