PDA

View Full Version : سوال: اکشن دادن به دکمه های تولید شده در حلقه



A_Salimi
جمعه 13 تیر 1393, 01:49 صبح
با سلام.
من در حال طراحی یک فروشگاه ساده هستم.کالاهایی که قرار است به فروش برسند را به همراه سایر ویژگی های آنها ،در یک جدول به نمایش گذاشته ام.در یکی از ستونهای برای هر کالا یک دکمه افزودن به سبد خرید ساخته ام.مشکل اصلی من اکشن دادن به هر دکمه است که در حلقه for ایجاد می شود.
قسمتی از کد من را لطفا ببینید:





for($i = 0; $i < $num; $i ++)
{
$row = mysql_fetch_row($result);
echo '<tr>';
echo "<td><b> $row[1]</b> </td>";
echo "<td><b> $row[2]</b> </td>";
echo "<td><b> $row[3]</b> </td>";
echo "<td><b> $row[4]</b> </td>";
$imagepath="Images/".$row[1].".jpg";
echo "<td> <img src=$imagepath > </td>";
echo '<td> <input name="buy" type="button" value="سفارش کالا"></input> </td>';
echo '</tr>';
}
mysql_close();
?>



وقتی که تعداد دکمه های من بسته به تعداد سطرهای موجود در دیتابیس تغییر می کند و در حلقه for ایجاد می شود برای ایجاد اکشن دلخواه برای دکمه باید دقیقا چکار کنم؟؟؟

ravand
جمعه 13 تیر 1393, 10:12 صبح
الان اگه بخوای به فرمت یک اکشن بدی باید دستور اکشن رو قبل از حلقه یعنی آکولاد} قرار بدی.

smksmk
جمعه 13 تیر 1393, 10:16 صبح
سلام ، اینجوری :



<?php for($i = 0; $i < $num; $i ++) {
$row = mysql_fetch_row($result);
echo "<tr>";
echo "<td><b> $row[1]</b> </td>";
echo "<td><b> $row[2]</b> </td>";
echo "<td><b> $row[3]</b> </td>";
echo "<td><b> $row[4]</b> </td>";
?>
<td> <img src="Images/<?php echo $row[1]; ?>.jpg" > </td>
<td> <input name="buy" type="button" value="سفارش کالا"></input> </td>
</tr>
<?php } ?>

مهرداد سیف زاده
جمعه 13 تیر 1393, 11:08 صبح
اون طور که از سوال شما فهمیدم باید قبلا NET. کار کرده باشید. در ASP.NET شما میتونید به هر دکمه یک action بدید و وقتی بر روی اون کلیک شد کار خاصی رو انجام بده. ولی این در php فرق میکنه و شما چنانچه قصد دارید با کلیک کردن بر روی دکمه ای کار خاصی انجام بشه باید یکی از راه های زیر رو انتخاب کنید:
۱- استفاده از javascript و نوشتن function ای که که با کلیک روی دکمه شما رو به پردازش اون کار هدایت میکنه. مثلا بصورت زیر:

<td> <input name="buy" type="button" value="سفارش کالا" onClick="buyProdunct('productCode');"></input> </td>';

<script type="text/javascript">
function buyProdunct(productCode)
{
//the code for process buy uses productCode
}
</script>
۲- کلیک روی دکمه و هدایت کاربر به صفحه خرید یا پردازشهای دیگر توسط url‌و متد GET که برای این کار باید بصورت زیر عمل کنید:
در صفحه دیدم محصولات دکمه ها رو بصورت زیر در میارید

<button onclick="location.href='buy.php?productCode=12'">سفارش کالا</button>
که با کلیک کردن روی هر محصول به صفحه buy هدایت میشه همراه با کد همون محصول و در صفحه buy اون کد رو گرفته و پردازش رو انجم میدید

<?php$productCode = isset($_GET['productCode'])?$_GET['productCode']:null;
if ($productCode != null) {
//process of byf product by code
}
?>
البته بعد از پردازش میتونید از طریق header کاربر رو دوباره به همون صفحه محصولات هدایت کنید تا بازم محصول انتخاب کنه

