PDA

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



itech
07-03-2009, 02:34
دوستان، من یک فرم دارم و میخوام وقتی یک خریدار فرم رو پر میکنه و دکمه ارسال رو میزنه،یک شماره به عنوان کد شناسایی خریدار برای من ارسال بشه که من بدونم چه کسی چه شماره شناسایی بهش اختصاص داده شده.میخوام این عدد از 5000 شروع بشه. بعد از اینکه خریدار فرم رو ارسال کرد به خریدار میخوام بگه، آقای ایکس ممنون از سفارش شما، حتما کد شناسایی ایکس را یادداشت نمایید. من فقط مشکلم کد شناسایی هستش که هم باید به من ارسال بشه هم بهطرف و چون باید نفر بعدی کد شناساییش بشه 5001(یعنی یک عدد بیشتر بشه) مشکل دارم.ترجیحا کد php باشه. دوستان کمکم کنید.:41:

MAXXX
07-03-2009, 10:28
کاری نداره که
البته یکم باید بیشتر توضیح بدی
مثلا مشخصات خریدت رو کجا وارد میکنی
مثلا اگه تویه دیتابیست یه جدول داری که توش مشخصات خرید ها ثبت میشه یا هر طوره دیگه یدونه فیلد هم به اسمه id میزاری برایه هر خرید که این id همون کد خرید شماست که به دست خریدار هم میدی
حالا اگه میخای از 5000 شروع بشه دو راه داری یکی اینکه به صورت دستی خرید اول رو خودت وارد کنی و ID اون رو 5000 بزاری برایه خرید هایه بعدی MAX همه ID ها رو میگیری و +1 میکنی و به عنوان ID خرید جدید میزاری
یا میتونی تویه دیتابیست یه جایی برایه ثبت بزرگترین ID یه فیلد در نظر میگیری به اسم MAXIDو اولین بار اون رو 5000 وارد میکنی
هر بار خریدی انجام شد میای این MAXIDرو از اونجایی که وارد کردی ور میداری و +1 میکنی و به عنوان شناسه خرید قرار میدی
بعد خوده MAXID رو هم آپدیت میکنی MAXID+=1 برایه خرید بعدی
اگه متوجه نشدی بگو مشخصات خرید رو چطوری و کجا وارد میکنی تا بیشتر توضیح بدم

_H2_
07-03-2009, 11:48
سلام
شما بالاخره میخواهید اطلاعات را در یک سطر دیتابیس قرار دهید دیگر ... ؟
من MySQL را نمیدانم ولی در SQLServer مفهومی به نام فیلد Autonumber یا Identity وجود دارد.
برای فیلد primarykey جدول این قابلیت را فعال میکنیم و دیگر خود SQLServer مدیریت را برعهده میگیرد و در هر دستور INSERT یک عدد یکتا به فیلد مذکور نسبت میدهد و عدد آن را هم پس میدهد تا مثلاً بتوانید به عنوان کد پیگیری به فرد نشان دهید.

روش MAX که دوست قبلی گفغتند را اصلاً توصیه نمیکنم، چون احتمال بسیار بسیار بسیار زیادی وجود دارد که با حجم چند کاربران آنلاین که همزمان قصد INsert دارند به مشکل برخورد کنید و صفحه شما مدام خطا دهد.

به احتمال زیاد MySQL هم بالاخره باید مفهومی مشابه بر Identity داشته باشد.

neopersia
07-03-2009, 13:17
منم همین نظر رو دارم
اگر قرار باشه اعداد به صورت منظم اضافه بشن احتمال این وجود داره که مشکل پیش بیاد. حالا اگر عدد تصادفی انتخاب میشد احتمال تداخل کمتر بود

توی mysql هم فیلد int که primary key باشه و auto_increment هم باشه وقتی که اینسرت میکنید به صورت خود کار بهش مقدار داده میشه که هر دفعه هم یکی به آخرین مقدار قبلی که اینسرت شده اضافه میشه
کد جدولش تقریباً این فرمی میشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تو سطر آخر هم میشه عددی رو که برای شروع اون فیلد auto_increment در نظر دارید وارد کنید

