PDA

View Full Version : سوال: 2 سوال در مورد mysql در php



ghiravani
یک شنبه 17 بهمن 1389, 16:25 عصر
سلام به همگی

مثلا دیتابیسی با 15 سطر داریم که نام کاربری و رمز عبور داخلش ذخیره شده.چطور میشه با یک دستور به سطر 4 بدون استفاده از حلقه for رفت؟
من این دستور رو نوشتم اما برنامه error داد:



<?php
$db=mysql_connect("127.0.0.1","root","");
mysql_select_db('mydb',$db);
$query="SELECT * FROM counter";
$result=mysql_query($query,$db);
$num=mysql_num_rows($result);
//********
$name=mysql_result($result,4,0);
$f=mysql_result($result,$num,0);
?>
خطاش هم این بود که برنامه mysql نمیتونه پرش کنه به سطر 4 یا سطری که



$num


نشون میده!!!!
آیا نمیشه با mysql بصورت کار با آرایه ها کار کرد؟مثلا نام جدولمون هست counter.برای رفتن به سطر 4 بنویسیم:


counter[4]
???


سوال دومم در کار با دیتابیس mysql هست.مثلا ابتدا داده ها در phpMyAdmin بشکل زیر نمایش داده میشن:
num --------- date
===============
3---- 2011,01,15
8---- 2011,01,16
4---- 2011,01,18
7---- 2011,01,19
2---- 2011,01,20
اگر داده ای از این جدول پاک نکنیم ، داده ها به ترتیب ورود از بالا به پایین ذخیره میشن.اما اگر مثلا داده دوم رو delete کنیم ، و سپس داده ای جدید، insert کنیم ، این داده جدید بجای اینکه در پایین جدول قرار بگیره ،بر خلاف نظم اولیه ، در جایی که داده قبلی delete شده ، ذخیره میشه.اما داده های بعدی که insert میشن ، بر اساس همون نظم ابتدایی ، از بالا به پایین ذخیره میشن.راهی نیست که این مشکل بوجود نیاد و همون نظم اولیه رعایت بشه؟؟


ممنون

$ M 3 H R D A D $
یک شنبه 17 بهمن 1389, 17:00 عصر
<?php
$db=mysql_connect("127.0.0.1","root","");
mysql_select_db('countries',$db);
$query="SELECT * FROM countries;";

$result=mysql_query($query,$db);

$num=mysql_num_rows($result);
//********
$name = mysql_result($result,3,1);
?>

mysql_result اولین آرگومانت result و بعد شماره سطر البته از صفر شروع میشه و بعد شماره فیلد که اونم از 0 شروع میشه
شما $num اکه 40 تا باشه چون از 0 شروع میشه 39 تاشماره داریم پس نمیتونه به اون دست پیدا کنه

$ M 3 H R D A D $
یک شنبه 17 بهمن 1389, 17:03 عصر
در مورد سوا دوم ههم بیشتر توضیح بدین
اگه نظم خاصی دارن مرتب کنید

ghiravani
یک شنبه 17 بهمن 1389, 17:18 عصر
ممنون.اصلا یادم نبود که از 0 شروع به شمارش میکنه! :لبخند:

ghiravani
یک شنبه 17 بهمن 1389, 17:35 عصر
در مورد سوال دوم هم .خیر نظم خاصی ندارن.برای مثال یک سری اطلاعات در دیتابیس به این صورت ذخیره شدن:

num --------- date
===============
3---- 2011,01,15
8---- 2011,01,19
4---- 2011,01,18
7---- 2011,01,11
2---- 2011,01,20

اگر داده ای رو insert کنیم ، در بالای جدول قرار میگیره (البته این روند تا زمانی هست که در دیتابیس رکوردی رو delete نکنیم.)
برای delete کردن هم از این دستور استفاده میکنم:

