PDA

View Full Version : مشکل دراجرای کد



rahele83
پنج شنبه 21 مرداد 1389, 17:46 عصر
سلام
چراتوی این کدمتغیرmodeرونمیشناسه

<?php
$con=mysql_connect('localhost','root','') or die(mysql_error()); mysql_select_db('address') or die(mysql_error());



$mode=$_GET['mode'];



if ( $mode=="add")
{


Print '<h2>Add Contact</h2>
<p>
<form action='; echo $PHP_SELF; Print ' method=post>
<table> <tr>
<td>Name:</td>
<td><input type="text" name="name" />
</td>
</tr>
<tr>
<td>Phone:</td>
<td><input type="text" name="phone" /></td>
</tr>
<tr>
<td>Email:</td>
<td>
<input type="text" name="email" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" />
</td>
</tr>
<input type=hidden name="mode" value="added">
</table>
</form>
<p>'
; }
if ( $mode=="added")
{
mysql_query ("INSERT INTO address (name, phone, email) VALUES ('$name', '$phone', '$email')"); }

if ( $mode=="edit")
{

Print '<h2>Edit Contact</h2> <p>
<form action='; echo $PHP_SELF; Print ' method=post>
<table>
<tr>
<td>Name:</td><td><input type="text" value="'; Print $name; print '" name="name" />
</td>
</tr>
<tr>
<td>Phone:</td>
<td><input type="text" value="'; Print $phone; print '" name="phone" /></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" value="'; Print $email; print '" name="email" />
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" /></td>
</tr>
<input type=hidden name="mode" value="edited">
<input type=hidden name="id" value='; Print $id; print '>
</table>
</form>
<p>'
;
} if ( $mode=="edited")
{
mysql_query ("UPDATE address SET name = '$name', phone = '$phone', email = '$email' WHERE id = $id"); Print "Data Updated!<p>";



}



if ( $mode=="remove")
{
mysql_query ("DELETE FROM address where id=$id");
Print "Entry has been removed <p>";
}



$data = mysql_query("SELECT * FROM address ORDER BY name ASC") or die(mysql_error());
Print "<h2>Address Book</h2><p>";
Print "<table border cellpadding=3>";
Print "<tr><th width=100>Name</th><th width=100>Phone</th><th width=200>Email</th><th width=100 colspan=2>Admin</th></tr>";
Print "<td colspan=5 align=right><a href=" .$_SERVER['PHP_SELF']." ?mode=add>Add Contact</a></td>"; while
($info = mysql_fetch_array( $data ))
{
Print "<tr><td>".$info['name'] . "</td> "; Print "<td>".$info['phone'] . "</td> ";
Print "<td> <a href=mailto:".$info['email'] . ">" .$info['email'] . "</a></td>";
Print "<td><a href=" .$_SERVER['PHP_SELF']. "?id=" . $info['id'] ."&name=" . $info['name'] . "&phone=" . $info['phone'] ."&email=" . $info['email'] . "&mode=edit>Edit</a></td>";
Print "<td><a href=" .$_SERVER['PHP_SELF']. "?id=" . $info['id'] ."&mode=remove>Remove</a></td></tr>";
}
Print "</table>"; ?> وتوی فرم
action='; echo $PHP_SELF; Print ' چرااین طورنوشته ودوتاسیمیکالن استفاده کرده
ممنون

LORD AELX
پنج شنبه 21 مرداد 1389, 21:00 عصر
کد بالا در ابتدای کار میاد مقدار ارسالی از ورودی ای بنام mode در فرم رو که با متد GET ارسال شده، در متغیر mode$ میریزه:


$mode=$_GET['mode'];


پس در ابتدا شما باید یک ورودی مثل یک TextBox بنام mode در فرم تون داشته باشید و ضمنا فرم تون رو با متد GET ارسال کرده باشید ("method = "get) تا کد PHP بتونه مقدار اون رو دریافت کنه.

در مورد مقدار action فرم هم، من به شخصه چنین مقدار دهی رو تابحال ندیده بودم، درستش به این صورت هستش:


<form name="formName" action="<?php echo $PHP_SELF ?>" method="GET">


راجع به این که شما برای دستوراتتون سیمی کالن ( ; ) بگذارید یا نه باید بگم که در هر بلاک کد PHP که بین php?> و <? درج میشه، در صورتیکه تنها یک دستور وجود داشته باشد، نیاز به استفاده از ; نیست (چون ; در واقع به این خاطر هست که هر خط کد از خط بعدی جدا بشود) و در غیر اینصورت برای جدا کردن دستورات از یکدیگر حتما باید از ; استفاده کرد.

موفق باشید :قلب:

rahele83
پنج شنبه 21 مرداد 1389, 23:26 عصر
سلام من این کدروازاینجاگرفتم