norozy
07-03-2009, 14:55
سلام منم مشکل ایشون رو دارم با این تفاوت که اولا" با sql وphp کار میکنم ثانیا سایت یه کنفرانس رو طراحی میکنم ثالثا داده هامو توی یه جدول عمومی میریزم به نام person حالا می خوام نویسنده های مقالات رو از داوران با این کد از هم تشخیص بده یعنی اگه کد داور باشه دسترسی بیشتر و اگه کد نویسندهه کمتر باشه میشه دوستان منم رو هم کمی راهنمایی کنن ممنون اگه کد php اونو بذارین

MAXXX
07-03-2009, 20:42
یه سوال هم نسبتا در این ضمینه من داشتم
اگه بخایم یه جدول برایه مشخصات خرید ها بزاریم قاعدتا باید نام کالا هایه خریداری شده هم وارد کنیم
از اونجایی که تعداد کالا هایه خریداری شده از قبل مشخص نیست نمیشه از قبل یه جدول با تعداد خانه هایه مشخص بسازیم و تویه اون وارد کنیم پس باید در هنگام خرید فیلد هایه جدول ساخته بشه که چون تعداد کالا ها برایه هر خرید متفاوته جریان فیلد هایه جدول چی میشه ؟ آیا باید به ازایه هر خرید جدید چک کنیم که فیلدی برایه وارد کردنش وجود داره یا نه که در غیر اینصورت فیلد جدید اضافه بشه و البته این فیلد برایه بقیه سطر ها null میشه
راه دیگه که به نظر من رسید اینه که برایه هر خرید یه تیبل جدا بسازیم که زیاد منطقی به نظر نمیاد
کسی تجربه در این ضمینه داره ؟

_H2_
08-03-2009, 01:09
سلام

از اونجایی که تعداد کالا هایه خریداری شده از قبل مشخص نیست نمیشه از قبل یه جدول با تعداد خانه هایه مشخص بسازیم و تویه اون وارد کنیم پس باید در هنگام خرید فیلد هایه جدول ساخته بشه که چون تعداد کالا ها برایه هر خرید متفاوته جریان فیلد هایه جدول چی میشه ؟ آیا باید به ازایه هر خرید جدید چک کنیم که فیلدی برایه وارد کردنش وجود داره یا نه که در غیر اینصورت فیلد جدید اضافه بشه و البته این فیلد برایه بقیه سطر ها null میشه

راه دیگه که به نظر من رسید اینه که برایه هر خرید یه تیبل جدا بسازیم که زیاد منطقی به نظر نمیاد

دوست عزیز به نظر میرسد شما تا حالا چیزی در خصوص قوانین نرمال سازی بانک های اطلاعاتی نشنیده اید.

نام این چیزی که شما میگویید یک رابطه "یک به چند" یا ساده است!!
یا با لیست کالا ها میشود چند به چند ...

ما روابط پیچیده تری هم داریم.

شما باید سه جدول در بانکتان ایجاد کنید...
- جدول اول اطلاعات کلی خرید را ثبت میکند، کد خرید، نام و آدرس و تلفن مشتریف تاریخ و...
- جدول کالها، شامل کد کالا و نام و قیمت و توضیحات و سایر مشخصات.
- جدول سوم هم زیر اقلام خرید شامل کد خرید و کد حنس و قیمت در لحظه خرید و تعداد


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در واقع جدول سوم فقط شامل یک سری عدد است...
که مهم ترین ان مشخص کردن جفت عدد کدفاکتور/کد کالا است که با هم مشترکاً کلید جدول هستند.

بعداً برای نمایش مقادیر به راحتی میتوانید با دستورات select-join اطلاعات را استخراج کرده و نشان دهید...

کمی فکر کنیدمتوجه خواهید شد...
با پیاده سازی دقیق روابط یک به چند هم نمایش اطلاعات در جداول آسان تر میشود و هم میتوانید یک کالا و یا بینهایت کالا را ثبت کنید بدون اینکه در هیچ مورد نگران کمبود یا هدر رفتن فضا باشید.

(تازه خود مشتریها هم میتوانند عضو شوند و..)
موفق باشید.

