webForumDet fria alternativet

Kontroll om användarnamn redan finns

PHP

4 svar · 649 visningar · startad av Blockqoute

Medlem sedan dec. 200380 inlägg
Frågan#1

Hej, jag har kört fast rejält med en kontroll om ett användarnamn redan finns eller inte. Som det ser ut nu har jag en lista med användare och vill uppdatera användarnamnet på en utav dessa användare. Det ska då ske en kontroll om detta användarnamn finns eller inte. Finns det sedan tidigare så ska man få ett felmeddelande att det redan finns och att man måste välja ett annat, och finns det inte ska det bara uppdatera till det nya.

Det problemet har jag väl egentligen redan löst, men problemet som då uppstår är att den kontrollerar användarnamnet varje gång, även om man vara vill uppdatera e-postadressen t.ex. Sidan varnar då för att användarnamnet redan finns och det gör det ju, men det är inte det som ska uppdateras just nu så kontrollen behöver inte göras. Hur löser jag detta?

Som jag tänkte nu i klartext är följande:

OM man klickar på knappen uppdatera 
  TA fram användarnamnet för den aktuella användaren 
  OM det användarnamnet INTE är samma som redan används för aktuella användare fortsätt rakt ner. Om det inte stämmer, alltså att användarnamnet är samma, HOPPA vidare och uppdatera det som ska uppdateras 
  TA fram om det finns redan finns användare med det önskade användarnamnet 
  OM det INTE finns en användare med det önskade användarnamnet 
    UPPDATERA det som ska uppdateras 
  ANNARS 
    MEDDELA att det önskade användarnamnet redan finns

I kod har detta blivit följande:

if(isset($_POST['uppdatera'])){
  $id=$_POST['id'];
  $sql8="SELECT anvandarnamn FROM medlem WHERE medlemsnummer='$id'";
  $aktuell_anvandare = mysql_query($sql8);
  if($aktuell_anvandare != $_POST['anvandarnamn']){         //här kontrolleras om användarnamnet är samma eller inte
    $sql7="SELECT COUNT(*) FROM medlem WHERE anvandarnamn='{$_POST['anvandarnamn']}'";
   $result7 = mysql_query($sql7);
    if(mysql_result($result7, 0) != 1) {        //här kollar den om det finns någon användare med samma användarnamn som det önskade
      mysql_query("UPDATE medlem SET anvandarnamn='{$_POST['anvandarnamn']}', fornamn='{$_POST['fornamn']}', efternamn='{$_POST['efternamn']}', gatuadress='{$_POST['adress']}', postnummer='{$_POST['postnummer']}', stad='{$_POST['stad']}', butik='{$_POST['butik']}', telefon1='{$_POST['telefon1']}', telefon2='{$_POST['telefon2']}', epost='{$_POST['epost']}', genre='{$_POST['genre']}' WHERE medlemsnummer='$id'");   
    }else{
      $misslyckad="Uppdateringen misslyckades. Användarnamnet $aktuell_anvandare är redan upptaget.";
    }
  }else{       //hit hoppar den om det är samma användarnamn
    mysql_query("UPDATE medlem SET anvandarnamn='{$_POST['anvandarnamn']}', fornamn='{$_POST['fornamn']}', efternamn='{$_POST['efternamn']}', gatuadress='{$_POST['adress']}', postnummer='{$_POST['postnummer']}', stad='{$_POST['stad']}', butik='{$_POST['butik']}', telefon1='{$_POST['telefon1']}', telefon2='{$_POST['telefon2']}', epost='{$_POST['epost']}', genre='{$_POST['genre']}' WHERE medlemsnummer='$id'"); 
   }
}

Har suttit ett tag i natt med detta nu och skulle behöva hjälp :S

Medlem sedan mars 20034 471 inlägg
#2

Skapa ett speciellt formulär för att ändra användarnamnet. På så sätt vet du att vanlig uppdatering inte kräver användarnamnskoll medan detta speciella gör det.

Medlem sedan dec. 200380 inlägg
#3

Löste det på följande sätt till slut:

if(isset($_POST['uppdatera'])){
  $id=$_POST['id'];
    $sql7="SELECT COUNT(*) FROM medlem WHERE anvandarnamn='{$_POST['anvandarnamn']}' AND medlemsnummer<>'$id'";
    $sql8="SELECT COUNT(*) FROM medlem WHERE epost='{$_POST['epost']}' AND medlemsnummer<>'$id'";
    $result7 = mysql_query($sql7);
    $result8 = mysql_query($sql8);
    if((mysql_result($result7, 0) != 1 ) AND (mysql_result($result8, 0) != 1 )) {
      mysql_query("UPDATE medlem SET anvandarnamn='{$_POST['anvandarnamn']}', fornamn='{$_POST['fornamn']}', efternamn='{$_POST['efternamn']}', gatuadress='{$_POST['adress']}', postnummer='{$_POST['postnummer']}', stad='{$_POST['stad']}', butik='{$_POST['butik']}', telefon1='{$_POST['telefon1']}', telefon2='{$_POST['telefon2']}', epost='{$_POST['epost']}', genre='{$_POST['genre']}' WHERE medlemsnummer='$id'");   
    }else{
      $misslyckad="Uppdateringen av användare med medlemsnummer $id misslyckades. Användarnamnet {$_POST['anvandarnamn']} eller e-postadress {$_POST['epost']} är redan upptaget.";
    }
}

Tack för all hjälp och funderingar! Underbart!

Medlem sedan juni 20006 031 inlägg
#4

Jag brukar använda mysql_num_rows istället, då räcker det med en sqlfråga.

/red
Såg nu att du har ett id som du jämför med också. Har du inte unika id?
Då kommer ju Count(*) alltid returnera 1.

Kanske är jag som tänker helt fel här, är helt slutkörd. ;)

Medlem sedan mars 20034 471 inlägg
#5

Pedda skrev:

/red
Såg nu att du har ett id som du jämför med också. Har du inte unika id?
Då kommer ju Count(*) alltid returnera 1.

Kanske är jag som tänker helt fel här, är helt slutkörd. ;)

Ja, för man räknar antalet rader där id är skilt ifrån värdet.

278 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)