http://php.about.com/od/finishedphp1/ss/address_book.htm
جواب نمیده درaddکردن وedith
من متووجه این همه ifنشدم وفیلدهای مخفیش
کلا با$mode مشکل داره توکد
ممنون

LORD AELX
جمعه 22 مرداد 1389, 00:24 صبح
سلام من این کدروازاینجاگرفتم

http://php.about.com/od/finishedphp1/ss/address_book.htm
جواب نمیده درaddکردن وedith
من متووجه این همه ifنشدم وفیلدهای مخفیش
کلا با$mode مشکل داره توکد
ممنون

کد بالا به خودی خود مشکلی نداره، احتمالا قضیه همون نفرستادن مقدار به فایل PHP است. شما لطف کنید هم اگر Error می دهد، متن آن را قرار دهید، و هم اینکه کل کد فرمی رو استفاده کردید اینجا بگذارید تا بررسی کنیم.

موفق باشید :قلب:

rahele83
جمعه 22 مرداد 1389, 13:20 عصر
کد بالا به خودی خود مشکلی نداره، احتمالا قضیه همون نفرستادن مقدار به فایل PHP است. شما لطف کنید هم اگر Error می دهد، متن آن را قرار دهید، و هم اینکه کل کد فرمی رو استفاده کردید اینجا بگذارید تا بررسی کنیم.

موفق باشید :قلب:
سلام اتفاقااین کددرحین اجرامشکل داره
Notice: Undefined index: mode
Notice: Undefined index: id
این اروررارومیده

LORD AELX
جمعه 22 مرداد 1389, 13:44 عصر
سلام اتفاقااین کددرحین اجرامشکل داره
Notice: Undefined index: mode
Notice: Undefined index: id
این اروررارومیده

پس همون قضیه ای میشه که گفتم... :لبخندساده: ببینید دوست عزیز برای کد شما متغیر های mode$ و id$ برای برنامه شما تعریف نشده هستند. در مورد mode که قضیه همون عدم مقدار دهی توسط فرم هستش و برای id هم حتما قبل از echo شدنش، تعریف و مقدار دهی نشده.

ببینید شما قبل از چاپ و یا استفاده هر مقداری در برنامه تون، باید حداقل یکبار اون رو تعریف و مقدار دهی کرده باشید. در PHP این "یکبار" با ساده ترین شکل می تواند به صورت زیر باشد:


$var = "";

or

$var = 0;


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

در کد شما، متغیر mode تعریف شده است و مقداردهی آن بر اساس مقدار ارسال شده از فرم صورت گرفته است. پس در صورتیکه برای آن این notice را مشاهده می کنید، علتش این است که در آرایه GET هیچ مقداری (کلید یا همون Key) با عنوان mode وجود ندارد. از طرف دیگه من در کد بالا نمیبینم که قبل از echo کردن متغیر های id$ و name$ و email$ و phone$ و ... تعریفی از آن ها صورت گرفته باشد.

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

راستی، کل print هایی که مثل زیر انجام شده است:


value="'; Print $phone; print '"


را به این شکل درآورید:


value="'echo $phone'"


موفق باشید :قلب:

LORD AELX
جمعه 22 مرداد 1389, 13:47 عصر
راستی همین الآن یه نگاه دقیق به کد اولی انداختم و متوجه شدم، تمام فرم ها از متد POST استفاده کرده اند!! :لبخندساده: این مقدار را به GET تغییر دهید. چون برنامه هم، آرایه GET را پردازش می کند. :چشمک:

موفق باشید :قلب:

rahele83
جمعه 22 مرداد 1389, 16:22 عصر
اون قسمت روهم باecho $name ; نوشتم ارورمیده
وموقع اضافه کردن add contact
این اروررومیده

The requested URL /tr/<br /><b>Notice</b>: Undefined variable: PHP_SELF inممنون

funpatogh
جمعه 22 مرداد 1389, 16:37 عصر
PHP_SELF در نسخه های قدیمی php کار میکنه
الان برای امنیت بیشتر غیر فعال هست و register global خاموش هست
شما 2 راه داری برای اینکه خطا نداشته باشید
یا اینکه این فانکشن رو اوف صفحه بگزاری


<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
?>


یا اینکه به متغییر هایت که مقدار اولیه بدهی مثل
$var=""

rahele83
جمعه 22 مرداد 1389, 17:14 عصر
خیلی ممنون مشکلم حل شد
اون کدرواول کدهام گذاشتم.
درموردراه حل دومتون کدوم متغیرها
$name,$phone...اینارومیفرمایید
که باپست گرفتم اول کد

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

value="'; Print $email; print '" چرابه این شکل نوشته وقابل تغییربا اکوهم نیست
ممنون