itech
08-03-2009, 18:57
خیلی ممنون از اینکه جواب سوال من رو دادید، اما متاسفانه من از sql چیزی نمیدونم و php رو کمی متوجه میشم، چیزی که من میخوام اصلا این چیزا نیست من اصلا با دیتابیس کار نمیکنم. فرمی که برای خرید اینترنتی هستش، خیلی مبتدی هستش و خریدار خودش باید نام محصول درخواستی رو تایپ کنه، من هم گفتم چه خوب میشه وقتی خریدار فرم رو پر کرد، شماره ای بعد از زدن دکمه ارسال برای طرف نشون داده بشه و این در حالی هستش که در فرمی که هنوز پر نکرده و ارسال نکرده خوب نیست کدی به عنوان کد شناسایی گذاشت.
ممنون میشم من رو در این حد راهنمایی کنید که بتونم بدون اینکه با دیتابیس کار کنم کارم رو انجام بدم، حتی اگه این کار کلا اشتباه باشه اصلا برام مهم نیست.

itech
08-03-2009, 19:05
خیلی ممنون از اینکه جواب سوال من رو دادید، اما متاسفانه من از sql چیزی نمیدونم و php رو کمی متوجه میشم، چیزی که من میخوام اصلا این چیزا نیست من اصلا با دیتابیس کار نمیکنم. فرمی که برای خرید اینترنتی هستش، خیلی مبتدی هستش و خریدار خودش باید نام محصول درخواستی رو تایپ کنه، من هم گفتم چه خوب میشه وقتی خریدار فرم رو پر کرد، شماره ای بعد از زدن دکمه ارسال برای طرف نشون داده بشه و این در حالی هستش که در فرمی که هنوز پر نکرده و ارسال نکرده خوب نیست کدی به عنوان کد شناسایی گذاشت.
ممنون میشم من رو در این حد راهنمایی کنید که بتونم بدون اینکه با دیتابیس کار کنم کارم رو انجام بدم، حتی اگه این کار کلا اشتباه باشه اصلا برام مهم نیست.

norozy
08-03-2009, 19:47
اخرش کسی نگفت که این کد شناسایی برای خریدار رو چطور طراحی می کنن ناسلامتی عنوان پست این بود کسی نیست :41::19:

_H2_
08-03-2009, 23:44
سلام

رمی که برای خرید اینترنتی هستش، خیلی مبتدی هستش و خریدار خودش باید نام محصول درخواستی رو تایپ کنه، من هم گفتم چه خوب میشه وقتی خریدار فرم رو پر کرد، شماره ای بعد از زدن دکمه ارسال برای طرف نشون داده بشه
خوب دوست من، شما بالاخره این اطلاعات را کجا ذخیره میکنید؟؟؟
یعنی اصلاً از کد رهگیری بگذریم، شما این اطلاعاتی که کاربر وارد کرده را در بانک ذخیره نمیکنید؟؟؟
یعنی چی؟ ما بالاخره میخواهید ذخیره کنید و بدانید مشتری عزیزتان چه سفارش داده؟؟؟
شما باید این اطلاعات را در دیتابیس ذخیره کنید و پس از درج اطلاعات از دیتابیس کد را تحویل بگیرید. این یک مفهوم بسیار ساده و روزمره کاری برنامه نویسی است.


این در حالی هستش که در فرمی که هنوز پر نکرده و ارسال نکرده خوب نیست کدی به عنوان کد شناسایی گذاشت
کسی همچین چیزی نگفته، اگر شما اطلاعات را در دیتابیس ذخیره کنید و به مطالب پست 3 و 4 دقت کنید، میتوانید بعد از INSERT کد primarykey را تحویل بگیرید که دستورش در SQLServer عبات SELECT @@IDENTITY است.


اخرش کسی نگفت که این کد شناسایی برای خریدار رو چطور طراحی می کنن ناسلامتی عنوان پست این بود کسی نیست من احساس میکنم پست 3 و 4 را شما مطالعه نکرده اید.

حمیعاً موفق باشید.

