PDA

View Full Version : آپدیت ردیف های جدول اطلاعاتی دیتابیس mysql توسط php



conter
یک شنبه 13 اسفند 1391, 23:44 عصر
سلام دوستان عزیز من چند وقتی با این کد ور رفتم از هر منبعی که بگین سرچ کردم ولی متاسفانه مشکل کد حل نشد ناچارا اینجا مشکل رو مطرح میکنم .

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

اگر روش بهتری برای این کار سراغ دارید مطرح کنید ممنون .




<?php

$host="localhost"; // Host name
$username="username"; // Mysql username
$password="password"; // Mysql password
$db_name="db1"; // Database name
$tbl_name="test"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

// Count table rows
$count=mysql_num_rows($result);
?>

<table width="500" border="0" cellspacing="1" cellpadding="0">
<form name="form1" method="post" action="">
<tr>
<td>
<table width="500" border="0" cellspacing="1" cellpadding="0">

<tr>
<td align="center"><strong>Id</strong></td>
<td align="center"><strong>Name</strong></td>
<td align="center"><strong>Lastname</strong></td>
<td align="center"><strong>mid</strong></td>
</tr>

<?php
while($rows=mysql_fetch_array($result)){
?>

<tr>
<td align="center">
<? $id[]=$rows['id']; ?><? echo $rows['id']; ?>
</td>
<td align="center">
<input name="name[]" type="text" id="name" value="<? echo $rows['name']; ?>">
</td>
<td align="center">
<input name="lastname[]" type="text" id="lastname" value="<? echo $rows['lastname']; ?>">
</td>
<td align="center">
<input name="midmark[]" type="text" id="midmark" value="<? echo $rows['midmark']; ?>">
</td>
</tr>

<?php
}
?>

<tr>
<td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</td>
</tr>
</form>
</table>

<?php

// Check if button name "Submit" is active, do this
if($Submit){
for($i=0;$i<$count;$i++){
$sql1="UPDATE $tbl_name SET name='$name[$i]', lastname='$lastname[$i]', midmark='$midmark[$i]' WHERE id='$id[$i]'";
$result1=mysql_query($sql1);
}
}

if($result1){
header("location:update_multiple.php");
}
mysql_close();
?>


لازمه بگم که برای متغیر های داخل دستور query برای آپدیت از $_POST هم استفاده کردم ولی بازم هم به همین شکل بود.

Unique
دوشنبه 14 اسفند 1391, 01:49 صبح
شرطی که داره متغیر submit$ را چک میکنه مشکل داره ! مثلا باید همچین چیزی باشه :

if(isset($_POST['Submit']))

نمیدونم چقدر php کار کردین ولی این موضوعات خیلی پیش پا افتاده هستند ! فکر کنم باید بیشتر در زمینه فرم ها کار کنید.
موفق باشین.

conter
دوشنبه 14 اسفند 1391, 09:04 صبح
دوست عزیز همون طور که در پایین کد نوشتم از این روش هم برای چک کردن متغیرها استفاده کردم که بازم جواب نداد . من یک مدل دیگه این کد رو میگذارم تا متوجه شید .
توی php تقریبا متوسط هستم واسه همین توی بعضی مسایل هنوز مشکلاتی دارم .

این دستور اپدیت :

<?php
// Check if button name "Submit" is active, do this
if(isset($_POST['Submit']) && $_POST['Submit'] == 'Submit'){
for($i=0;$i<$count;$i++){

$sql1="UPDATE $tbl_name SET classmark='{$_POST['classmark'][$i]}', midmark='{$_POST['midterm'][$i]}', finalmark='{$_POST['finalmark'][$i]}', state='$state[$i]', details='{$_POST['details'][$i]}' WHERE id='{$_POST['id'][$i]}' ";
$result1=mysql_query($sql1);
}
}
?>

فرزند کوروش
دوشنبه 14 اسفند 1391, 10:01 صبح
باید شرط رو اینجوری بنویسی


if(isset($_POST['Submit']) ){
code here
}

[/PHP]

Unique
دوشنبه 14 اسفند 1391, 12:00 عصر
دوست عزیز شما خیلی کد هاتون ساختار عوض میکنند و اشتباه توی هر دوی اونها هست :

