Just nu i M3-nätverket
Gå till innehåll

Kontrollera om epost redan finns i databas


happyfejs

Rekommendera Poster

Hello..

 

Håller på att gör ett formulär för att lägga till användare, men man ska bara kunna lägga till en epost en gång.

 

Hur gör jag för att direkt efter man skrivit in sin epost i formuläret kolla om den redan existerar i databasen och då inaktivera "lägg till" knappen?

 

Tack på förhand

Länk till kommentar
Dela på andra webbplatser

  • Svars 62
  • Skapad
  • Senaste svar

Med jQuery skulle du kunna använda något i stil med följande, där AddButton är id för Lägg till-knappen och emailField är id för text-fältet.

"dinCheckFil.ashx" är din server-handler (om du använder asp.net) som kollar adressen och returnerar strängen "1" om den existerar.

(Har inte testkört scriptet, men jag tror jag fick till det korrekt)

Du behöver naturligtvis även inkludera en script-referens till jQuery-biblioteket.

 

jQuery(document).ready(function () {
jQuery('#emailField').blur(function () {
	var email = jQuery(this).val();
	jQuery.ajax({
		type: "POST",
		url: "dinCheckFil.ashx",
		async: true,
		data: "email=" + email,
		success: function (status) {
			if (status == "1") {
				jQuery("#AddButton").attr('disabled', 'disabled');
			}
		}
	});
});
});

Länk till kommentar
Dela på andra webbplatser

Thanks, nått sånt låter vettigt. Kör dock inte asp.net utan php :S, kan det funka ändå?

Länk till kommentar
Dela på andra webbplatser

Jodå, det spelar ingen roll vad du kör på servern. Se bara till att php-filen inte returnerar något annat än just returvärdet, ex. 0 eller 1 (dvs. inga html-taggar eller dylikt)

I PHP-filen tar du emot email-parametern på sedvanligt sätt, som om ett formulär hade postats.

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Ska vi se så jag fattat allt rätt då, jQuery koden ligger under med formuläret i koden?

Och den uppdateras under tiden man skriver i mailen?

 

I dinCheckFil.ashx eller ska det vara dinCheckFil.php om jag använder php så ska den hämta data från databasen och returnera typ 0 om den inte finns och 1 om den finns? Och sen skicka det tillbaka till filen med formuläret i?

 

Eller är jag helt ute och cyklar? Har inte använt jQuery nånting förut :S

 

Tack för svar

Länk till kommentar
Dela på andra webbplatser

Scriptet aktiveras när användaren LÄMNAR epost-fältet (tycker det är onödigt att göra ett server-anrop för varje tangenttryckning i detta fall)

 

jQuery-koden kan du lägga var som helst, förslagsvis inom HEAD-taggarna (efter raden där du inkluderar jQuery-biblioteket)

Ex.

<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>

// Här kan du lägga in jQuery-snippeten

</head>

 

Den anropade filen ska vara din php-fil ja, ex. dinCheckFil.php

Du har förstått rätt hur den ska fungera och vad den ska returnera.

Länk till kommentar
Dela på andra webbplatser

Najs, tack för hjälpen, ska testa så fort jag får tid.. Hojtar resultatet efter jag testat..

Länk till kommentar
Dela på andra webbplatser

Hur skickar jag 1 eller 0 tillbaka till formuläret utan att uppdatera det då?

Kan man lösa så det står en text bredvid epost rutan att mailen redan finns också?

Länk till kommentar
Dela på andra webbplatser

Du ser till att php-filen enbart skriver ut en etta eller en nolla. PHP är inte mitt språk, men i princip ska filen innehålla följande (fast med en kontroll av eposten mot databasen såklart, istället för som jag gjort)

Inga html-taggar eller något annat alltså. Resten sköts av mitt javascript.

 

<?php
$email=$_POST["fname"]
if($email=='post@post.com')
  echo "1"
else
  echo "0"
?>

Länk till kommentar
Dela på andra webbplatser

if(!isset($_POST["email"])) die("1");
 $username = "";
 $password = "";
 $hostname = "";    
 $dbconn = mysql_connect($hostname, $username, $password) or die("1");

 $database = mysql_select_db("email",$dbconn);

 $query  = "SELECT email FROM tabell WHERE email = '" . $_POST["email"] . "'";
 $result = mysql_query($query) or die("1");
 echo ($result) ? "1" : "0";

 

Nu är det ingen vidare felhantering - om något är fel eller om adressen redan finns så returneras "1".

 

1 som svar kan alltså bero på en av följande saker:

* "email" i post-datan är tom

* Fel i databaskopplingen

* Fel i queryresultatet

* Adressen finns redan

 

 

Hur löser du detta då?

Koppla inte php-sidan mot ajax-requesten förrän du vet att php-sidan fungerar som den skall.

Länk till kommentar
Dela på andra webbplatser

nu har jag skrivit så här