itech
09-03-2009, 09:07
H2 جان ممنونم ازت.
من اطلاعات وارد شده توسط کاربر رو در ایمیل ذخیره میکنم، دقیقا مثل فرم تماس با ما در سایت. چیزی رو هم که توی ذهنم دارم این هستش که یک فرمی مثل فرم تماس با ما باشه، فقط یک فیلد به نام محصولات درخواست شده باشه که طرف داخلش بتونه تایپ کنه، این فرم اصلا به دیتا بیس کاری نداره و مستقیما به ایمیل info@mysite.com میره.

MAXXX
09-03-2009, 13:13
سلام

دوست عزیز به نظر میرسد شما تا حالا چیزی در خصوص قوانین نرمال سازی بانک های اطلاعاتی نشنیده اید.

نام این چیزی که شما میگویید یک رابطه "یک به چند" یا ساده است!!
یا با لیست کالا ها میشود چند به چند ...

ما روابط پیچیده تری هم داریم.

شما باید سه جدول در بانکتان ایجاد کنید...
- جدول اول اطلاعات کلی خرید را ثبت میکند، کد خرید، نام و آدرس و تلفن مشتریف تاریخ و...
- جدول کالها، شامل کد کالا و نام و قیمت و توضیحات و سایر مشخصات.
- جدول سوم هم زیر اقلام خرید شامل کد خرید و کد حنس و قیمت در لحظه خرید و تعداد


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیددر واقع جدول سوم فقط شامل یک سری عدد است...
که مهم ترین ان مشخص کردن جفت عدد کدفاکتور/کد کالا است که با هم مشترکاً کلید جدول هستند.

بعداً برای نمایش مقادیر به راحتی میتوانید با دستورات select-join اطلاعات را استخراج کرده و نشان دهید...

کمی فکر کنیدمتوجه خواهید شد...
با پیاده سازی دقیق روابط یک به چند هم نمایش اطلاعات در جداول آسان تر میشود و هم میتوانید یک کالا و یا بینهایت کالا را ثبت کنید بدون اینکه در هیچ مورد نگران کمبود یا هدر رفتن فضا باشید.

(تازه خود مشتریها هم میتوانند عضو شوند و..)
موفق باشید.
ممنون یه چیزیایی راجبه نرمال سازی از درسه بانک هایه اطلاعاتی یادم میاد لازم شد برم کتابش رو دوباره بخونم
الان یه چیزایی دستگیرم شد
خوب یه جدول هست که اطلاعات همه کالا ها توشه این درست
یه جدول هم داریم که وقتی یه نفر خرید میکنه اطلاعات ثابت مثل نام و تلفن وکد خرید و .... ثبت میشه توش این هم مشخصه
اما جدول سوم اینطوری که شما میگید شامله
جدول سوم هم زیر اقلام خرید شامل کد خرید و کد حنس و قیمت در لحظه خرید و تعداد
الان مشکل من با فیلد هایه این جدوله سومه
خب یه فیلد میخاد برایه کد خرید یه فیلد میخاد برایه قیمت و ... خب اینا مشخص و ثابته اما کد کالا ها ما که خبر نداریم که چند کالا میخاد بخره و نمیتونیم از قبل براشون فیلد در نظر بگیریم
آیا قراره همه کد هایه خرید رو تویه همین یدونه فیلده ID_Product جای بدیم ؟

یا اگه به ازایه هرکالایه خریداری شده یدونه فیلد بسازیم مثله ID_Product1 و ID_Product2 و ID_Product3 و.....
که اینطوری تویه سطر هایه مختلف جدول به مشکل بر میخوریم

_H2_
10-03-2009, 22:51
سلام

من اطلاعات وارد شده توسط کاربر رو در ایمیل ذخیره میکنم ...
عجب !
پس شما فقط نیاز به یک counter دارید، یک شمارنده 32 بیتی ! یک شمارنده که در قبال هر عملیات یک واحد افزایش یابد ...


برای ایجاد یک شمارنده سه مسله اساسی وجود دارد...
1) این عدد باید برای تمام کاربران منحصر به فرد باشد و در دسترس اشتراکی همه باشد.
راه حل:
استفاده از کلمه static در #C و Shared در VB و ???? در PHP !
یا
استفاده از شی Application در ASP و ASP.Net یا معادلی در PHP
یا
استفاده از یک دیتابیس و محل ذخیره دائمی و مشترک، مثل SQLServer و Oracle و MySQL و یا حتی یک فایل در یک محل مشترک.


