kingblog

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

11 پست در این موضوع قرار دارد

دوستان سلام
من یک فیلد 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]
میگه نام کاربری اشتباه
در صورتی که در هر دو مورد یک نام کاربری اشتباه وجود دارد

0

به اشتراک گذاری این پست


لینک به پست

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

2

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

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

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

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

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

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

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

ویرایش شده در توسط kingblog
0

به اشتراک گذاری این پست


لینک به پست

سلام و درود @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 "عملیات موفق";
}

 

2

به اشتراک گذاری این پست


لینک به پست

mehran-b عزیز واقعا عالی بود. مثل همیشه ;)

0

به اشتراک گذاری این پست


لینک به پست

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

اون نام کاربری ها همونطور که گفتم به این شکل در ستون 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.'٪"

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

0

به اشتراک گذاری این پست


لینک به پست

@kingblog

 

این داده ها که با ویرگول جدا شدن همگی توی یه رکورد از ستون tousers هستند؟

1

به اشتراک گذاری این پست


لینک به پست

سلام دوست عزیز

بله 

 

Untitled-1.jpg

0

به اشتراک گذاری این پست


لینک به پست

@kingblog

 

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

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

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

1

به اشتراک گذاری این پست


لینک به پست

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

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

 

0

به اشتراک گذاری این پست


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

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

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

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

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

1

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط ژیهات
      سلام
      چطوری میشه چک کرد که نام نویسی آزاد هست یا نه ؟
      مثلا برای نمایش عبارت (ثبت نام کنید) با یه فانکشن چک کنی ببینی تیک نام نویسی برای عموم آزاد است زده شده یا نه ، اگر زده شده لینک عضویت نمایش داده بشه فقط