<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js">	
jQuery(document).ready(function () {
       jQuery('email').blur(function () {
               var email = jQuery(this).val();
               jQuery.ajax({
                       type: "POST",
                       url: "checkMail.php",
                       async: true,
                       data: "email=" + email,
                       success: function (status) {
                               if (status == "1") {
								<? echo "mail finns"; ?>
                                       jQuery("submit").attr('disabled', 'disabled');
                               }
                       }
               });
       });
});
</script>
</head>

<form enctype="multipart/form-data" action="memberContent.inc.php?page=addMemberToDB" method="post" name="changer">

<input name="email" type="text" value="">

<input type="submit" name="submit" value="Lägg till" />

 

Och i checkMail.php har jag skrivit denna koden

<?php
	include 'includes/db_settings.inc.php';
	include 'includes/opendb.php';
	$email = $_POST[email];
	$query = mysql_query("SELECT email FROM `members` WHERE email = '" . $email . "'");

	$row = mysql_fetch_array($query)

	if($row != ''){
		echo "1";
	}else{
		echo "0";
	}

include 'includes/closedb.php';
?>  

 

men det vill inte funka :S Har jag gjort nått fel?

Länk till kommentar
Dela på andra webbplatser

$email = $_POST["email"];

 

Och som sagt, se till att det fungerar som det skall innan du kopplar på ajax.

 

testa med en statisk variabel först

$email = "en.epostadress@somfinnsi-registret.se";

Länk till kommentar
Dela på andra webbplatser

Den funkar som den ska om jag kör filen direkt utan ajax, men när jag kör den via ajax så händer inget, submit knappen ska inte gå att trycka på om det lyckas va?

Länk till kommentar
Dela på andra webbplatser

Du måste följa min kod och mina instruktioner om det skall fungera. Till att börja med behöver ditt textfält och knappen ett id

 

<input name="email" id="email" type="text" value="">
<input type="submit" id="submit" name="submit" value="Lägg till" />

 

Sedan har du tappat bort # i jQuery-selektorerna. Ändra

 jQuery('email').blur(function () {

till

 jQuery('#email').blur(function () {

samt

 jQuery("submit").attr('disabled', 'disabled');

till

 jQuery("#submit").attr('disabled', 'disabled');

Länk till kommentar
Dela på andra webbplatser

Aha, Sorry, trodde det var namnen på dem bara :)..

 

Har ändrat nu men funkar fortfarande inte tyvärr, kan man lägga nån text som uppdateras istället för att knappen inaktiveras? lättare att se resultatet då :S

Länk till kommentar
Dela på andra webbplatser

Jag ändrade en sak till från din kod, jag la jQuery scripet mellan <script> taggarna, du hade lagt det efter, är det fel också då?

Länk till kommentar
Dela på andra webbplatser

if(!isset($_POST["email"])) die("1");
 $username = "";
 $password = "";
 $hostname = "";    
 $dbconn = mysql_connect($hostname, $username, $password) or die("1");

 $database = mysql_select_db("email",$dbconn);

 $query  = "SELECT email FROM tabell WHERE email = '" . $_POST["email"] . "'";
 $result = mysql_query($query) or die("1");
 echo ($result) ? "1" : "0";

 

Nu är det ingen vidare felhantering - om något är fel eller om adressen redan finns så returneras "1".

 

1 som svar kan alltså bero på en av följande saker:

* "email" i post-datan är tom

* Fel i databaskopplingen

* Fel i queryresultatet

* Adressen finns redan

 

Såg detta inlägget först nu Jonas, vad händer i den koden? Kollar den igenom de punkter du punktade upp? Eller det fattar jag väl att den gör egentligen, men jag testar att lägga till detta när jag ser att första steget funkar :S, nu funkar ju inte kopplngen alls till ajaxen?

Länk till kommentar
Dela på andra webbplatser

Ja, script-taggar ska det vara också. Jag postar din kod, med korrigeringar. Dessutom hade du lagt in en php-echo mitt i javascriptet, vilket sabbar det, så det är borttaget också.

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" />

<script type="text/javascript">     
jQuery(document).ready(function () {
       jQuery('#email').blur(function () {
               var email = jQuery(this).val();
               jQuery.ajax({
                       type: "POST",
                       url: "checkMail.php",
                       async: true,
                       data: "email=" + email,
                       success: function (status) {
                               if (status == "1") {
                                                                                                               jQuery("#submit").attr('disabled', 'disabled');
                               }
                       }
               });
       });
});
</script>
</head>
<body>
<form enctype="multipart/form-data" action="memberContent.inc.php?page=addMemberToDB" method="post" name="changer">

<input id="email" name="email" type="text" value="">

<input type="submit" id="submit" name="submit" value="Lägg till" />

Länk till kommentar
Dela på andra webbplatser

under Net, utöka namnet på php-sidan du postar till och klicka på Response så ser du ev felmeddelande.

 

Fungerar det inte- posta url

Länk till kommentar
Dela på andra webbplatser

har du exempel på en e-postadress som finns?

alternativt, lägg in "test@testsson.se" så det går att testa.

jag fick 0 som svar iaf.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...