2) این عدد باید در زمان افزایش همزمان به وسیله چند ریسمان، درست اضافه شود.
(این یک مشکل قدیمی است که اگر برنامه نویس باشد، حتماً میدانید...
اگر یک محل حافظه همزمان توسط 100 رسمان به علاوه یک شود، نتیجه به علاوه 100 نخواهد بود!)
را حل:
استفاده از lock یا Interlocked در #C و SyncLock یا Interlocked در VB و ؟؟؟؟ در PHP !
یا
استفاده از Application.Lock/Unlock در ASp و ASp.Net و یا معادلی در PHP
یا
استفاده از دستور SQL-UPDATE در یک بانک اطلاعاتی.


3) این عدد میباید ماندگار باشد و با ریست سرور و یا هر ایرادی در سرور، صفر نشود، یعنی باید یک جایی در هارد دیسک ذخیره شود.
راه حل:
استفاده از یک دیتابیس و محل ذخیره دائمی و مشترک، مثل SQLServer و Oracle و MySQL و یا حتی یک فایل در یک محل مشترک.

=====

چون من PHP بلد نیستم، پس کدی نمیتوانم بگذارم که به درد شما بخورد، در این مورد باید دوستان دیگر کمک کنند...

ولی شما خودتان میتوانید بین این سه مشکل و راه حل، تعادلی با معلومات خود ایجاد کنید تا هر سه حل شود.

موفق باشید.

_H2_
10-03-2009, 23:08
سلام

خب یه فیلد میخاد برایه کد خرید یه فیلد میخاد برایه قیمت و ... خب اینا مشخص و ثابته اما کد کالا ها ما که خبر نداریم که چند کالا میخاد بخره و نمیتونیم از قبل براشون فیلد در نظر بگیریم
آیا قراره همه کد هایه خرید رو تویه همین یدونه فیلده ID_Product جای بدیم ؟

یا اگه به ازایه هرکالایه خریداری شده یدونه فیلد بسازیم مثله ID_Product1 و ID_Product2 و ID_Product3 و.....
باز هم تفکر درستی ندارید ... طبق همان قوانین نرمال سازی، اطلاعات و دیتاهای جدید باید در سطرهای جدید قرار بگیرند نه ستون های جدید...

ما جدول سوم را ایجاد کردیم که دیگر مجبور نباشیم برای هر محصول یک فیلد/ستون داشته باشیم تا دستمان باز باشد هر چند سطر را که میخواهیم اشغال کنیم، وگرنه مگر بیکار بودیم جدول جدید سوم را بسازیم ؟

مثلا اگر فاکتور 12 شامل کالاهای 114 و 117 و 220 و 795 و از هر کدام یک عدد ولی با قیمتی متفاوت (یک سری اعداد الکی) باشد جدول سوم چنین خواهد شد ...

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

توجه کنید که کلید این جدول ترکیبی است و فیلد ID_Invoice/ID_Product با هم کلید و یکتا هستند و هر کدام به تنهایی میتوانند بارها تکرار شوند ولی نمیتوانیم دو سطر فاکتور 12 و کالای 114 داشته باشیم (البته فیلد تعداد خرید را داریم...)

نتیجتاً با این مکانیزم به راحتی میتوانید دستورات SQL را هم پیاده سازی کنید.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

مطالب فوق را با دقت و حوصله بیشتر چند بار بخوانید تا کامل برایتان درک شود.


یه چیزیایی راجبه نرمال سازی از درسه بانک هایه اطلاعاتی یادم میاد لازم شد برم کتابش رو دوباره بخونم
کار خوبی است !

موفق باشید.

norozy
16-03-2009, 22:31
میتوانید بعد از INSERT کد primarykey را تحویل بگیرید که دستورش در SQLServer عبات SELECT @@IDENTITY است.
ممنون من یه متغییر به نام id توی دیتابیسم ایجاد کردم که بعد از ورود کاربر یه کد براش تولید میکنه اما اگر این دستور رو بیشتر توضیح بدین که چطور و کجا استفاده میشه ممنون میشم:20:

