PDA

View Full Version : مشکل در ++i$ اضافه نمیشه.



rouzbehtest
جمعه 20 شهریور 1388, 18:10 عصر
سلام.
دوستان خوشحالم از پیوستن به گروه شما.

من تازه کار هستم و php را با دستوراتش در حال آموختن هستم.تا درس که پیش رفتیم من یک مثال از آموخته هایم نوشته ام. اما متاسفانه مشکلی در اضافه کردن یک واحد به i دارم. نمی دونم از کدوم حلقه استفاده کنم چون حلقه ها رو نمی تونم ببندم و تا آخر میره.

کل خط این هست :


<?php
$i=0;
$name=$_POST['name'];
switch ($name) {
case "Ali";
echo "<center>Tank Ali</center>";
break;
default;
echo "Sorry ! is't True. Begin <b>$i</b><br>",$i++;
echo "<input type=text name=\"name\"><br><input type=\"submit\">";
}
?>


من 0=i$ قرار می دهم ولی همان طور که گفتم نمی دونم از کدوم حلقه استفاده کنم.
دوستان مهندس عزیز اگر می شود می توانید من را کمک کنید ؟:قلب:

rouzbehtest
جمعه 20 شهریور 1388, 18:37 عصر
جناب، طراح برتر :
از پاسختان ممنونم.
ولی چرا این کار که حتما باید میشد ولی اینجا متاسفانه یادم رفته بود قرار دهم. i را هم تعریف می کنم اما هر بار میره از ابتدا که شروع میکنه به 0=i که میرسه، دوباره مقدارش رو 0 میزاره.
من نمیدونم با کدوم حلقه میشه این مشکل را برطرف کرد یا اصلا بدون حلقه هم میشه یا نه ؟

سپاسگذارم.

__ziXet__
جمعه 20 شهریور 1388, 20:19 عصر
این رو ببین :


$i = 0;
$arr = array('Mohammad','Ali','Mahdi','Reza');
foreach($arr as $value)
{
echo '$i = ' . $i . '<br />';
$i++;
}
بابا با اون foreach بدبختو بیشتر گیج میکنی!

afi_program
شنبه 21 شهریور 1388, 00:26 صبح
بابا با اون foreach بدبختو بیشتر گیج میکنی!
چرا؟؟؟؟؟؟؟
به نظر من که کد مناسبی برای توضیحه.به اندازه کافی هم واضحه.البته بهتره کسی که سوالو پرسیده نظر بده.

rouzbehtest
شنبه 21 شهریور 1388, 00:33 صبح
این رو ببین :



بابا با اون foreach بدبختو بیشتر گیج میکنی!

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

یه توضیح دیگه بدم :
من یک فرم در HTML دارم که یک رشته نام را می گیره و به صفحه php که اسکریپ ما اونجا هست ارجاع میشه.
حالا اگه رشته نام اگه مخالف Ali باشه دوباره باید یک نام را وارد کنه. (مثل نام کاربری).:لبخندساده:
تا اینجا مشکلی نیست و به خوبی کار میکنه.مشکل من اینجاست که می خوام تعداد هر بار نام اشتباه رو که وارد میشه بشماره یعنی ++i بشه. در ادامه کد پایین.


echo "Sorry ! is't True. Begin <b>$i</b><br>",$i++;


ممنونم طراح برتر.

sama01
شنبه 21 شهریور 1388, 00:54 صبح
دستور مربوط به اضافه شدن i را در خطی مستقل بنویس.

rouzbehtest
شنبه 21 شهریور 1388, 12:37 عصر
دستور مربوط به اضافه شدن i را در خطی مستقل بنویس.

آره همه راه رو امتحان کرده ام، اما جواب نمیده. یکبار که if و else رو می خونه میره از ابتدای <?php شروع میکنه به خوندن و وقتی به 0=i$ میرسه مقدار قبلیش رو برابر 0 میکنه.
:لبخند: میگم بچه ها من که تازه یادگیری رو شروع کردم، هیچی نشده یه منطقی آوردم که حوابش فعلا مجهوله نه ؟

دوستان عزیزم شما کد مربوط به این بحث را که در ابتدای تاپیک گذاشتم اجرا فرموده اید؟ شاید اونطوری بهتر باشه که منظور من دقیقتر آشکار بشه.

:اشتباه: عجب مشکلی هست ها ؟

rouzbehtest
شنبه 21 شهریور 1388, 12:55 عصر
دوست عزیز این عملگر هستش , شما بیشتر سعی کن که loop ها یا حلقه های تکرار رو یاد بگیری !
و اینکه کدی که شما در بالا نوشتی یک شرط یا سوئیچ هستش !!
اصلا معنی دار نیست که در این بلوک شما از ++ استفاده کنید !

کاملا درسته بله جناب مهندس، من فقط از شرط استفاده کرده ام و باید از حلقه استفاده بشه.
من همه حلقه ها را خونده ام و از for , while و... امتحان کرده ام. اما در اولین تاپیک که گفته نوشته بودم، نمی تونم حلقه رو کنترل کنم و ببندمش و تا آخر پیش میره که سرانجام باید Ie رو endtask کرد اگه هنگ نکنه.