مثلا توی کد پست اول خدمتتون عرض کردم شرط را اشتباه نوشتین و با isset بنویسین ، توی کد پست دوم شما شرط را درست کردین ولی نیازی به چک کردن مقدار submit نیست و همون isset کفایت میکنه !
توی کد پست دوم شما یه سوتی بد دادین، توی کد اولی دارین id ها را میریزین توی آرایه id$ و به درستی از همون دارین Update میکنین اما توی کد پست دومی دارین id را از POST_$ میخونین که اصلا درست نیست و بر اساس کد پست اولتون همچین input ی توی فرم شما نیست.

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

conter
دوشنبه 14 اسفند 1391, 13:46 عصر
با تشکر فراوون از راهنماییتون ولی من که واقعا گیج شدم کد رو همون طوری که گفتین اصلاح کردم ولی بازم اتفاقی نمیافته صفحه رفرش میشه ولی اطلاعات اپدیت نمیشه !!!


<?php
// Check if button name "Submit" is active, do this
if(isset($_POST['Submit'])){
for($i=0;$i<$count;$i++){
$sql1="UPDATE $tbl_name SET name='$name[$i]', lastname='$lastname[$i]', midmark='$midmark[$i]' WHERE id='$id[$i]'";
$result1=mysql_query($sql1);
}
}

if($result1){
header("location:update_multiple.php");
}
mysql_close();
?>

conter
دوشنبه 14 اسفند 1391, 13:48 عصر
اینم کد فورم برای اینکه شفاف تر شه :

<form name="form1" action="" method="POST">
<center>
<div>
<div align="center" width = 615>
<table class="stats" cellspacing="0" width="615" border="1">
<tr>
<th width="20" scope="col" >Id</th>
<th width="60" scope="col">Name</th>
<th width="60" scope="col">Last Name</th>
<th width="42" scope="col">Midterm</th>
<th width="54" scope="col">Class mark</th>
<th width="42" scope="col">Final Quiz</th>
<th width="54" scope="col">State</th>
<th width="54" scope="col">Details</th>

</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center">
<?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?>
</td>
<td align="center"><input style=" font-family: Tahoma,Geneva,sans-serif; font-size: 12px; padding: 5px; width: 60px;" type="text" name="name[]" id="name" value= "<? echo $rows['name']; ?>" /></td>
<td align="center"><input style=" font-family: Tahoma,Geneva,sans-serif; font-size: 12px; padding: 5px; width: 60px;" type="text" name="lastname[]" id="lastname" value= "<? echo $rows['lastname']; ?>" /></td>
<td align="center"><input style=" font-family: Tahoma,Geneva,sans-serif; font-size: 12px; padding: 5px; width: 50px;" type="text" name="midterm[]" id="midterm" /></td>
<td align="center"><input style=" font-family: Tahoma,Geneva,sans-serif; font-size: 12px; padding: 5px; width: 50px;" type="text" name="classmark[]" id="classmark" /></td>
<td align="center"><input style=" font-family: Tahoma,Geneva,sans-serif; font-size: 12px; padding: 5px; width: 50px;" type="text" name="finalmark[]" id="finalmark" /></td>
<td align="center"><input style=" font-family: Tahoma,Geneva,sans-serif; font-size: 12px; padding: 5px; width: 50px;" type="text" name="state[]" id="state" /></td>
<td align="center"><input style=" font-family: Tahoma,Geneva,sans-serif; font-size: 12px; padding: 5px; width: 50px;" type="text" name="details[]" id="details" /></td>

</tr>
<?php
}
?>
</table>
</div>
</div>
</center>
<input style="margin-top:10px; float:right; margin-right:175px; font-size: 14px; padding: 5px 14px;" type="submit" value="ثبت" name="submit" />
</form>

conter
دوشنبه 14 اسفند 1391, 14:30 عصر
دیگه در این قسمت واقعا جالب شد وقتی فرم رو پر میکنم و ارسال میکنم همه فیلد ها رو صفر میکنه یا خالی میکنه !!!‌



<?php

$host="localhost"; // Host name
$username="username"; // Mysql username
$password="password"; // Mysql password
$db_name="db"; // Database name
$tbl_name="test"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

