PDA

View Full Version : سوال: ساختن کوئری بر مبنای تعداد اشیا موجود در فرم



alismith
چهارشنبه 18 آبان 1390, 13:53 عصر
سلام دوستان

سوال من در رابطه با برنامه های فرم ساز هستش، من می خام بدونم چطوری وقتی یک فرم رو کاربر با تعداد دلخواه از اشیا (textBox - checkBox - radioButton) ساخت، اطلاعات این اشیا از قبیل نام و مقدار را دریافت کنیم و در نهایت چطوری مطابق این فیلدها کوئری مربوط به جدول بانک اطلاعاتی این فرم رو بسازیم؟

در کل سوالم درباره دریافت این اطلاعات (نام و مقدار و خصوصیات اشیا اضافه شده در فرم) و ساخت و نوشتن کوئری مطابق با این اطلاعات، برای ساخت جدول در بانک اطلاعاتی هستش.

*مثلا نام یک textBox در بانک اطلاعاتی نام یک فیلد از جدول ساخته شده برای آن فرم می باشد.

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

با تشکر

رضا قربانی
چهارشنبه 18 آبان 1390, 18:31 عصر
مثلا نام یک textBox در بانک اطلاعاتی نام یک فیلد از جدول ساخته شده برای آن فرم می باشد.


ببینید هر کدوم از اینایی که گفتی یک خاصیت name="Reza" دارن که وقتی برای مثال یک text رو داخل یک form گذاشتی این فرم نام تکس رو به صورت get یا post ارسال می کنه و از طرف دیگه هم این اطلاعات ارسالی رو دریافت می کنی $_POST[Reza""]

alismith
چهارشنبه 18 آبان 1390, 20:26 عصر
سلام.ممنون اقا رضا

ولی سوال من اینکه چطوری این فیلد هایی که کاربر خودش به فرم اضافه می کنه رو به همراه خصوصیاتش ریافت کنم (فزض کنید این کارو با js کردم) و چطوری مطابق این اطلاعات (تعداد و خصوصیات فیلدهای اضافه شده به فرم) یک جدول در بانک اطلاعاتی به صورت خودکار برای این فرم بسازم؟


با تشکر

Mr.Moghadam
چهارشنبه 18 آبان 1390, 22:03 عصر
وقتی شما یه فرم رو ارسال میکنی تمام مقادیر داخل آرایه $_POST قرار میگیره به صورت زیر


