Jump to content
php.lv forumi

function checkUnique


ezis

Recommended Posts

sveiki.!

 

veidojot lietotāju reģistrācijas skriptu, kur regoties varēs tikai ar uzaicinājumiem, nevaru uztaisit, lai no4eko vai uz šo ēpastu nav jau aizsūtīts ielugums, jo lai to izdarītu izmantoju:

 

	elseif ( ! checkUnique ( 'Email', $_POST['email'] ) )
		{
			$error = 'Uz šo epastu jau ir nosūtīts ielūgums.!';
		}

 

 

bet problēma sākas tur, ka šis skripts ir definēts citai tabulai, proti 'users'

 

	function checkUnique ( $field, $compared )
{
	global $db;

	$query = $db->getRow ( "SELECT COUNT(*) as total FROM `" . DBPREFIX . "users` WHERE " . $field . " = " . $db->qstr ( $compared ) );

	if ( $query->total == 0 ) {
		return TRUE;
	}
	else {
		return FALSE;
	}
}

 

bet man vajag vēlvienu tādu pašu augstāk minēto function checkUnique nodefinēt citai tās pašas datubāzes tabulai: 'invites' ... un to vajag izdarīt nemainot augstāk esošo, jo augstāk esošais arī tiek izmanots.. nevaru izveidot velvienu šādu pašu vnk nomainot tabulas nosaukumu, jo viņš atrodas tajā pašā failā kur man vajadzētu šo pašu skriptu tikai ar 'invites' tabulu..

grr.. nemācēju isti pareizi laikam apgaismot to, ko es vēlos, bet jautājums būtu vai to " function checkUnique " nevarētu piemēram pārsaukt " function checkUnique2 " (laikam jau nē, jo ar checkUnique ta nevar dariit.. ) vnk vēlos uzzināt kā lai nosauc to " function checkUnique " funkciju savādāk.. jo nevar divi tādi būt vienā dokumentā, jo savādāk nekas nenotiek.. vinji konflikteetu sava starpaa..

Edited by ezis
Link to comment
Share on other sites

problema taada ka pasaa funkcijaa jau esi definejis to tabulas nosaukumu ..

vari megjinat dariit taa :

function checkUnique ( $field, $compared ,$xxx='users')
{
global $db;

	$query = $db->getRow ( "SELECT COUNT(*) as total FROM `" . DBPREFIX . "$xxx` WHERE " . $field . " = " . $db->qstr ( $compared ) );
.....

visur citur parbaudi kaa liidz sim bet tai otrai Reali padod citu $xxx vertiibu ..

tas ir izmanto iespeju funkcijaas ieprieks nodifeneet defoltaas vertibas ( un reali vinjas padod nevajag, ja vien kautkur nemainas)

--

Bet vispar labak jau pilnveido kodu un arii citur padod to vertiibu ..

Link to comment
Share on other sites

liels Tev paldies.! tas nostrādāja.. vnk nelietoju tabulas nosaukumu pašā funkcijā bet definēju to piemēram ar " $witchdb " un tad tajās vietās kur vajadzīga funkcija checkUnique, es nodefinēju to $check='invites' vai arī $witchdb='users'

Tagad tikai jāpalabo dažas vietas un viss.. :)

 

tiešām liels Tev paldies. :)

esmu vēl tikai iesācējs. pagaidām cenšos vienkārši izprast.! :)

 

tagad saskāros ar nākamo problēmu...

 

ja kādam ir laiks un iedvesma lasīt tik daudz, tad luk, tā ir:

 

tā ir:

ospiežot uz ieluguma apstiprinājuma linka, tas aizvada uz lapaspusi kuras atdrese ir piemēram : http://localhost/login/register.php?ID=68&...uOzQp6nqIXHHj2e

 

uztaisīju lai pārbauda vai ar šo linku jau nav reģistrējies lietotājs, ja nav tad palaizas reģistrācija, bet ja ir tad saka, ka ar šo ielugumu jau ir reģistrējies lietotājs un ja linkam nav šī: ?ID=68&key=WxNJCg6o25lkycIdTuOzQp6nqIXHHj2e daļa, tad saka ka piemēra nepareiz ieluguma linx..!