_H2_
21-03-2009, 12:17
سلام
گمانم این اولین متن من در سال 88 باشد! عید را به تمام دوستان و اعضای سایت تبریک میگم.
=====

ممنون من یه متغییر به نام id توی دیتابیسم ایجاد کردم که بعد از ورود کاربر یه کد براش تولید میکنه اما اگر این دستور رو بیشتر توضیح بدین که چطور و کجا استفاده میشه ممنون میشماول مجدداً تاکید میکنم که من با MySQL کار نکرده ام ...

الآن دو حالت دارد،

1) یا شما میخواهید متن درخواستها را هم در دیتابیستان ذخیره کنید...
که در این صورت بهترین راه همان Autonumber است.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

2) یا شما همچنان تمایلی به ذخیره کل اطلاعات در دیتابیس ندارید و فقط میخواهید از همان ایمیل استفاده کنید و یک کد منحصر به فرد داشته باشید...
در این صورت بهتر است جدولی دو فیلده در دیتابیس داشته باشد که فیلد اول primarykey باشد و فیلد دوم حاوی آخرین عدد تخصیص داده شده.
(میتوانید مقدار فیلد اول را میتوانید هر عددی قرار دهید (یک عدد ثابت و مشخص که مشخصه این تنظیم باشد، مثلاً 100)!!! و از بقیه ظرفیت جدول هم برای ذخیره سایر تنظیمات عددی برنامه استفاده کنید.)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دستور فوق (با شرایط جدول تشریح شده) در Microsoft SQL Server در هر اجرا باعث افزایش و برگردادن یک عدد منحصر به فرد و غیر تکراری میشود. (یعنی کافی است برای هر خرید یک بار فراخانی شود و عدد خروجی گرفته شود.)
میتوان دستورات فوق را یک SP کرد تا ساده تر اجرا و فراخانی شوند.

(میتوانم کد برنامه نویسی هم بگذارم ولی طبیعتاً کدم VB.Net یا C#.Net یا VC++.Net است و PHP نخواهد بود.)
موفق باشید.

norozy
21-03-2009, 18:51
عید همگی مبارک
من مشکلم با دیتابیسمه که sql ه !!!!!!!!!!توی sql همین ویژگی autoincrement رو چطور ایجاد کنم؟

_H2_
22-03-2009, 22:37
سلام
معمولاً در همان ویراستاری که جدول میسازید و نام و نوع فیلدها(ستونها) را مشخص میکنید، اگر کمی به اطراف دقت کنید option ای برای این تنظیم خواهید یافت.

مثلاً در Microsoft SQL Server در زمان تنظیم درج فیلد جدید، در پنجره تنظیمات میتوانید گزینه Identity Specification را فعال کنید و اعداد شروه و پله افزایش را هم مشخص کنید.
(کمی در ادیتور MYSQL تان دقت کنید، گزینه ای خواهید یافت.)

ضمن اینکه با دستورات SQL هم میتوان جدول و فیلد ساخت و فیلدی را برای Autonumber معرفی کرد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

norozy
26-03-2009, 13:51
یه سوال دیگه :11:شما اگه بخواید یه فایل pdf رو تو دیتابیس با php لود کنید چه ن.عی رو براش انتخاب میکنید varchar و varbinry جواب نداده :41:

_H2_
29-03-2009, 13:43
سلام

شما اگه بخواید یه فایل pdf رو تو دیتابیس با php لود کنید چه ن.عی رو براش انتخاب میکنید varchar و varbinry جواب نداده
بدون شک برای ذخیره فایلهای غیر متنی باید از varbinary استفاده کنید.
فرمت داخلی پایه ای فایلهای pdf متنی نیست ...
در SQLServer2005/2008 برای ذخیره فایلها میتوان از (varbinary(MAX و در نسخه های قدیمی تر از image استفاده کرد.
شما از نمونه های مشابه در MYSQL استفاده کنید.

موفق باشید.

norozy
06-04-2009, 11:22
سلام من با sql کار میکنم اما var binery جواب نداده فکر کنم همون image اینجا کار کنه امتحان میکنم اگه مشکلی بود باز مزاحم می شم:31: