الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

دالة التحقق من عدم وجود اسم متكرر في sql

بدأه هالي الدهوكي في 14 أغسطس 2012 · 7 رد · 3,229 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مشكلة مع دالة تأكد من وجود نفس الأسم في صف . php sql

$selectusersall = mysql_query("SELECT umail FROM user WHERE umail='$mail'") or die ("<div id='errorsql'>حدث خطأ</div>");
$rowselectusersall = mysql_num_rows($selectusersall);
$fetchselectusersall = mysql_fetch_assoc($selectusersall);
$rre = $fetchselectusersall['umail'];

elseif($rre == $umail){
	echo "<div id='errorpanelin'>عذرا هذا الإيميل مسجل بأسم شخص اخر</div>";
}

شباب عندي هذا السكربت عملته حتى يجلبلي بيانات المتعلقة بنفس الأسم الذي يدخل ب $mail

و الدالة تعمل عند التسجيل بشكل جيد

لكن عند تعديل البيانات طبعا سيجلب كل البيانات الي في القاعدة و اكيد راح يقولي البريد مستخدم من قبل شخص اخر ...

ما الحل يعني عند تعديل اي بيانات الإيميل يقولي ايميل موجود لكن هو ما موجود لشخص اخر فقط موجود لنفسه ....

Professional Technology Information

HTML , CSS , PHP , JQuery , Action Script

Photographic Designer & websites Designer : Dinamic Sites & photographic Sites & Flash Sites

IF YOU WANT SEE MY WORKS

VISIT THIS LINK

Prince Designs

#2

هل يمكنك وضع شفرة الصفحة كاملة؟

هل قمت باستخدام الشفرة التي ذكرتها كتابع خاص function قمت بإنشائه للاستخدام أثناء عملية التسجيل register والتحرير edit؟

إن كان كذلك فببساطة افصل بين العمليتين بتابعين،

الأول يعتمد على mysql_num_rows(..) في معرفة عدد السجلات المعادة (إن كانت القيمة 0 فالايميل غير مستخدم، 1 فالايميل مستخدم، 2 وأكثر هناك خلل ما لأنه تم تسجيل ايميل مشترك لشخصين مختلفين) ولا تحتاج فعلياً لقراءة محتوى السجل ومقارنته بالبريد لأن الاستعلام لم يكن ليعيده لك أساساً لو لم يكن متطابق.

الثاني فقط لقراءة السجلات أثناء عملية التحرير.

بكل الأحوال،

التصميم الجيد للتوابع مهم جداً، فكثرة التوابع بدون داع أمر مكلف وغير مفيد. أيضاً فالاستغناء عن استخدام التوابع سيزيد من تعقيد الشفرة ومن ضعف القدرة على تطويرها في المستقبل.

لذلك عليك الاهتمام جيداً بالطريقة التي تكتب بها توابعك، ويمكنك الاستفادة من الأفكار الموجودة في تطبيقات كثيرة منتشرة عبر الانترنت.

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

شكرا لك اخي Xacker سأوضح لك بشكل اخر ...

اخي إن شاء الله ستفهم ما اقصده

شوف بدي اعمل SELECT لل TABLE الخاص ب user

بدي اجلب كل البيانات عدا عدا عدا يعني بدون بيان الذي يدخل في ال POST

و اذا فعلنا ذالك اذا يعدل كل شئ عدا الإميل سيتحقق الأمر بنجاح و اذا بدلنا ايميل سيتحقق ايضا و اذا كان موجود سيقول لي البريد موجود سجل ببريد اخر ...

يعني مثلا ----

SELECT username FROM user WITHOUT='POST'

الكلمة without للمثال فقط يعني يجلب كل الإيميلات ما عدا ال ايميل الموجود في input

انا استخدم هذا الإستعلام في التسجيل و يعمل بشكل افضل من جيد

$selectusersall = mysql_query("SELECT mail FROM user WHERE mail='$mail'") or die ("<div id='errorsql'>حدث خطأ</div>");
$rowselectusersall = mysql_num_rows($selectusersall);
$fetchselectusersall = mysql_fetch_assoc($selectusersall);
$rre = $fetchselectusersall['mail'];

elseif($rre == $umail){
        echo "<div id='errorpanelin'>عذرا هذا الإيميل مسجل بأسم شخص اخر</div>";
}

لكن في التعديل يحصل خطأ و انا متأكد ان هذه ليست صالحة للتأكد من بيانات التعديل لانه انا قلت في الدالة هذه

اجلب كل البيانات مثل ما يكون مدخل في ال post

مثلا لو دخلت hali@yahoo.com يجلب hali@yahoo.com و اذا لم يكن موجود يتابع الخطوة القادمة

لكن في هذا المثال اريد اجلب كل البيانات ما عدا بيان الذي موجود في input الخاص ب name="umail"

تم تعديل هذه المشاركة بواسطة Xacker في 14 أغسطس 2012 في 20:58

Professional Technology Information

HTML , CSS , PHP , JQuery , Action Script

Photographic Designer & websites Designer : Dinamic Sites & photographic Sites & Flash Sites

IF YOU WANT SEE MY WORKS

VISIT THIS LINK

Prince Designs

#4

عند التسجيل تستخدم الجمله كما هي

SELECT mail FROM user WHERE mail='$mail'

أما عند التعديل تستخدم الجمله التاليه للتأكد من عدم وجود تكرار

SELECT mail FROM user WHERE mail='$mail' and id != '$user_id'
2

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#5
هالي الدهوكي كتب:

لكن في هذا المثال اريد اجلب كل البيانات ما عدا بيان الذي موجود في input الخاص ب name="umail"

المفروض أن الاستعلام الثاني الذي طرحه الأخ بسام سيحل مشكلتك لأن فرز SQL سيكون على أساس:

1- إعادة سجلات جميع المستخدمين عدا المستخدم الحالي

2- إعادة السجل الذي يتطابق فيه البريد مع البريد المدخل من المستخدم، وبالتالي في حال وجود سجل فهذا يعني أن الايميل مستخدم من قبل عضو آخر.

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#6

اخي كودك بالنسبة للتسجل وماتريد عمله بالنسب للتعديل صحيح يقوم بالمهمة لكن غير عملي

انت وضعت التحقق عن طريق لغة البرمجة والاولى انك تضعه في قاعدة البيانات وليس عبر لغة البرمجة عشان يكون شغلك مضبوط

اول شي ضع القيد UNIQUE على حقل البريد الالكتروني في جدول الاعضاء الي هو عندك اسمه user

طبعا ً عند الادراج او التعديل في حالة كان هناك اي تكرار للقيم راح ترجع لك قاعدة البيانات خطأ ثم في لغة البرمجة اعمل فحص لهذا الخطأ

واطبع رسالة للمستخدم

هذا مثال للتوضيح

	mysql_query('insert into Users(address,email) values("mukall","mmm@mymm.com")');
	if( mysql_error())
	{
		if( mysql_errno() == 1062 )
			echo 'Duplicate entry';
		else
			echo mysql_error();
	}else
		echo 'done';

الخطأ تبع تكرار البيانات رقمه 1062 اذا وجد يطبع للمستخدم رسالة معينة اما اذا في خطأ اخر يطبع رسالة الخطأ

في حالة عدم وجود اي اخطاء يطبع Done

ان شاء الله تكون وضحت الفكرة

تم تعديل هذه المشاركة بواسطة M.B.O في 15 أغسطس 2012 في 07:56

2

M.B.O

Mohamed Bin Othman

إبن المكلا

يابني البشر ماذا فعلتم بالبشر !!

إسـألـنـي

#7

شكرا لك اخي mbo و تم الحل من شرح الأخ بسام العيساوي

مرة اخرى شكرا لك ....

Professional Technology Information

HTML , CSS , PHP , JQuery , Action Script

Photographic Designer & websites Designer : Dinamic Sites & photographic Sites & Flash Sites

IF YOU WANT SEE MY WORKS

VISIT THIS LINK

Prince Designs

#8

أرجو ممن قام بترشيح إجابتي أن يقوم بإلغاء الترشيح حتى تذهب النقاط لمستحقّيها لأني لا أستطيع سوى إلغاء الترشيحات التي أقوم بها أنا.

وشكراً.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

مواضيع مشابهة