un problēma sākas tur, ka ievadot reģistrācijas datus un nospiežot submit, aiz linka http://localhost/login/register.php pazuud dalja ?ID=68&key=WxNJCg6o25lkycIdTuOzQp6nqIXHHj2e un uzmet nepareiz ieluguma linx..! loģiski, jo nostrādā atkal tā skripta daļa kura pārbauda linku... beztam, pēc submita joprojām vajag šo linku tādēļ, lai pēc veiksmīgas pieregošanās, vadoties pēc linkā norādītā ID, datubāzes tabulā attiecīgajam ID ieliktu " 1 " kas nozīmē, ka pie pārbaudes varēs pateikt vai šis links jau ir izmantots reģistrācijai...

 

tādēļ problēma ir tāda, ka un vai var panākt, ka pēc submita vinjsh nenodzēsh linku.. :?

 

būtībā šī ir tā lapa register.php

<?php
require_once('settings.php');

if ( array_key_exists ( '_submit_check', $_POST ) )
{
	if ( $_POST['username'] != '' && $_POST['password'] != '' && $_POST['password'] == $_POST['password_confirmed'] && $_POST['email'] != '' && valid_email ( $_POST['email'] ) == TRUE )
	{
		if ( ! checkUnique ( 'Username', $_POST['username'], $witchdb='users' ) )
		{
			$error = 'Username already taken. Please try again!';
		}
		elseif ( ! checkUnique ( 'Email', $_POST['email'] ) )
		{
			$error = 'The email you used is associated with another user. Please try again or use the "forgot password" feature!';
		}
		else {		
			$query = $db->query ( "INSERT INTO " . DBPREFIX . "users (`Username` , `Password`, `date_registered`, `Email`, `Random_key`) VALUES (" . $db->qstr ( $_POST['username'] ) . ", " . $db->qstr ( md5 ( $_POST['password'] ) ).", '" . time () . "', " . $db->qstr ( $_POST['email'] ) . ", '" . random_string ( 'alnum', 32 ) . "')" );

			$getUser = "SELECT ID, Username, Email, Random_key FROM " . DBPREFIX . "users WHERE Username = " . $db->qstr ( $_POST['username'] ) . "";

			if ( $db->RecordCount ( $getUser ) == 1 )
			{			
				$row = $db->getRow ( $getUser );

				$subject = "Activation email from " . DOMAIN_NAME;

				$message = "Dear ".$row->Username.", this is your activation link to join our website. In order to confirm your membership please click on the following link: <a href=\"" . APPLICATION_URL . "confirm.php?ID=" . $row->ID . "&key=" . $row->Random_key . "\">" . APPLICATION_URL . "confirm.php?ID=" . $row->ID . "&key=" . $row->Random_key . "</a> <br /><br />Thank you for joining";

				if ( send_email ( $subject, $row->Email, $message ) ) {
					$msg = 'Account registered. Please check your email for details on how to activate it.';
				}
				else {
					$error = 'I managed to register your membership but failed to send the validation email. Please contact the admin at ' . ADMIN_EMAIL;
				}
			}
			else {
				$error = 'User not found. Please contact the admin at ' . ADMIN_EMAIL;
			}
		}							
	}
	else {		
		$error = 'There was an error in your data. Please make sure you filled in all the required data, you provided a valid email address and that the password fields match one another.';	
	}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>roScripts.com - PHP Login System With Admin Features</title>
<link href="css/styles.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="log">
<?php	if ( isset ( $error ) )	{ echo '			<p class="error">' . $error . '</p>' . "\n";	}	?>
<?php	if ( isset ( $error2 ) )	{ echo '			<p class="error">' . $error2 . '</p>' . "\n";	}	?>
<?php	if ( isset ( $msg ) )	{ echo '			<p class="msg">' . $msg . '</p>' . "\n";	} else {?>
</div>

<div id="container" style="width:230px;">
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
	<input type="hidden" name="_submit_check" value="1"/> 

	<label for="username">Username</label>
	<input class="input" type="text" id="username" name="username" size="32" value="<?php if(isset($_POST['username'])){echo $_POST['username'];}?>" />

	<label for="password">Password</label>
	<input class="input" type="password" id="password" name="password" size="32" value="" />

	<label for="password_confirmed">Re-Password</label>
	<input class="input" type="password" id="password_confirmed" name="password_confirmed" size="32" value="" />

	<label for="email">Email</label>
	<input class="input" type="text" id="email" name="email" size="32" value="<?php if(isset($_POST['email'])){echo $_POST['email'];}?>" />

	<input type="image" name="register" value="register"  class="submit-btn" src="images/btn.gif" alt="submit" title="submit" />
	<div class="clear"></div>
</form>
</div>
<? } ?>
</body>

</html>

 

šaij vajadzētu būt tai daļai kura pārbauda linku un aizvada uz reģistrāciju

			if ( $_GET['ID'] != '' && numeric ( $_GET['ID'] ) == TRUE && strlen ( $_GET['key'] ) == 32 && alpha_numeric ( $_GET['key'] ) == TRUE ) {
	$query = "SELECT ID, Random_key, Active FROM " . DBPREFIX . "invites WHERE ID = " . $db->qstr ( $_GET['ID'] );

	if ( $db->RecordCount ( $query ) == 1 ) {
		$row = $db->getRow ( $query );
		if ( $row->Active == 1 ) {
			$error2 = 'Ar so ielugumu jau ir registrets lietotajs!';
		}
		elseif ( $row->Random_key != $_GET['key'] ) {
			$error2 = 'Apstiprinajuma kods linka neatbilst ar uzaicinajuma kodu!';
		}
		else {
								   šeit vajadzētu palaist reģistrācijas formu
						   }
}
	else {		
		$error2 = 'User not found !';		
	}
	}
else {
	$error2 = 'nepareiz ieluguma linx..! !';
}

 

mēģināju to visu apvienot un salikt kopā, bet nesanāca viss tākā vajadzēja..

Edited by ezis
Link to comment
Share on other sites

vnk nelietoju tabulas nosaukumu pašā funkcijā bet definēju to piemēram ar " $witchdb " un tad tajās vietās kur vajadzīga funkcija checkUnique, es nodefinēju to $check='invites' vai arī $witchdb='users'

Nee tu nesaprati pareizi .. ja 99% gadijumu tev buus taa users tabula tad raksti sadi

function xxx($x3='kautkas')
{
echo $x3;
}

xxx(); // izvadiis Kautkas
xxx(' bla bla bla ') // izvadiis balbla bla

Tas ir tiek nodefinets Defolta vertiiba --> vinju var arii nenoraadiit , bet ja tai ir jamainaas tad noraada kaa parasti, tas ir pie funkcijas izsauksanas nevajag nekaadus $x='tram' , bet gan vienkarshi ($x) [vai 'tram taram']

Link to comment
Share on other sites

Nee tu nesaprati pareizi .. ja 99% gadijumu tev buus taa users tabula tad raksti sadi
function xxx($x3='kautkas')
{
echo $x3;
}

xxx(); // izvadiis Kautkas
xxx(' bla bla bla ') // izvadiis balbla bla

Tas ir tiek nodefinets Defolta vertiiba --> vinju var arii nenoraadiit , bet ja tai ir jamainaas tad noraada kaa parasti, tas ir pie funkcijas izsauksanas nevajag nekaadus $x='tram' , bet gan vienkarshi ($x) [vai 'tram taram']

man divās max 3jās vietās vajag šo funkciju... tādēļ es darīju tā. viss tas strādā un tas itkā ir galvenais..

 

functions.php - vnk pievienoju $witchdb

function checkUnique ( $field, $compared, $witchdb )
{
	global $db;

	$query = $db->getRow ( "SELECT COUNT(*) as total FROM `" . DBPREFIX . "$witchdb` WHERE " . $field . " = " . $db->qstr ( $compared ) );

	if ( $query->total == 0 ) {
		return TRUE;
	}
	else {
		return FALSE;
	}
}

 

un tad kur man vajadzēs izmantot...

if ( ! checkUnique ( 'Email', $_POST['email'], $witchdb='invites' ) )
		{
			$error = 'Uz so epastu ielugums jau ir nosutits!';
		}

 

viss darbojas.. :? ir liela starpība, kā es panāku ka darbojas..? :? varbūt tā kā Tu saki tā ir pareizāk un skripts vnk izskatās "tīrāks" vai kaa..?

Link to comment
Share on other sites

Galvenais nav tas, ka tas vienkarši strādā, bet gan tas kā tas strādā :)

 

