Avatar billede plippert Nybegynder
26. september 2011 - 15:04 Der er 7 kommentarer og
1 løsning

Tjekke for brugerID og komme med fejlbesked hvis brugeren allerede er registreret

Jeg har endelig fået oprettet mig et lille script der kigger i min database med en række  discountkoder. Når en bruger klikker og får udleveret en kode, registreres brugeres facebookUID i databasen ud for den enkelte kode.
Det jeg mangler lige nu, er et tjek på om den enkelte bruger allerede har fået en kode og altså har fået registreret facebookUID. Har man allerede en kode, skal den kode man allerede er registreret udfor vises.


Her er min sql som den er ud lige nu:

//Vis kode
$data = mysql_query("SELECT kode FROM discount WHERE used !=1 LIMIT 1 ")
  or die(mysql_error());

//registrering af brugeroplysninger
$kode = mysql_result($data, 0);
mysql_query("UPDATE discount SET used = 1, oauth_uid = $uid, oauth_provider = 'Facebook' WHERE kode = '$kode'")   
or die(mysql_error());
26. september 2011 - 17:15 #1
Jeg går ud fra, at $uid kommer fra en formular brugeren har udfyldt for at få en discount kode.  Når brugeren trykker på 'submit' kaldes siden med den kode du viser, og du starter med noget i retning af:

$uid = $_POST['uid'];

Hvis der så allerede er en kode i tabellen discount med denne $uid vil du have udskrevet en melding såsom "Du har allerede en discount kode" og ellers vil du have koden udskrevet som i spørgsmålet http://www.eksperten.dk/spm/947874.  Er det rigtigt?

I så fald vil jeg foreslå at starte med en mysql_query efter alle rækker hvor denne $uid forekommer.  Hvis der er flere end 0, så udskrives meddelelsen.  Hvis der er 0, så opdaterr du tabellen discount som du viser og udskriver koden som i spørgsmålet http://www.eksperten.dk/spm/947874.

For eksempel:

$number = mysql_query("SELECT * FROM discount WHERE oauth_uid = $uid");
if(mysql_num_rows($number) > 0)
{
  echo "Du har allerede en discount code";
}
else
{
  [den kode du viser for Vis kode og registrering af brugeroplysninger og udskriften fra http://www.eksperten.dk/spm/947874]
}
26. september 2011 - 17:46 #2
Eller hvis du vil gøre en tjenest for de brugere der har glemt deres discount kode og derfor prøver at få en ny kunne du gøre således:

$number = mysql_query("SELECT kode FROM discount WHERE oauth_uid = $uid");
if(mysql_num_rows($number) > 0)
{
  $kode = mysql_result($number, 0);
  echo "Du har allerede discount code = $kode";
}
else
{
  [den kode du viser for Vis kode og registrering af brugeroplysninger og udskriften fra http://www.eksperten.dk/spm/947874]
}
Avatar billede plippert Nybegynder
26. september 2011 - 20:46 #3
Jeg ved ikke om det gør nogen forskel, men det er ikke helt rigtigt, det du beskriver. UID hentes fra Facebook med FQL, men princippet er vel det samme.
Der er en kolonne med en masse koder og når en bruger får en kode, skal kun den kode vises for den bruger. Og en bruger kan ikke få mere end een kode.

Jeg prøver at sætte din kode ind i morgen. Måske jeg bliver nødt til at skrive igen ;)

Tak foreløbig for svar,
26. september 2011 - 21:06 #4
Det er jo i spørgerens egen interesse så klart, tydeligt, og fuldstændigt som muligt, at forklare problemet, dets baggrund, og det forventede resultat.  Jeg startede med at gætte for at få lukket lidt flere oplysninger ud af dig.  Vi tales ved.
Avatar billede plippert Nybegynder
27. september 2011 - 11:35 #5
hehe, ja det har du ret i. Det er jo ikke for genere, hvis ikke jeg får det hele med ;)