A_Salimi
جمعه 13 تیر 1393, 11:32 صبح
ممنون از دوستان و علی الخصوص جناب مهرداد 66.

مطالبی که گفتید رو تست می کنم و نتیجه رو اعلام می کنم.

A_Salimi
جمعه 13 تیر 1393, 12:28 عصر
<"'button onclick="location.href='buy.php?productCode=12'">سفارش کالا</button>


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

اگه این کد تو حلقه قرار بگیره و بخوام هر دکمه کاربر رو به صفحه خرید محصول مورد نظر هدایت کنه و کد به درستی تشخیص داده بشه من کد رو اینجوری تغییر دادم (که البته کار نکرد)







<td> <button onclick="location.href='buy.php'? productCode=<?php $row[2]?>">سفارش کالا</button> </td>';




مشکل دقیقا کجاست؟

در مورد این خط هم لطفا توضیح بیشتری بدید:


<?php$productCode = isset($_GET['productCode'])?$_GET['productCode']:null;

smksmk
جمعه 13 تیر 1393, 12:42 عصر
کد صحیح :
؟ فقط نقش جداکننده رو داره و در اینجا productCode که بعد از این علامت میاد ، نام متغیری هست که به صورت GET به صفحه جدید ارسال میشه ، یعنی صفحه buy


<?php
for($i = 0; $i < $num; $i ++)
{
$row = mysql_fetch_row($result);
echo "<tr>";
echo "<td><b> $row[1]</b> </td>";
echo "<td><b> $row[2]</b> </td>";
echo "<td><b> $row[3]</b> </td>";
echo "<td><b> $row[4]</b> </td>";
?>
<td> <img src="Images/<?php echo $row[1]; ?>.jpg" > </td>
<div style="text-align: left;"><td>
<button onclick="document.location.href='buy.php?productCode=<?php echo $row[2]; ?>'">سفارش کالا</button>
</td></div>
</tr>
<?php } ?>

مهرداد سیف زاده
جمعه 13 تیر 1393, 13:04 عصر
نقش جدا کننده چیه؟
دوستان اگر تسلط ندارید بنده خدا رو به اشتباه نندازید. اگر که میدونید جواب رو خوب براش واضح توضیح بدید و یه سری از مطالب رو لینک بدید.
واقعا به جوابهای دوم و سوم نگاه بندازید هنوز سوال طرف رو متوجه نشده فورا اومدم جواب نوشتن

ببینید دوست عزیز شما میخواید کاربر محصول رو انتخاب کنه. در برنامه نویسی تحت وب باید با ارسال مقادیر از طریق متد get و post آشنایی داشته باشید. ابن متدها مقدارهایی رو از یک صفحه به صفحه دیگه منتقل میکنن. در متد get مقادیر در url قرار میگیره و منتقل میشه ولی در متد post مقادیر در درون بسته http قرار میگیره. هر چند url هم جزوی از پکت بسته http‌ولی توسط کاربر قابل مشاهده هست. ولی در متد Post کاربر اون رو بصورت علنا نمیبینه و پشت پرده ارسال میشه. البته جزئیات دبگر هم داره که باید برید در جاهای دیگه مطالعه کنید
در متد get برای ارسال میقادیر در همین کدی که قرار داریم به این صورت هست

buy.php?productCode=50
یعنی این متغیر productCode رو با مقدار 50 ارسال کن برای فایل buy.php
و حالا در فایل buy.php شما باید مقادیر رو دریافت کنید که اون کدها درباره دریافت مقادیر هست
الببته اون کدی هم که نوشتید برای ارسال مقدار productCode درست هست فقط شاید شما مقادیر رو بین ' یا " به اشتباه قرار دادید و داره ارور میده

A_Salimi
جمعه 13 تیر 1393, 13:12 عصر
با کلیک روی دکمه تنها اتفاقی که می افته باز شدن یک صفحه خالی است.
من در صفحه buy.php کد زیر رو نوشتم.چرا کار نمیکنه؟