Ja tu norādi $witchdb='invites', tad gadījumā ja $witchdb netiks padots tiks izmantota defaultā tabula, tavā gadījumā tā būtu 'invites'.

par tām def vērtībam sapratu jā..

man liekas, ka šajos variantos vnk izvērtējas skripta lietderība un viss... :? abi jau ir ar vienādām sekām..

lab tas tā..

 

vēljoprojām cīnos ar otro problēmu. :\

Link to comment
Share on other sites

nu registracijas pamataa ir:

1. izveido tabulu kur raksti uzaicinatos (teiksim e-mailu)

2. tabulaa uzgeneree UNIKALU kodu ==> randoms seit nederees...

sim punktam ir daudz risinajumu bet viens no ir :

ieraksta tabulaa e-mailu , dabuun ID (autoincrament ) un kaa unikalo izmanto to ID (tabulu generejot var uzlikt lai autoIncrament sak skaitiit teiksim no 9999 ...)

---

3.nosuuta e-mailu kursh satur linku uz registracijas apstiprinasanas lapu (piem http://domens.lv/index.php?lapas_registarm=1&dd=9999999 )

4. kad useris spiezj uz linka tad nolasa to dd (faktiski tas pats Id vien ir ..) paskatas DB vai lapa jau nav aktivizeeta:

Ja NAV Aktivizaa , aktivizee un ieraksta laucinja Aktivs kaadu vertiibu (teiksim standarta 1 (true) )

Ja IR izvada pazinjojumu ka jus jau esat sistemas useris

---

taatad parbaude buus tikai peec vienas tabulas Ielugumi ....

---

Jatceraas buutiska lieta, tabulaa jabuut Ieraksta izveidosanas laikam , un peec zinama laika (teiksim 3 dienam) visus kas nav aktivizejushies vienkarshi nodzeesh ...

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

Shis ir tikai Viens no daudzajiem risinajumiem , un neapgalvoju ka pats labakais, bet nu vienkarsakais skjiet gan ...

Link to comment
Share on other sites

nuu man viss ir lidiz ai vietai kur spiež virsū uz linka un tas aizvada uz reģistrācijas lapu.. vnk jox tāds, ka manā skriptā vinjsh piem vadoties pēc tā linka http://domens.lv/index.php?lapas_registarm=1&dd=9999999 dara divas dabības (vismaz man tā ir..) 1. pārbauda vai attieciigajam ID ir attiecģi pareizais kods utt.. un ja tas viss atbilst, tad aizvada uz reģistrāciju.. 2. lietotājs saraxta visus savus datus spiež subit un ja visa reģistrācija ir izdevusies sāk darboties skripta daļa kura datubāzē ieraxta ka šis http://domens.lv/index.php?lapas_registarm=1&dd=9999999 links jau ir izmantots reģistrācijā..

 

viss liekas itkā kārtībā, bet nē, jo nospiezot submit vnk paliek tīrs links http://domens.lv/index.php?lapas_registarm ..

vnk tas pieliktais id un tam attieciigais apstipriaajuma kods pazuud.. un skripta dalja kas pārbauda vai linx ir pareiz sāk bļaut piemēram ka nav norādits ID un tam kods utt..

atkal samurgoju, tā ka neko nevar saprast laikam..! :\ kad uznāks garīgais atkal paskalot pelēko vielu pa galvaskausu, tad gan jau ka paēģināšu to skripta daļu salikt pareizi..

Link to comment
Share on other sites

zb.! :@ any way nevaru sataisīt tā kā es gribu.. :\ ja man sākumā ir skripts, kas čēko vai links atbilst ar datubāzē esošo, tad parādās reģistrācijas forma, bet kad nospiež submit, jeb apstiprina reģistrāciju, tad tas links dzēšas un un tā skripta daļa atkal pārbauda linku un nostrādā errors, ka links neatbilst ar datubāzē esošo... vnk nevaru panākt nekā, lai visu laiku paliek nemainīgs links :\ piem http://localhost/login/register.php?ID=68&...uOzQp6nqIXHHj2e

Link to comment
Share on other sites

  • 2 weeks later...

jhū.. problem solved.1 ^^ palasiju php funkcijas un nomainīju

<form action="<?=$_SERVER['PHP_SELF']?>" method="post">

 

pret

 

<form action="<?=$_SERVER['REQUEST_URI']?>" method="post">

 

un man tagad pat pēc submit nospiežšanas links paliek nemainīgs.. dokuments atgriežas tākā defs ar visu tam piekabināto ^^ yeah ;D

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...