Anyways, nu har jeg kæmpet med det her hele formiddagen, og jeg har sq lidt svært ved at få det til at spille...
Jeg kan ikke få If til at virke. Ligegyldigt hvad jeg forsøger, vises en ny kode hver gang med beskeden 'Du har allerede en kode'.

Jeg ville jo gerne have at scriptet kigger om det enkelte UID allerede har fået en kode, har man det, vises den kode man allerede har fået tildelt. Har man ingen kode fået, så får man en.


Her er sql som det ser ud nu...:


        // Get User ID   
        $uid = $facebook->getUser(); 
        $fql_query  =  array( 
        'method' => 'fql.query', 
        'query' => 'SELECT uid, first_name, last_name, pic_square, pic_big, sex FROM user WHERE uid = ' . $uid 
        ); 
        $fql_info = $facebook->api($fql_query); 
       

       
        $data = mysql_query("SELECT kode FROM discount WHERE used IS NULL AND oauth_uid IS NULL LIMIT 1");
       
        $kode = mysql_result($data, 0);
        //opdater used-felt med facebook UID
        mysql_query("UPDATE discount SET used = 1, oauth_uid = $uid, oauth_provider = 'Facebook' WHERE kode = '$kode'")   
        or die(mysql_error());
       
        //Betinget visning af kode
        $number = mysql_query("SELECT kode FROM discount WHERE oauth_uid = $uid AND oauth_uid IS NOT NULL");
        $gl_kode = mysql_result($number, 0);

        if(mysql_num_rows($number) > 0)
        {
              echo "Du har allerede kode:  $gl_kode";
        }
        else
        {
        // Vis kode - har man kode i forvejen, skal denne vises, har man ingen vises een der ikke er brugt

       

                    echo "Her er din nye kode:  $data";

        }
27. september 2011 - 12:05 #6
Noget af det jeg, med møje, har lært med hensyn til debugging er at computeren med overvejende sandsynlighed har ret.  Når den siger "Du har allerede en kode," så er det nok fordi tabellen allerede har en userid lig med den du søger.  Så jeg kikker efter, hvordan det kan være.

Men det er da soleklart!  I denne kodelinie:

mysql_query("UPDATE discount SET used = 1, oauth_uid = $uid, oauth_provider = 'Facebook' WHERE kode = '$kode'") 

placerer du oauth_id = $uid i tabellen.  Når du så senere undersøger, om der er en oauth_id = $uid i tabellen, så er det naturligvis tilfældet.

Først et afklarende spørgsmål.  Hvis i tabellen discount der er en række med en kode, oauth_uid = $uid, and oauth_uid er NULL, skal denne user have en kode?  Jeg vil gætte på nej.  Hvis der er en oauth_uid = $uid i tabellen, så udskrives beskedden, uanset hvad der måtte være eller ikke være i andre felter.  Altså i stedet for :

$number = mysql_query("SELECT kode FROM discount WHERE oauth_uid = $uid AND oauth_uid IS NOT NULL");

foreslår jeg:

$number = mysql_query("SELECT kode FROM discount WHERE oauth_uid = $uid");

Så vil jeg foreslå en anden rækkefølge af koden.  Så snart du har en værdi i $uid undersøger du, om denne $uid allerede er i tabellen.  Hvis ja, så udskriver du beskedden, hvis nej, så kører du videre.  Altså:

$uid = $facebook->getUser();
$number = mysql_query("SELECT kode FROM discount WHERE oauth_uid = $uid");

if(mysql_num_rows($number) > 0)
{
    echo "Du har allerede kode:  $gl_kode";
}

else
{
  [..og her kan du så starte med $fql_query  =  array(... og hele resten.]
}
Avatar billede plippert Nybegynder
27. september 2011 - 15:30 #7
så ser det ud til at lykkedes... Nu har jeg bare dét problem, at php sdk ser ud til at have en lille bug, så det går lidt i tå :(

men problemet i overskriften er løst - send mig et svar :)
27. september 2011 - 15:31 #8
Det var godt det lykkedes.  Svar fra mig.
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
Computerworld tilbyder specialiserede kurser i database-management

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