<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>صفحه خرید</title>
</head>

<body>
<?php
$productCode = isset($_GET['productCode'])?$_GET['productCode']:null;
if ($productCode != null) {
echo "your kala code is".$productCode;
}
?>
</body>

</html>

smksmk
جمعه 13 تیر 1393, 13:18 عصر
شما کد من رو یه نگاه میکردی لازم نبود اینقدر مطلب بنویسی ، شاید شما به زبان دیگه ای برنامه نویسی میکنین ، لطفاً یکی از برنامه نویس های php هر دوکد من رو تست کنه ، ممنون میشم .
در کد اولی که من نوشتم ایشون مشکلشون این بود که نمیتونستند داخل button با جاوااسکریپت کار کنند که با باز و بسته کردن کد php قبل و بعد کدهای button این مشکل حل میشه ،
در مورد پاسخ دوم من ، چون نمیدونستند که چطور با جاوااسکریپت و php همزمان کار کنند ، کد رو براشون نوشتم ، شما یک ایراد اگه از این دو تا کد گرفتین حرف شما درسته ،
ضمناً علامت سوال غیر از نقش جداکننده از اسم صفحه و برای نمایش اینکه یک متغیر داره ارسال میشه به صفحه buy چیکار میکنه ؟؟؟
دوست عزیز A_Salimi شما کدمن رو تست کنین ، نتیجه رو بفرمائید .

مهرداد سیف زاده
جمعه 13 تیر 1393, 13:23 عصر
در صفحه buy شما کد کالا رو دارید حالا فرض کنید در asp.net هستید و کاربر با کلیک روی دکمه کد کالا رو بدست آوردید حالا باهاش هر کاری دوست دارید انجام بدید.

دوست عزیز smksmk جدا کننده یعنی *,-,/,?,\,|,'," و هر کاراکتر دیگری ولی وجود علامت ? در url یعنی شروع تعریف یک متغیر get و بعد از اون نام متغیر میاد و با یک = مقدارش در جلوش قرار میگیره
بعد هم دوست ما با دیدگاه اکشن اومدن توی php و شما دارید درباره نحوه قرار دادن کد php‌ در بین تگهای html راهنمایی مکینید. آیا واقعا جواب سوال شما پیاده سازی یک روش action در php هست؟ آیا کدی که بهش دادید اجرا کنه میتونه خرید محصول رو انجام بده؟ کجای جواب اول شما کد جاوااسکریپت رو راهنمایی کردید؟
بعد که من اومدم راهنمایی کردم اومدید دوباره بر طبق راهنمایی من براش کد نوشتید. من مشکلم با جوابهای اول شما بود

smksmk
جمعه 13 تیر 1393, 13:30 عصر
جناب مهرداد من باور نمیکنم که شما منظور من رو متوجه نشده باشین چون یه برنامه نویس مبتدی هم متوجه میشه که وقتی دارم به یک برنامه نویس asp میگم علامت ؟ نقش جدا کننده داره ، یعنی اینکه فکر نکن چیز خاصیه ، اسم متغیر رو هم که توضیح داده بودم یعنی
productCode
امیدوارم هم کدها رو ببینید هم اینکه متوجه منظورم شده باشین .

A_Salimi
جمعه 13 تیر 1393, 13:52 عصر
از اینکه وقتتون رو گرفتم واقعا شرمندم:ناراحت:




در صفحه buy شما کد کالا رو دارید حالا فرض کنید در asp.net هستید و کاربر با کلیک روی دکمه کد کالا رو بدست آوردید حالا باهاش هر کاری دوست دارید انجام بدید.

دوست عزیز همون طور که گفتم یک صفحه خالی میاد در پست 9 من این خط رو اضافه کردم:


echo "your kala code is".$productCode;



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


<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>فروشگاه</title>
</head>

<body>

<div align = "center">
<table border = "1" >
<tr>
<th> کد کالا </th>
<th> نام کالا</th>
<th> موجودی</th>
<th> قیمت </th>
<th> تصویر </th>
<th> سفارش </th>
</tr>

