رفتن به مطلب

چک کردن تگ باکس با اطلاعات دیتاباس


پست های پیشنهاد شده

دوستان سلام
من یک فیلد tagbox دارم که نام کاربری افراد رو توی اون وارد می کنم و میخوام بررسی کنم که آیا این نام هایی که وارد شده ، حقیقی هستند یا نه یعنی این نام کاربری در دیتاباس وجود دارد یا نه
value اینپوت یا تگ باکس به این شکل ارسال میشه:

کد: 
ali,reza,ali24

با کد زیر اونها رو جدا میکنم:

کد PHP: 
$D->userss=$_POST['users'];
$D->usersss=explode(",",$D->userss); 

و با کد زیر اطلاعات رو بررسی میکنم:

کد PHP: 
foreach($D->usersss as $i =>$key) {
$D->chisuser $db2->fetch_field('SELECT username FROM users WHERE username="'.$key.'" AND active=1');
if(
$D->userss != "" && $key != $D->chisuser){
$error 1;
}elseif(
$D->userss != "" && $key == $D->chisuser){
$error 0;}
}
if(
$error == 0){
$db2->query('UPDATE ?? SET usernam="'.$D->userss.'" LIMIT 1');
echo 
"عملیات موفق"; exit;
}elseif(
$error == 1){
echo 
" نام کاربری وارد شده وجود ندارد"; exit;

تا وقتی که یک نام کاربری وارد بشه مشکلی نیست ولی وقتی بیشتر وارد کنم مشکل دارم
اگه اطلاعات به شکل زیر وارد بشه (kl نام کاربری که وجود ندارد):
[تصویر:  ymh_2.png]
پیغام میده که عملیات موفق
ولی اگه به این شکل وارد بشه:
[تصویر:  35n3_1.png]
میگه نام کاربری اشتباه
در صورتی که در هر دو مورد یک نام کاربری اشتباه وجود دارد

لینک به ارسال

این بخاطر اون Exit هایی هست که داخل شرط error قرار دادین اینجوری همیشه حلقه فقط 1 بار اجرا میشه اگه اولین ایتم درست باشه پیغام "عملیات موفق" و اگه اشتباه باشه خطای "نام کاربری وارد شده وجود ندارد" میده اون exit ها رو بردارین

لینک به ارسال

ممنون از شما دوست عزیز

کاری که گفتین انجام دادم ولی تغییری نکرد.

مثلا با وارد کردن 3 نام کاربری که وجود دارند و 1 نام کاربری که وجود ندارد اینجوری پیغام میده:

عملیات موفق عملیات موفق نام کاربری وارد شده وجود نداردعملیات موفق

اگه اطلاعات به شکل زیر وارد بشه (kl نام کاربری که وجود ندارد):
[تصویر:  ymh_2.png]
پیغام میده که عملیات موفق
ولی اگه به این شکل وارد بشه:
[تصویر:  35n3_1.png]
میگه نام کاربری اشتباه

به این خاطره که وقتی نام کاربری اولی رو که چک میکنه و وجود نداره ، error برابر 1 میشه ولی در ادامه نام کاربری دوم رو که چک میکنه و چون وجود داره دوباره error برابر 0 میشه واسه همین مشکل پیش میاد

ویرایش شده توسط kingblog
لینک به ارسال

سلام و درود @kingblog

 

کد بررسی رو به شکل زیر تغییر بدید.

$error = array();

foreach($D->usersss as $i => $key) {
	$D->chisuser = $db2->fetch_field('SELECT username FROM users WHERE username="' . $key . '" AND active=1');
	if ($D->userss != "" && $key != $D->chisuser) {
		$error[] = 1;
	}
	elseif ($D->userss != "" && $key == $D->chisuser) {
		$error[] = 0;
	}
}

if (in_array(1, $error)) {
	echo "نام کاربری وارد شده وجود ندارد";
}
else {
	$db2->query('UPDATE ?? SET usernam="' . $D->userss . '" LIMIT 1');
	echo "عملیات موفق";
}

 

لینک به ارسال

ببخشید یه سوال دیگه داشتم

اون نام کاربری ها همونطور که گفتم به این شکل در ستون tousers ذخیره میشن:

ali,reza,ali24,mreza

الان چجوری بفهمم که نام کاربری من داخل ستون tousers هست یا نه

مثلا نام کاربری من reza هست، میخوام فقط ردیف هایی رو که توشون reza هست نشون بده مثلا mreza یا عبارات مشابه رو نشون نده

این کوئری من هست:

$numg=10;
$D->chazmoonforme = array();
	$r	= $db2->query('SELECT * FROM azmoon WHERE status=1 AND tousers like "'.$this->username.'" ORDER BY id DESC LIMIT '.($numg));
	while($o = $db2->fetch_object($r)) {
		$D->chazmoonforme[]	= array($this->network_user_id($o->userid),$o->title,$o->clas,$o->about,$o->id,$o->rating,$o->time,$o->numsoal);
	}
	$D->chazmoonforme	= array_slice($D->chazmoonforme, 0 , $numg);

وقتی که فقط یک کلمه داخل ستون باشه مثلا reza تنها باشه درست کار می کنه

ولی وقتی بیشتر میشه مثلا reza,ali جواب نمیده 

و حتی اینجوری تغییر دادم:

like "٪'.$this->username.'٪"

ولی عبارات مشابه اون رو هم نشون میده

لینک به ارسال

@kingblog

 

والا این حرکت که توی یه رکوردن و با ویرگول جدا شدن حرکت جالبی زیاد نیست توی کوئری زدن.

البته راه داره ولی سخته.

با اپراتور RLIKE که به صورت RegEX سلکت میکنه ببینید میتونید کاریش کنید.

لینک به ارسال

از RLIKE استفاده کردم ولی تا وقتی نام کاربری مشابه وجود نداشته باشه درست کار میکنه

ولی اگه مثلا یک نام کاربری mmm باشه و یک نام کاربری دیگه mmmm باشه، این دو نام کاربری رو یکی حساب میکنه چون توی هر دو سه تا m پشت سر هم بکار رفته یا نام کاربری kmmmlj رو هم همینجور

 

لینک به ارسال
در ۱ ساعت قبل، kingblog گفته است :

از RLIKE استفاده کردم ولی تا وقتی نام کاربری مشابه وجود نداشته باشه درست کار میکنه

ولی اگه مثلا یک نام کاربری mmm باشه و یک نام کاربری دیگه mmmm باشه، این دو نام کاربری رو یکی حساب میکنه چون توی هر دو سه تا m پشت سر هم بکار رفته یا نام کاربری kmmmlj رو هم همینجور

والا سختش کردی کد سلکت پیچیده میشه.

من الگوی خاصی به ذهنم نمیاد.

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...