du skal da bare søge efter bruger navn og se om der er en hvis der er en skal du bare stoppe resten en lille hurtig måde
$brugernavn = mysql_query("SELECT COUNT(*) FROM DIN_TABLE WHERE USERNAME='".$_POST['brugernavn]."'") OR DIE(mysql_error()); if(mysql_result($brugernavn,0) != 0){ der findes allerede en bruger }
Først et spørgsmål: Hvor gemmer du de oprettede brugernavne? Du har (ser det ud til) en side opret_bruger4.php som modtager inputtet fra den formular du viser (hvis validated), og der må du have noget kode der indsætter blandt andet brugernavn i en database tabel. Jeg skal nu gøre den antagelse, at tabellen hedder 'Brugere' og har et felt der hedder 'navn' og at det er der du gemmer de oprettede brugernavne.
For så at se, om et nyt brugernavn allerede eksisterer, må du naturligvis forespørgenden tabel, for eksempel:
$result = mysql_query("SELECT * FROM Brugere WHERE navn = $bruger");
og så se om du får noget resultat af forespørgselen
$number = mysql_num_rows($result);
Hvis forespørgslen giver resultat - if($number > 0) - så består brugernavnet allerede. Hvad skal der så ske? For eksempel:
if($number > 0) echo "Brugernavn $bruger består allerede. Gå tilbage og vælg et andet brugernavn.";
Nu ligger det således, at du er nødt til at forespørge databasen via serveren. Funktionen validate() er skrevet i javascript der, som et client-side sprog, ikke snakker med serveren. Så du er nok nødt til at checke for duplikat brugernavn på siden opret_bruger.php. Noget i retning af:
opret_bruger.php
<?php $bruger = $_POST['brugernavn']; $result = mysql_query("SELECT * FROM Brugere WHERE navn = $bruger"); $number = mysql_num_rows($result); if($number > 0) echo "Brugernavn $bruger består allerede. Gå tilbage og vælg et andet brugernavn.";
Jeg opretter dette som svar i det håb, at det vil være dig tin nytte og bringe dig videre.
<div class="brugernavn">Brugernavn</div><br/> <div id="err_brugernavn" class="err"> </div> <input type="text" size="20" class="brugernavn" title="undgå at bruge andre tegn ind - . _"name="brugernavn" value="Min. 4 bogstaver" onfocus="if (this.value=='Min. 4 bogstaver') this.value = ''" onblur="if (this.value=='') this.value = 'Min. 4 bogstaver'"/> <?php $brugernavn = $_REQUEST["brugernavn"];
$result = mysql_query("SELECT * FROM brugere WHERE brugernavn = $brugernavn"); $number = mysql_num_rows($result); if($number > 0) echo "Brugernavn $brugernavn består allerede. Gå tilbage og vælg et andet brugernavn.";
?>
Det har jeg tastet. så kommer følgende fejl:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Sider\Opret_brugere\opret_bruger3.php on line 186
Dette er line 186: $number = mysql_num_rows($result);
Min DB hedder loginsystem og den er Connect, ved hjælp af denne her: <?php include("../../loginsystem/database.php"); ?>
<div class="brugernavn">Brugernavn</div><br/> <div id="err_brugernavn" class="err"> </div> <input type="text" size="20" class="brugernavn" title="undgå at bruge andre tegn ind - . _"name="brugernavn" value="Min. 4 bogstaver" onfocus="if (this.value=='Min. 4 bogstaver') this.value = ''" onblur="if (this.value=='') this.value = 'Min. 4 bogstaver'"/> <?php $brugernavn = $_REQUEST["brugernavn"];
$result = mysql_query("SELECT * FROM brugere WHERE brugernavn = '".$brugernavn."'"); $number = mysql_num_rows($result); if($number > 0) echo "Brugernavn $brugernavn består allerede. Gå tilbage og vælg et andet brugernavn.";
$result = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$brugernavn'") or die(mysql_error());
$number = mysql_num_rows($result);
if ($number > 0) {
echo "Brugernavn" . $brugernavn . " består allerede. Gå tilbage og vælg et andet brugernavn.";
}
Prøv det en gang ...
Hvis du i øvrigt vil udskrive noget til brugeren, som det ser ud til at du vil med din echo i if sætningen, skal du placere det nede i body, da det er hvad der vises i browseren. Du går ikke at have en echo oppe i din <head></head>
MadsDue, gad vide, om vi diskuterer det samme problem. Dit oprindelige spørgsmål var, hvordan du kunne undgå, at to brugere oprettede det samme brugernavn. Det forudsætter, at du kan oprette brugere og gemme brugernavnet i databasen. Det er ikke noget problem. Problemet er udelukkende at undgå at oprette og gemme duplikat brugernavne.
Men er det således? Når vi går tilbage til koden i dit oprindelige spørgsmål, kan brugerne så oprette sig med brugernavn? Så er koden du viste i hvert fald ikke komplet. Ud over den kode du viser må der være en anden php side som ifølge action på din formular skal hedde noget med "../../sider/opret_brugere/opret_bruger4.php" som blandt andet indeholder kode til at insætte brugernavn i databasen.
Så hvis du med din oprindelige kode kan oprette brugernavne i databasen, så vis os den kode du bruger til at oprette brugernavnene i databasen.
Hvis det på den anden side ligger således at du ikke kan oprette brugere (duplikerede eller ej), så fortæl os det. I såfald har vi prøvet at finde løsning til det forkerte problem.
Du har helt ret i at jeg indsender data til db i et andet script.
Men vil gerne have, at allerede på denne side, hvor brugeren skal indtaste et ønsket brugernavn, kan få at vide. om det er optaget eller ledigt så han/hun kan bruge det.
Jamen så har vi snakket forbi hinanden. Dette spørgsmål OG de to følgende http://www.eksperten.dk/spm/941190 og http://www.eksperten.dk/spm/941198 går udelukkende på at at stoppe brugere fra at tage brugernavn der i forvejen er taget, og ikke et ord om den begrænsning, at det skal ske uden at skifte side. På spørgsmålet som stillet fortalte jeg i #8, at det ikke kan gøres i javascript. Javascript er et client-side script der ikke, som php, kan henvende sig til serveren for at forespørge databasen for oprettede brugernavne. Jeg foreslog derfor, at du placerede database forespørgslen på den samme side, som du allerede bruger til at updatere databasen, når en ny bruger opretter sig.
Så hvis dit problem er dette: "Når en bruger vil oprette sig med et brugernavn, hvordan kan det så undersøges, om dette brugernavn allerede består?" så er mit svar dette: "ved at forespørge databasen efter at brugeren har forsøgt at oprette sig." Det kender jeg ikke nogen løsning på i javascript, og der er åbenbart heller ingen andre der gør.
Hvis du ikke kan bruge mit svar (eller de andres,) så vil jeg bede dig lukke spørgsmålet (ved selv at oprette og acceptere et svar) så det i det mindste ikke længere står som åbent.
Hvis du ønsker at gøre det du vil, skal du enten flytte den del, som du ikke kan få til at virke over på siden med formen og så lave endnu en if sætning, der for tæller, at hvis brugernavnet er opdateret at den skal blive på samme side ved tryk på submit og hvis brugernavnet ikke er optaget, går den videre til den side, du bruger nu til at oprette brugeren.
Eller også skal du flytte det hele over i filen med formen og oprette og validere brugerinput deri. Det er min anbefalelse.
Det er ikke noget særligt heldigt indtryk du har gjort her på Eksperten. Du opretter tre spørgsmål hvor du for det første ikke forklarer ordenligt hvad du vil (såsom at undgå sideskift) og når så en masse medlemmer prøver at hjælpe dig med at forklare, at det ikke kan lade sig gøre på din måde men fortæller hvad du kan gøre i stedet for, så har du ikke engang et ord som tak, men kun 'luk.' Det opfordrer ikke til at prøve at hjælpe med fremtidige spørgsmål fra din side.
den nemmeste måde at undgå klon brugere er ved at benytte mobilnumre som brugernavne. Det eneste det kræver er sms-validering ... implementerer det dagligt og det fungerer ganske glimrende, også globalt
by the highway... sql er stoneage, for langsomt! gal kode
Synes godt om
Ny brugerNybegynder
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.