array('name'=>'Saeed','website'=>phpro.ir');

حالا شما نیاز داری این آرایه رو به query تبدیلش کنی.

من قبلا یه دونه اینجوری نوشته بودم تقریبا مثل زیر بود :




function insert($table, $insert_values) {

foreach($insert_values as $key=>$value) {
$keys[] = $key;
$insertvalues[] = "'".$value."'";
}

$keys = implode(',', $keys);
$insertvalues = implode(',', $insertvalues);
$sql="INSERT INTO $table ($keys) VALUES ($insertvalues)";
$result = mysql_query($sql)or die (mysql_error());

return mysql_insert_id();
}


پارامتر اول نام جدول و پارامتر دوم ارایه $_POST.
دقت کن که نام عناصر فرمت باید با نام فیلدهای دیتابیست یکی باشه. یعنی اگه فیلد دیتابیست اسمش Fname باید تکست باکس فرمت هم خاصیت nameش Fname باشه.

موفق باشی


پ.ن : این تابع رو الان نوشتم و تستش نکردم ایرادی داشت بگو

alismith
پنج شنبه 19 آبان 1390, 11:13 صبح
سلام مهندس

ممنون از تابعی که نوشتی، ولی این برنامه قراره یک فرم ساز باشه و وقتی کاربر فرم رو ساخت باید مطابق فیلدهایی که در این فرم قرار داده تازه جدول مربوط به این فرم ساخته بشه، و من تو نوشتن dynamic sql برای ساخت جدول هر فرم در بانک اطلاعاتی مشکل دارم، جاوا اسکریپت هم که گفتم، بخاطر این هستش که من با دریافت نام و مقادیر فرم مشکلی ندارم این چیزایی که شما دوستان لطف می کنید و میگید رو بلدم، اما باید مثلا در کنار نام textBox که به عنوان نام یک فیلد در جدول از اون استفاده میشه، یک فیلد هم به نامه style_textBaxName درست کنم و مقدار خصوصیت class رو در این فیلد قرار بدم، اما من نمیدونم هر فرم قراره چندتا فیلد داشته باشه، پس باید کوئری ای که برای ساختن جدول فرم می نویسم کاملا خودکار و پویا باشه و مطابق اطلاعاتی که براش ارسال میشه این جدول رو در بانک اطلاعاتی بسازه، حالا ممنون میشم منو راهنمایی کنید دوستان.

با تشکر

Mr.Moghadam
پنج شنبه 19 آبان 1390, 13:22 عصر
اون چیزی که من فهمیدم اینه که شما یه فرم پویا دارید و کاربر معلوم نیست چندتا عنصر فرمت داشته باشه و میتونه عناصر فرمت رو کم و زیاد کنه به دلخواه خودش.!!
و شما میخوای برای هر باری که کاربر فرم رو ارسال کرد یک جدول جداگانه توی دیتابیست ایجاد کنی. که این جدول باید به تعداد عناصر فرمت فیلد داشته باشه.

اگه همین باشه که من فهمیدم این کار شما به نظر جالب نمیاد. به نظر من اگر بتونی یه الگوی کلی برای جدولت بسازی خیلی بهتره.

مثلا بیای و مقادیر فرمت رو به json تبدیل کنی و داخل دیتابیس قرار بدی بهتره.که لازم نباشه برای هر کاربر یه جدول جدا بسازی.


اگه اشتباه متوجه شدم بیشتر توضیح بده با ذکر مثال.



اما باید مثلا در کنار نام textBox که به عنوان نام یک فیلد در جدول از اون استفاده میشه، یک فیلد هم به نامه style_textBaxName درست کنم و مقدار خصوصیت class رو در این فیلد قرار بدم

این رو که کلا نفهمیدم

alismith
پنج شنبه 19 آبان 1390, 14:26 عصر
سلام دوست عزیز

خیلی ممنون از پیگیری شما

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

با تشکر

Mr.Moghadam
پنج شنبه 19 آبان 1390, 14:37 عصر
خواهش میکنم وظیفه است

میشه یک مثال در این مورد بزنی و بگو چه کاربردی داره این قضیه.تا کامل توضیح ندی نمیشه یک الگوریتم رو پیشنهاد داد.

روال کار رو توضیح بده و این که این اطلاعات و جدولها رو کجا و چجوری میخوای استفاده کنی.تا بهتر بشه راهنمایی کرد


موفق باشی

alismith
پنج شنبه 19 آبان 1390, 16:23 عصر
خوب دوست من این یک برنامه فرم ساز هستش، برنامه های فرم ساز این طوری هستند که به کاربر اجازه میده با drag & drop فرم رو بسازه و بعد این فرم به همراه جدول مربوطش ذخیره میشه، حالا خود فرم میتونه در قالب یک فایل xml ذخیره بشه، و در آخر از این فرم های ساخته شده در قالب یک برنامه کاربردی استفاده میشه، مثلا یک سازمان رو شما در نظر بگیر که قرار هست هر فرمی که ساخته میشه اطلاعاتش توسط کارمندان اون سازمان یا اداره تکمیل و در آخر ذخیره بشه، حالا یک فرم میتونه مربوط به نحوه انجام یک پروژه در شرکت باشه یا مربوط به فهرست مرخصی کارمندان
کل روش ساخت و نگهداری و ویرایش و استفاده از این فرم ها مثل یک برنامه کاربردی هستش و نیاز به کد نویسی نباید داشته باشه، و ما باید کد نویسی کنیم و کاربر نهایی نباید کد ببینه
*در رابطه با جدول میشه phpMyAdmin رو مثال زد که بدون کد نویسی هم برامون جدول درست میکنه و خودش کد رو تولید میکنه

با تشکر

Mr.Moghadam
پنج شنبه 19 آبان 1390, 18:01 عصر
خب باید بیای و با جاوا اسکریپت نوع عناصر فرمت رو تشخیص بدی و برای هر عنصر یه نوع دادهتوی دیتابیس تعیین کنی.

مثلا برای تکست باکس varchar و برای textarea نوع text رو برای فیلد دیتابیست تعیین کنی.و همینجوری تا آخر. در نهایت هم کوئری مربوط به ایجاد جدول رو ایجاد کنی.