mysql_query("delete from users where username=".@mysql_result($result,2,0)."");
با توجه به این دستور ، رکورد سومی از دیتابیس پاک میشه.حالا اگر داده ای جدید insert کنیم ، در محل داده قبلی که delete شده (یعنی سطر 3) ذخیره میشه که نباید به این صورت باشه.(داده ها باید به ترتیب ورود ، هر بار ، به بالای جدول اضافه بشن)

حالا راهی نیست که این مشکل پیش نیاد؟

$ M 3 H R D A D $
یک شنبه 17 بهمن 1389, 18:20 عصر
راستش تست نکردم اما از ظاهر کدشمامشخص هست که چون داده ها بطور مکرر از جدول فراخوانی میشن و دائم دارن لیست جدیدی (با انجام کوئری های مختلف) ایجادمیشهبه همین خاطر نظم جدولبه هم میخوره
یعنی اشاره گر اگه در نظر بگیریم شاید جابجا شده باشه
شما نام user و جداگانه بگیر و در داخل کوئری نیار
البته بحث اولویت پرانتز پیشمیاد و اینکه داخلی ترین کوئری کارشو میکنه و بعد جدول دوباره بر میگرده سرجاش
اما اگه کل کدتو بزاری میشه فهمید گیرش کجاست
اگه نشد کانکشن و close کن بعد دوباره اضافه کن

ghiravani
یک شنبه 17 بهمن 1389, 19:18 عصر
کلا کد برنامه من این هست.ابتدا یه فرم html که داده رو میگیره:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Language" content="en-us" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled 1</title>
<style type="text/css">
.style1 {
font-size: x-large;
}
</style>
</head>

<body>

<p class="style1"><strong>Insert</strong></p>
<form method="post" action="test.php">
username: <input name="user1" style="height: 22px" /><br />
password: <input name="pass1" /><br />
<input name="Reset1" type="reset" value="reset" />
<input name="Submit1" type="submit" value="submit" /></form>

</body>

</html>
=============
فایل بعد کار insert رو انجام میده:

نام فایل: test.php


<html>
<head>
<meta http-equiv="Content-Language" content="php; charset=utf-8" />
<meta http-equiv="Content-Type" content="php; charset=utf-8" />
<body>
<?php

$db=mysql_connect("127.0.0.1","root","");
mysql_select_db('mydb',$db);
$query="SELECT * FROM users";
$result=mysql_query($query,$db);
$num=mysql_num_rows($result);
//***************INSERT*****************
$user1=htmlspecialchars($_POST['user1']);
$pass1=htmlspecialchars($_POST['pass1']);
$query="insert into users(username,password) value ('".$user1."','".$pass1."')";
$result=mysql_query($query);
mysql_close();
print('<p><a href="insert.htm"> Insert Again</a></p><p><a target="_blank" href="db.php"> Show Data</a></p>');
?>
</body>
</head>
</html>
======================
این فایل هم اطلاعات ذخیره شده رو نمایش میده.فقط برای هر رکورد یک چک باکس قرار دادم که اگر کاربر خواست چند رکورد رو حذف کنه ، جلوی هر رکورد تیک میزنه و در آخر برای انجام عملیات حذف دکمه submit پایین جدول رو میزنه.

نام فایل: db3.php


<html>
<body>
<?php

$db=mysql_connect("127.0.0.1","root","");
if($db)
print("Connection Sucsessful!");
else
print("Connection Failed!");

mysql_select_db('mydb',$db);
$query="SELECT * FROM users";
$result=mysql_query($query,$db);
$num=mysql_num_rows($result);
//********************************************
echo "<form method='post' action='delete.php'>";
echo "<table border=1>";
for ($i=0;$i<$num;$i++)
{
$row=mysql_fetch_array($result);
echo "<tr><td>".($i+1)."</td>";
echo "<td>".@mysql_result($result,$i,0)."</td>";
echo "<td>".@mysql_result($result,$i,1)."</td>";
print('<td><input name="'.$i.'" type="checkbox" /></td></tr>');
}
echo "</table>";
echo "<input name='Submit1' type='submit' value='submit' /></form>";
//number of rows:
echo "Rows number:".mysql_affected_rows($db);
//end