<?php
$db = mysql_connect("localhost", "root", "salimi");
if(!$db)
{
echo 'Error : Cannot connect to MySQL server.';
exit;
}
mysql_select_db('shop');
mysql_query("SET NAMES 'UTF8'");
mysql_query("SET character_set_connection = 'utf8'");
$query = "select * from kala";
$result = mysql_query($query);
if(!$result)
{
echo "Query not executed.";
exit;
}
$num = mysql_num_rows($result);

for($i = 0; $i < $num; $i ++)
{
$row = mysql_fetch_row($result);
echo '<tr>';
echo "<td><b> $row[1]</b> </td>";
echo "<td><b> $row[2]</b> </td>";
echo "<td><b> $row[3]</b> </td>";
echo "<td><b> $row[4]</b> </td>";
//$imagepath="Images/".$row[1].".jpg";
?>
<td> <img src="Images/<?php echo $row[1]; ?>.jpg" > </td>
<td> <button onclick="location.href='buy.php? productCode= <?php $row[2];?>'">سفارش کالا</button> </td>';


</tr>
<?php }mysql_close(); ?>


</body>
</html>

و اینم کد صفحه buy



<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>صفحه خرید</title>
</head>

<body>

<?php
$productCode = isset($_GET['productCode'])?$_GET['productCode']:null;
if ($productCode != null) {
echo "your kala code is".$_GET['productCode'];
}
?>

</body>
</html>

با تشکر

مهرداد سیف زاده
جمعه 13 تیر 1393, 14:00 عصر
tion.href='buy.php? productCode= <?php $
چرا این همه فاصله گذاشتید
دقیقا باید چسبیده به هم باشه و این فاصله باعث میشه در صفحه buy مقدار رو دریافت نکنید

smksmk
جمعه 13 تیر 1393, 14:09 عصر
120765
اشتباهتون در فایل buy بود که مقدار رو echo نکردین و همچنین چند مورد دیگه در ایندکس . دانلود کنین .

smksmk
جمعه 13 تیر 1393, 14:12 عصر
یادم رفت بگم fetch کردن نباید داخل for باشه ، چون یبار fetch کافیه ، که در فایل بالا درست شده .

A_Salimi
جمعه 13 تیر 1393, 14:28 عصر
چرا این همه فاصله گذاشتید
دقیقا باید چسبیده به هم باشه و این فاصله باعث میشه در صفحه buy مقدار رو دریافت نکنید

دوست گرامی با برداشتن فاصله مشکل برطرف نشد.در ضمن اگه ممکنه در پست 14 قسمت کد رو اصلاح کنید.چون درست دیده نمیشه.



اشتباهتون در فایل buy بود که مقدار رو echo نکردین و همچنین چند مورد دیگه در ایندکس . دانلود کنین .

دوست عزیز کد شما رو هم دانلود کردم.بعضی از echo ها مشکل ساز شدند.

مثلا من در خط زیر دارم مسیر عکس کالا رو ایجاد میکردم که echo کاملا بهم میزنه

<td> <img src="Images/<?php echo $row[1]; ?>.jpg" > </td>


باور کنید این مشکل من حل نشد.اگه اکانت skype دارید لطفا با من تماس بگیرید.ممنون abbas.salimi62

smksmk
جمعه 13 تیر 1393, 14:31 عصر
دوست عزیز کدی که گذاشتم 100% درسته ، دانلودش کنین متوجه بشین کجای کارتون اشتباه بوده ،

A_Salimi
جمعه 13 تیر 1393, 14:38 عصر
دانلود و اجرا کردم.صفحه buy خالیه!!!!

smksmk
جمعه 13 تیر 1393, 14:41 عصر
شما به صفحه buy کاری نداشته باش ، اون درسته ، شما 100% در گرفتن اطلاعات از دیتابیس مشکل دارین ، جدول کالا رو اطلاعات وارد کردین ؟

A_Salimi
جمعه 13 تیر 1393, 15:29 عصر
فایل پست 15 درست است و جواب داد.با تشکر.