خود ++=i$ را من در حلقه ها اجرا می کنم و موفقم و یعنی مشکلی نیست. مشکل در زمانی هست که می خواهم کد بالایی دستوراتش اجرا بشه .:خجالت:

sama01
شنبه 21 شهریور 1388, 13:35 عصر
یه چیزی:
شما مقدار i را چگونه نگه می‌دارید؟ وقتی کاربر نام جدیدی وارد می‌کنه، به این صفحه ارجاع می‌شه و در همان خط اول، مقدار i صفر تعیین می‌شه.
شما باید به یک روشی، علاوه بر مقدار name مقدار i‌ را هم به صفحه بفرستی.
پیشنهاد می‌کنم در کنار textbox مربوط به name، یه hidden برای i بگذاری و در شروع صفحه مقدارش رو بگیری.

مثلا چنین چیزی:


<?php
$name=$_POST['name'];
$i = $_POST['i'];
switch ($name) {
case "Ali";
echo "<center>Tank Ali</center>";
break;
default;
echo "Sorry ! is't True. Begin <b>$i</b><br>";
$i++;
echo '<form action="" method="post">';
echo '<input name="i" type="hidden" value="'.$i.'">';
echo '<input type="text" name=\"name\"><br><input type=\"submit\">';
echo '</form>';
}
?>

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

برنامه‌های تحت وب شرایط خاصی دارند. یکی از این شرایط اینه که مقدار متغیر‌ها حفظ نمی‌شه.

rouzbehtest
شنبه 21 شهریور 1388, 14:17 عصر
دوست عزیز دومین پارامتر حلقه for تعیین محدودیت یا تعداد تکرار است :


<?php
for($i=0;$i<=10;$i++)
{
echo $i . '<br />';
}
?>

:لبخندساده: : من این کد رو هم قرار داده بودم نمیشه. درسته اعداد به ترتیب اضافه میشه ولی تا برقراری شرط که مثلا 10 هست، 10 بار textbox میاره.
بازم شکست خوردم.


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

مثلا چنین چیزی:


<?php
$name=$_POST['name'];
$i = $_POST['i'];
switch ($name) {
case "Ali";
echo "<center>Tank Ali</center>";
break;
default;
echo "Sorry ! is't True. Begin <b>$i</b><br>";
$i++;
echo '<form action="" method="post">';
echo '<input name="i" type="hidden" value="'.$i.'">';
echo '<input type="text" name=\"name\"><br><input type=\"submit\">';
echo '</form>';
}
?>

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

برنامه‌های تحت وب شرایط خاصی دارند. یکی از این شرایط اینه که مقدار متغیر‌ها حفظ نمی‌شه.
:لبخندساده:: نه نمیشه چون فرقی نداره که وقتی به default میرسه میره از اول همون مقدار اولیه رو قرار میده.

تو c یا vb خیلی راحته و به قول شما :


برنامه‌های تحت وب شرایط خاصی دارند. یکی از این شرایط اینه که مقدار متغیر‌ها حفظ نمی‌شه.


من به اون قسمت درس php نرسیدم ببینم، دوستان عزیزم ما دستوری شبیه GO داریم ؟ چون اینطوری اصلا نمیشه عجیبه یعنی راه حلش هیچی نیست ؟

sama01
شنبه 21 شهریور 1388, 16:50 عصر
این کد اصلاح شده است. ایراد منطقی نداشت. ایراد نگارشی داشت:
تست کردم جواب می‌ده. اصولا هم باید جواب بده.

<?php
$name=$_POST['name'];
$i = $_POST['i'];
switch ($name) {
case "Ali";
echo "<center>Tank Ali</center>";
break;
default;
echo "Sorry ! <b>$name</b> is't True. Begin <b>$i</b><br>";
$i++;
echo '<form method="post">';
echo '<input name="i" type="hidden" value="'.$i.'"/>';
echo '<input type="text" name="name"/><br/><input name="submit" type="submit" />';
echo '</form>';
}
?>

rouzbehtest
شنبه 21 شهریور 1388, 23:54 عصر
:لبخند: - :بوس: : sama01 جان ممنون برای یک دنیا.
این اسکریپ که مثل قبلی بود چرا پس الان شد ؟ قبلی رو هم من همینطور درست کردم.؟ یعنی الان چطوری شد که عبارت :


$i = $_POST['i'];

بعد قرار دادن مقدار جدید در i همون مقدار ذخیره شده به اسکریپ بر می گرده. درسته این روشش هست. (ولی نمی دونم میشد با یکی از حلقه ها هم این کار رو انجام داد؟) بااین روش میشه از حلقه هم استفاده کرد . عالیه.
با خوندن این خط مقدارش ریست نمیشه و i رو ذخیره میکنه ؟ خیلی 20 شد. به هر حال من برایم یک تجربه بزرگی شد. ممنونم.
خیلی ممنونم.

sama01
یک شنبه 22 شهریور 1388, 00:30 صبح
گفتم که کد قبلی بیش‌تر جهت نمایش روش انجام کار بود و روی نگارشش دقت نشده بود.
در آن کد، اصلا اسمی ارسال نمی‌شد. چون کد‌ها اشتباه تایپی داشتند.

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