//delete
mysql_query("delete from users where username='100'");
//

?>
</body>
</html>برای انجام کار delete هم این فایل وجود داره که داده های ورودیش رو از فایل قبلی (همون رکوردهای تیک خورده) میگیره.

نام فایل: delete.php


<html>
<body>
<?php

$db=mysql_connect("127.0.0.1","root","");
/*
if($db)
print("Connection Sucsessful!");
else
print("Connection Failed!");
*/
mysql_select_db('mydb',$db);
$query="SELECT * FROM users";
$result=mysql_query($query,$db);
$num=mysql_num_rows($result);
//********************************************

for($i=0;$i<$num;$i++)
{
if(!empty($_POST[$i]))
{
mysql_query("delete from users where username=".@mysql_result($result,$i,0)."");
echo @mysql_result($result,$i,0)." Delete.<br>";
}
}


?>
</body>
</html>
این تمام یه برنامه بود که نوشتمش

ممنون

$ M 3 H R D A D $
یک شنبه 17 بهمن 1389, 22:19 عصر
من روشتورو اصلا قبول ندارم خیلیبه خودتسخت گرفتی
اما همون و برات درستکردم
بهتره از mysql_result اینجا استفاده نکنی تو checkbod مقدار value و نام username بزار تا یک قدم جلوتر باشی
ببینم چیکارش میکنی
این فایل درسته بازش کن ببین اشکات و تصحیح کن

$ M 3 H R D A D $
یک شنبه 17 بهمن 1389, 22:21 عصر
در ضمن کیبوردم خرابه ببخشید بد تایپ میکنم

ghiravani
یک شنبه 17 بهمن 1389, 23:08 عصر
ممنون.خیلی کمکم کردین.thx
مخصوصا فایل delete رو خوب نوشتید.راستش من روی این برنامه زیاد وقت نگذاشتم و از طرفی اصلا روشی رو که در فایل delete انجام دادم دوست نداشتم.چون اینطوری سیستم باید به اندازه تمام رکوردها دستورات داخل حلقه for رو تکرار میکرد و بررسی میکرد که هر جا چک باکس پر هست ، عمل delete رو انجام بده! که این کار برای داده های زیاد وقت گیر و بیهوده هست.اما شما جالب نوشتید.من راستش 5 روز شده که php رو شروع کردم و زیاد در مورد php نمیدونم.لطفا این قسمت رو که در فایل delete استفاده کردید ، یکم توضیح بدید.ممنونم از توجه شما


$p_chk = null;
import_request_variables('p', 'p_');
$arr = array();
$arr = $p_chk;
foreach($arr as $value)
{
$del_index = mysql_result($result,$value,0);
mysql_query("delete from users where username='$del_index'",$db);
echo "Delete ".$del_index."<br/>";

}

ghiravani
یک شنبه 17 بهمن 1389, 23:12 عصر
راستی من دیتابیسی که قبلا برای کدی که خودم نوشته بودم رو empty کردم و برای تست کدی که شما تغییرش دادید ، داده ها رو از نو وارد کردم.باز هم همون مشکل وجود داره.مشکلی که در تاپیک #5 نوشتم

ممنون :چشمک:

$ M 3 H R D A D $
یک شنبه 17 بهمن 1389, 23:51 عصر
import_request_variables('p', 'p_');

ما متغییر هایی داریم برای پست و گت
منظور $_POST و $_GET

اینه یک نوع آرایه هم حساب میان



if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
echo '</pre>';
}



کد بالا اولین مقدارش p یا g که همونپست وگت هست
دومی یک پیشوند برای متغییرمشخص میکنی و بعد استفاده میکنی
بقیش که مشخصه
راستشبا این کیبوردحال ندارم بنویسم موردی سوال کن بگم

$ M 3 H R D A D $
یک شنبه 17 بهمن 1389, 23:54 عصر
مشکل چیه؟ارور و بگین
کلی حرف نزنیدلطفا