// Count table rows
$count=mysql_num_rows($result);
?>

<table width="500" border="0" cellspacing="1" cellpadding="0">
<form name="form1" method="post" action="">
<tr>
<td>
<table width="500" border="0" cellspacing="1" cellpadding="0">

<tr>
<td align="center"><strong>Id</strong></td>
<td align="center"><strong>Name</strong></td>
<td align="center"><strong>Lastname</strong></td>
<td align="center"><strong>mid</strong></td>
</tr>

<?php
while($rows=mysql_fetch_array($result)){
?>

<tr>
<td align="center">
<? $id[]=$rows['id']; ?><? echo $rows['id']; ?>
</td>
<td align="center">
<input name="name[]" type="text" id="name" value="<? echo $rows['name']; ?>">
</td>
<td align="center">
<input name="lastname[]" type="text" id="lastname" value="<? echo $rows['lastname']; ?>">
</td>
<td align="center">
<input name="midmark[]" type="text" id="midmark" value="<? echo $rows['midmark']; ?>">
</td>
</tr>

<?php
}
?>

<tr>
<td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</td>
</tr>
</form>
</table>

<?php

// Check if button name "Submit" is active, do this
if(isset($_POST['Submit'])){
for($i=1;$i<=$count;$i++){
$sql1="UPDATE $tbl_name SET name='$name[$i]', lastname='$lastname[$i]', midmark='$midmark[$i]' WHERE id='$id[$i]'";
$result1=mysql_query($sql1);
}
}

if($result1){
header("location:multiple.php");
}
mysql_close();
?>

AbiriAmir
دوشنبه 14 اسفند 1391, 15:33 عصر
خوب شما کجا آرایه های $name و $lastname و... رو مقداردهی کردید که توقع دارید توی کوئریتون آپدیت بشه؟
نکنه توقع دارید چون اسم فیلدتون توی فرم name هست توی php هم اون رو با $name بدست بیارید؟

راه درست اینه:


$sql1="UPDATE $tbl_name SET name='$_POST[name][$i]', lastname='$_POST[lastname][$i]', midmark='$_POST[midmark][$i]' WHERE id='$_POST[id][$i]'";


ضمنا تا اونجایی که من میدونم شمارنده آرایه از 0 شروع میشه و نه از 1
پس حلقه for شما هم باید از 0 شروع شه به این صورت:


for( $i=0; $i<$count; $i++){
$sql1="UPDATE $tbl_name SET name='$_POST[name][$i]', lastname='$_POST[lastname][$i]', midmark='$_POST[midmark][$i]' WHERE id='$_POST[id][$i]'";
$result1=mysql_query($sql1);
}

conter
دوشنبه 14 اسفند 1391, 16:19 عصر
مشکل رو خدا رو شکر با کمک دوستان خارجی حل کردم این روشی که مشکل رو حل کرد :



<?php
// Check if button name "Submit" is active, do this
if(isset($_POST['Submit']))
{
for($i=0;$i<$count;$i++)
{
$sql1=mysql_query(" UPDATE `".$tbl_name."` SET midmark='".$_REQUEST['midmark'][$i]."' , classmark='".$_REQUEST['classmark'][$i]."' , finalmark='".$_REQUEST['finalmark'][$i]."' , state='".$_REQUEST['state'][$i]."' , details='".$_REQUEST['details'][$i]."' WHERE id='".$_REQUEST['id'][$i]."' ");
$result1=mysql_query($sql1);
}
}

if($result1){
header("location:results.php");
}
mysql_close();
?>

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

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

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

AbiriAmir
دوشنبه 14 اسفند 1391, 16:32 عصر
دوست عزیز اگر دقت کنید پست آخر بنده همین راهی بود که به قول شما دوستان خارجی آن را حل کردند!
ضمنا این فروم بیشتر جنبه آموزشی داره
نه این که هرکس کد خودش رو بذاره و بقیه بشینن توش دنبال مشکل بگردن و پیداش کنن...
شما باید این هنر رو داشته باشید که با جستجو و در مرحله آخر پرسش مشکل خودتون رو خودتون حل کنید...
نه این که کس دیگری مشکل کد شما را حل کنه و در اختیارتون بذاره...