PDA

View Full Version : مشکل با mysql_fetch_assoc



zahra6377
دوشنبه 26 تیر 1391, 09:33 صبح
سلام
من با mysql_fetch_assoc مشکل دارم .وقتی که اینو توی حلقه for میذارم فقط دور اول مقدار میگیره و در تکرار های بعدی مقدار نمیگیره.میشه کمکم کنید.اینم یه نمونه کدم.

for($i=0;$i<$j;$i++)
{
$author=$author_array[$i];
$query3="SELECT * FROM `author_tb` WHERE `name`='".$author."'";
$result3=mysql_query($query3);
$row3=mysql_fetch_assoc($result3);
echo $row3['rol'];

}

desatir7316
دوشنبه 26 تیر 1391, 09:50 صبح
$result3=mysql_query($query3);
دوست عزیز مشکل اینجاست
کوئریتو انداختی داخل حلقه و هرسری داری اجراش می کنی به خاطر همینه هر سری میاد از اول نتیجه رو برمیگردونه

kaka_abe
دوشنبه 26 تیر 1391, 10:18 صبح
سلام دوست عزیز

تابع mysql_fetch_assoc برای دسترسی به سطرهاش نیازی به شمارنده نداره به همین دلیل از حلقه while استفاده میکنن که وقتی به اخر سطر هم رسید خودش میاد بیرون
اونم به این شکل استفاده میکنن :

$query='دستورات sql';
while($var = mysql_fetch_assoc($query)) {

----------------------
----------------------
----------------------
}

colors
دوشنبه 26 تیر 1391, 10:20 صبح
درود

این حلقه شما با for اجرا نمیشه، حتی اگه کوئری رو بیرون حلقه بزارید.

میتونید از روش زیر استفاده کنید.


$author = $author_array[$i];
$query3 = "SELECT * FROM `author_tb` WHERE `name`='".$author."'";
$result3 = mysql_query($query3);
$row3 = mysql_fetch_assoc($result3);

while($row3 = mysql_fetch_assoc($result3)){
echo $row3['rol'];
}

zahra6377
دوشنبه 26 تیر 1391, 10:31 صبح
خوب کد من طوریه که نمیشه از while استفاده کرد.ببینید من میخوام مشخصات مثلا نویسنده ها که در دیتابیس هستن رو نشون بدم.نویسنده های من با کاما از هم جدا شدن.من اول با تابع explode اونا رو از هم جدا میکنم و داخل یک آرایه میریزم بعد با for تک تک اونا رو میخونه و مشخصاتشونو از دیتابیس پیدا میکنه و اونا رو نمایش میده،خوب من اینو چطوری با while بنویسم؟

desatir7316
دوشنبه 26 تیر 1391, 11:21 صبح
$author_array = explode(",",author_list);

for($i=0; $i<count($author_array); $i++){
$author = $author_array[$i];
$query3 = "select * from `author_tb` where `name`='".$author."'";
$result3= mysql_query($query3);

while($row = mysql_fetch_assoc($result3)){
echo $row['rol'];
}//end while
}//end for


سلام
اینو تست کردم جواب داد
امیدوارم به دردت بخوره

zahra6377
دوشنبه 26 تیر 1391, 11:38 صبح
ممنون
ولی این کد فقط مشخصات نویسنده اول انجام میده و اگه مثلا دو یا سه تا باشن برای بقیه این کار رو انجام نمیده.

narsisss
دوشنبه 26 تیر 1391, 12:12 عصر
به نظرم اینجوری بنویس:

for($i=0;$i<$j;$i++)
{
$author=$author_array[$i];
$query3="SELECT * FROM `author_tb` WHERE `name`='".$author."'";
$result3=mysql_query($query3);
$row3=mysql_fetch_assoc($result3);
$rol[$i] = $row3['rol'];
echo $rol[$i];
}

desatir7316
دوشنبه 26 تیر 1391, 12:16 عصر
ولی این کد فقط مشخصات نویسنده اول انجام میده و اگه مثلا دو یا سه تا باشن برای بقیه این کار رو انجام نمیده.


تستش کردین؟
حلقه for اسم تک تک نویسنده ها رو از توی آرایه برمی داره و به کوئری میده و بعد کوئری اجرا می شه و مشخصات لازمه رو با حلقه while چاپ می کنه
من خودم تستش کردم مشکلی نداشت
اگه می خواید کدتونو بذارید تا نگاش کنم

colors
دوشنبه 26 تیر 1391, 12:17 عصر
$author_array = explode(",",author_list);

for($i=0; $i<count($author_array); $i++){
$author = $author_array[$i];
$query3 = "select * from `author_tb` where `name`='".$author."'";
$result3= mysql_query($query3);

while($row = mysql_fetch_assoc($result3)){
echo $row['rol'];
}//end while
}//end for


سلام
اینو تست کردم جواب داد
امیدوارم به دردت بخوره

اینجا دیگه لازم نیست داخل for از while استفاده کنید و فقط کافیه مقادیرو چاپ کنید.

$author_array = explode(",",author_list);

for($i=0; $i<count($author_array); $i++){
$author = $author_array[$i];
$query3 = "SELECT * FROM `author_tb` WHERE `name` = '$author';";
$result3 = mysql_query($query3);
$row3 = mysql_fetch_assoc($result3);
echo $row3['rol'];
}

desatir7316
دوشنبه 26 تیر 1391, 12:18 عصر
$author_array = explode(",",author_list);


راستی توی اون کد که گذاشتم اسم نویسنده ها که اول با کاما جدا میشن توی author_list هست و بعد با تابع explode توی آرایه ی author_array قرار می گیرن

desatir7316
دوشنبه 26 تیر 1391, 12:27 عصر
اینجا دیگه لازم نیست داخل for از while استفاده کنید و فقط کافیه مقادیرو چاپ کنید.
$author_array = explode(",",author_list);



for($i=0; $i<count($author_array); $i++){

$author = $author_array[$i];

$query3 = "SELECT * FROM `author_tb` WHERE `name` = '$author';";

$result3 = mysql_query($query3);

$row3 = mysql_fetch_assoc($result3);

echo $row3['rol'];

}


دوست عزیز ممنون ولی ای فقط اولین رکورد رو بر می گردونه در صورتی که شاید کوئری من چند سطر رو برگردونه
اونو که شما می گید برای موقعه ای که بدونیم هر نویسنده فقط یک اثر داره ولی اگرنویسنده مثل جعفرنژادقمی باشه اینجوری اعتبار آقای جعفرنژاد زیر سوال میره!!!:چشمک:

zahra6377
دوشنبه 26 تیر 1391, 12:59 عصر
به نظرم اینجوری بنویس:

for($i=0;$i<$j;$i++)
{
$author=$author_array[$i];
$query3="SELECT * FROM `author_tb` WHERE `name`='".$author."'";
$result3=mysql_query($query3);
$row3=mysql_fetch_assoc($result3);
$rol[$i] = $row3['rol'];
echo $rol[$i];
}

ممنون ولی این یکی هم فقط مشخصات نویسنده اول رو چاپ کرد.

zahra6377
دوشنبه 26 تیر 1391, 13:03 عصر
تستش کردین؟
حلقه for اسم تک تک نویسنده ها رو از توی آرایه برمی داره و به کوئری میده و بعد کوئری اجرا می شه و مشخصات لازمه رو با حلقه while چاپ می کنه
من خودم تستش کردم مشکلی نداشت
اگه می خواید کدتونو بذارید تا نگاش کنم

آره تستش کردم.اسم تک تک نویسنده ها رو برمیداره و به کوئری هم میده ولی فقط مشخصات اولی رو چاپ میکنه.

narsisss
دوشنبه 26 تیر 1391, 13:11 عصر
اینو امتحان کردم درست بود امیدوارم کار کنه برات

for($i=0;$i<$j;$i++)
{
$author=$author_array[$i];
$query3="SELECT * FROM `author_tb` WHERE `name`='".$author."'";
$result3=mysql_query($query3);
while($row3=mysql_fetch_assoc($result3)){

$rol[$i] = $row3['rol'];
echo $rol[$i] . "<br/>";
}
}
?>

zahra6377
دوشنبه 26 تیر 1391, 13:12 عصر
اینجا دیگه لازم نیست داخل for از while استفاده کنید و فقط کافیه مقادیرو چاپ کنید.

$author_array = explode(",",author_list);

for($i=0; $i<count($author_array); $i++){
$author = $author_array[$i];
$query3 = "SELECT * FROM `author_tb` WHERE `name` = '$author';";
$result3 = mysql_query($query3);
$row3 = mysql_fetch_assoc($result3);
echo $row3['rol'];
}
ممنون ولی این که دقیقا کد خودمه!

desatir7316
دوشنبه 26 تیر 1391, 13:44 عصر
ه تستش کردم.اسم تک تک نویسنده ها رو برمیداره و به کوئری هم میده ولی فقط مشخصات اولی رو چاپ میکنه.

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

پیروز و موفق باشید

colors
دوشنبه 26 تیر 1391, 13:47 عصر
فکر کردم هر نویسنده یک رکورد داره. خوب:



$author_array = explode(",",author_list);

for($i=0; $i<count($author_array); $i++){
$author = $author_array[$i];
$query3 = "SELECT * FROM `author_tb` WHERE `name` = '$author';";
$result3 = mysql_query($query3);
$num = mysql_num_rows($result3);
for($j = 0; $j < $num; $j++){
$row3 = mysql_fetch_assoc($result3);
echo $row3['rol'];
}
}

zahra6377
دوشنبه 26 تیر 1391, 17:29 عصر
به نظر من به اطلاعات جدولتون و sysntax ی که می نویسید یه نگاهی بندازید
توی حلقه while اون مشخصاتی رو که میخوای چاپ کنی رو قرار بده
من خودم این رو با برای نویسنده هایی هم که چند اثر دارند اجراش کردم درست بود
امکان نداره که حلقه while فقط اولی رو برگردونه، به شرطش توجه کنید

پیروز و موفق باشید
چک کردم ،نمیدونم چشه؟اینم کدم

$author_array=explode('،',$row['author']);
$j=count($author_array);
for($i=0;$i<$j;$i++)
{
$author=$author_array[$i];
$query3="SELECT * FROM `author_tb` WHERE `name`='".$author."'";
$result3=mysql_query($query3);
while($row3=mysql_fetch_assoc($result3))
{
echo $row3['rol'].'<br/>';
}
}

البته من همه قسمتای کد رو چک کردم با if و else و فقط توی قسمت mysql_fetch_assoc برای مقادیر دوم به بعد ارور میده.

colors
دوشنبه 26 تیر 1391, 17:35 عصر
پست شماره 18 رو تست کردین؟

zahra6377
دوشنبه 26 تیر 1391, 19:12 عصر
پست شماره 18 رو تست کردین؟
بله اونم همون نتیجه قبلی رو داشت.

colors
دوشنبه 26 تیر 1391, 19:16 عصر
من تست کردم و مطمئنم هیچ مشکلی نداره!!

zahra6377
دوشنبه 26 تیر 1391, 21:11 عصر
من تست کردم و مطمئنم هیچ مشکلی نداره!!

نمیدونم،همین الان دوباره تستش کردم فقط برای نویسنده اول نشون میده.
بیان دوباره توضیحش بدم.من دو تا جدول دارم یکی از اونا(جدول art) حاوی مقاله ها که شامل عنوان مقاله ،نام نویسنده ،سال انتشار،کلیدواژه ها و ..است که نام نویسنده مثلا اگر یک مقاله سه تا نویسنده داشته باشه این طوری ذخیره میشه:نویسنده 1،نویسنده2 ،نویسنده3
و یک جدول دیگه دارم (جدول author_tb) که نویسنده ها رو از جدول اول گرفته اونا رو با exoplode از هم جدا کردم و تک تک داخل این جدول ذخیره کردم و عنوان علمی اونها رو هم توی همون رکورد ذخیره کردم.حالا میخوام وقتی یک مقاله نشون داده میشه نام نویسنده رو از جدول art که میگیره اونا رو جدا کنه و عنوان علمی اونا رو از جدول author_tb بگیره و نمایش بده.امیدوارم که توضیحم کامل بوده باشه.
ممنون

desatir7316
دوشنبه 26 تیر 1391, 23:40 عصر
راستش من نمی دونم مشکل کجاست ولی این به ذهنم می رسه:
شما اسم نویسنده ها رو با کاما جدا کردید
آیا مقاله ای دارید که فقط یک نویسنده داشته باشه که اگه اینجوری باشه این خط کد فقط یه اسم رو برمیگردونه:


$author_array=explode('،',$row['author'])
البته با توجه به این که گفتید که با if هم چک کردید و از مقادیر دوم به بعد خطا میده این قضیه میتونه صحت داشته باشه که میتونید با تابع count از تعداد اون با خبر بشید

اگه پروژتون سکرت نیست:
با توجه به این که بازم دقیقا نمی دونم ساختار جدول ها و... چجوریه ،فعلا تنها راه دیگه ای که به ذهنم میرسه اینه که بگم پروژتونو بذارید تا شاید خودم بتونم درستش کنم(چیکارت کنم دیگه!!!!)
البته قبل از اون اگه ساختار جدول هاتونو با دستورات sql هم بذارید با چند نمونه از مقادیری که insert شده اند احتمالا بتونه مفید باشه

colors
سه شنبه 27 تیر 1391, 00:16 صبح
بفرما کامل براتون پیاده سازیش کردم.

این جدول art من
89847

و اینهم جدول author من
89848

و با کدهای زیر:

mysql_connect('localhost','root','');
mysql_select_db('test');

// query
$query = mysql_query("SELECT * FROM `art`");
$num_book = mysql_num_rows($query);

for($i = 0; $i < $num_book; $i++){
$row = mysql_fetch_assoc($query);
$book = $row['book_title'];
$author = explode(',',$row['book_author']);
$text_to_print = 'Book Name : <strong>'.$book.'</strong> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; And Author : ';

echo '<li><h3>Book Title : <strong>'.$row['book_title'].'</strong></h3></li><strong>AND Author</strong> :<br/> ';
for($j = 0; $j < count($author); $j++){
$author_code = $author[$j];
$query2 = mysql_query("SELECT * FROM `author` WHERE `author_name` = '$author_code';");
while($r = mysql_fetch_assoc($query2)){
echo '--> <small>'.$r['author_topic'].'</small><br/>';
}

}
echo '<br><br><br><br>';
}

خروجی زیر رو گرفتم که دقیقا چیزیه که شما میخواین
89849

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


در ضمن تمام کدهارو هم براتون ضمیمه کردم( همراه با بانک اطلاعاتی + تصاویر )
---> 89851

و در آخر قسم میخورم که این نمونه هیچ مشکلی نداره ( شوخی )

zahra6377
سه شنبه 27 تیر 1391, 10:34 صبح
سلام از هردوتون desatir7316 (http://barnamenevis.org/member.php?125754-desatir7316) و colors (http://barnamenevis.org/member.php?181541-colors) واقعا ممنونم ولی به خدا نمیدونم چرا نمیشه.ساختار جداولمو گذاشتم <میشه یه نگا بندازین شاید مشکل از ایناس.
ممنون

colors
سه شنبه 27 تیر 1391, 10:43 صبح
الان اینجور که نمیشه فهمید!

شما این نمونه منو دانلود کنید ببینید و از روش کپی بزنید. دقیقا همون چیزیه که شما میخواین. فقط من به جای اینکه از id و art_id استفاده کنم از نام نویسنده کتاب استفاده کردم.

یه بار کامل کد منو تحلیل کن کار دستت میاد

zahra6377
سه شنبه 27 تیر 1391, 11:12 صبح
برای بعضی از مقاله ها درسته ولی برای بعضیاش فقط اولی رو نشون میده.اینم نتیجه اجرا.

desatir7316
سه شنبه 27 تیر 1391, 11:17 صبح
AND Author : چیه؟

راستی با توجه به جوابی که COLOR داده باید همه چیز درست کار کنه دیگه
مشکل از کاراکتر های فارسی نیست؟
نمی خواید یه بار با ورودی های انگلیسی چک کنید؟
من خودم قبلا همچین مشکلی داشتم

zahra6377
سه شنبه 27 تیر 1391, 11:21 صبح
AND Author : چیه؟
هیچی این توی کد جناب colors بود من تغییری ندادم.تاثیری نداره.

colors
سه شنبه 27 تیر 1391, 12:01 عصر
اصلا کلا یه بار این نمونه منو بریزید و نگاش کنید . مثلا اسم هر کتاب رو جلوی book name : آوردم و زیرش جلوی and author لقب نویسندهاشو آوردم ( لقبو هر نویسنده به جای نامش که برای شما همون عنوان علمیشون میشه ).
مثلا کتاب PHP نویسندهاش : Jason , Jeremy هستند
و من به جای اینکه از نام نویسنده برای نمایش استفاده کنم، از لقب اونها که در جدول دیگه ای ذخیره شده استفاده میکنم که میشه : JASON GERNER, JEREMY STOLZ

zahra6377
سه شنبه 27 تیر 1391, 12:28 عصر
توی جدول مقاله های انگلیسی هم همین نتیجه رو داره.

zahra6377
سه شنبه 27 تیر 1391, 12:34 عصر
اصلا کلا یه بار این نمونه منو بریزید و نگاش کنید . مثلا اسم هر کتاب رو جلوی book name : آوردم و زیرش جلوی and author لقب نویسندهاشو آوردم ( لقبو هر نویسنده به جای نامش که برای شما همون عنوان علمیشون میشه ).
مثلا کتاب PHP نویسندهاش : Jason , Jeremy هستند
و من به جای اینکه از نام نویسنده برای نمایش استفاده کنم، از لقب اونها که در جدول دیگه ای ذخیره شده استفاده میکنم که میشه : JASON GERNER, JEREMY STOLZ
من همین کار رو کردم.کد شما رو کلا توی یه صفحه جدا گذاشتم و اجرا کردم که نتیجشو آپلود کردم،فقط اسم نویسنده ها رو هم اضافه کردم که شما ببینید هر کدوم چند تا نویسنده داره.

desatir7316
سه شنبه 27 تیر 1391, 13:09 عصر
می گم توی جدول هاتون هیج رابطه کلید اصلی و خارجی وجود نداره درسته؟(یعنی author_tb.art_id با art.id که نمی تونه باشه؟ )

zahra6377
سه شنبه 27 تیر 1391, 13:26 عصر
می گم توی جدول هاتون هیج رابطه کلید اصلی و خارجی وجود نداره درسته؟(یعنی author_tb.art_id با art.id که نمی تونه باشه؟ )

author_tb.art_id همون art.id هست که برای هر نویسنده در جدول نویسنده ها ای دی مقاله هاش با کاما از هم جدا شده.یعنی اگه مثلا نویسنده 1 هم نویسنده مقاله با آی دی 1 و هم مقاله با آی دی 2 هست در author_tb.art_id برای اون 1،2 درج شده.

colors
سه شنبه 27 تیر 1391, 15:00 عصر
من همین کار رو کردم.کد شما رو کلا توی یه صفحه جدا گذاشتم و اجرا کردم که نتیجشو آپلود کردم،فقط اسم نویسنده ها رو هم اضافه کردم که شما ببینید هر کدوم چند تا نویسنده داره.
متوجه نشدم! الان کارتون راه افتاد یه نه؟
شما اگه براتون امکان داره این بخش کدهاتون رو همراه با بانکتون بدین من اینجا چک کنم.

zahra6377
سه شنبه 27 تیر 1391, 15:26 عصر
باشه میفرستم
ممنون

zahra6377
سه شنبه 27 تیر 1391, 15:46 عصر
جداول مقالات فارسی و انگلیسی و نویسنده های مقالات فارسی و انگلیسی رو گذاشتم،بیزحمت با کد خودتون چک کنید ببینید مشکل از جداولم نیست بعد اگه نبود کدمو قسمتای اضافشو حذف کنم بفرستم.

desatir7316
سه شنبه 27 تیر 1391, 15:52 عصر
شما اگه براتون امکان داره این بخش کدهاتون رو همراه با بانکتون بدین من اینجا چک کنم.
اینو منم هستم، راستی جدول هاتو کی خوای بذاری بی زحمت کد sql بذار نه ازشون عکس بندازی، ممنون



author_tb.art_id همون art.id هست که برای هر نویسنده در جدول نویسنده ها ای دی مقاله هاش با کاما از هم جدا شده.یعنی اگه مثلا نویسنده 1 هم نویسنده مقاله با آی دی 1 و هم مقاله با آی دی 2 هست در author_tb.art_id برای اون 1،2 درج شده.
من این تاپیکتونو الان دیدم ولی خودم یه تکه کد نوشتم که درسته فقط یه کم با ساختار شما فرق داره، راستی چرا کلید اصلی و خارجی تعریف نمی کنید؟
انجوری به نظر من بهتره

به هر حال: توی این جدول ها فیلد های اصلی رو اوردم خودت بقیه فیلدها رو بعدا اضافه کن
راستی یه ارتباط بین جدول ها هست که از سمت art فیلد id کلید اصلی و از سمت author_tb فیلد art_id کلید خارجیه.
CREATE TABLE IF NOT EXISTS `author_tb` (
`name` varchar(500) NOT NULL,
`rol` varchar(5000) NOT NULL,
`art_id` int(11) NOT NULL,
KEY `art_id` (`art_id`)
)

CREATE TABLE IF NOT EXISTS `art` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`author` varchar(255) NOT NULL,
`summary` mediumtext NOT NULL,
KEY `id` (`id`)
)

توی جدول دومی که ایجاد می کنی بقیه فیلدهایی رو که من نذاشتم رو بنویس و یه چیز دیگه: نه اینجا کلا توی طراحی جدول هات فیلد هاتو جوری تعربف کن که مشخص بشه هر فیلد مال کدوم جدول مثلا اگه فیلد title مربوط به جدول art هست می تونی بنویسیش aTitle....
البته توی این کدی که میخوام برات بذارم فک کنم این قانون رو رعایت کرده باشی بهتره!!!! (:

این کد که برات می ذارم تستش کردم درسته:

<?php


mysql_connect("localhost","root","")or die(mysql_error());
mysql_select_db("zahra")or die(mysql_error());

$sql1="select title as maintitle , summary as mainsummary from art";
$result1=mysql_query($sql1);
// while($row1=mysql_fetch_assoc($result1)){
for($i=0; $i!=mysql_num_rows($result1); $i++){
echo @mysql_result($result1, $i,0)."<br>";
$sql2="select * from art,author_tb where
art.title='".@mysql_result($result1, $i,0)."' and art.id=author_tb.art_id;";
$result2=mysql_query($sql2);
while($row2=mysql_fetch_assoc($result2)){

// echo $row2["author"]."<br>";
echo $row2["name"]." = = ".$row2["rol"]."<br>";

}//end of internal while
echo @mysql_result($result1, $i,1)."<hr>";// اينجا ميتني بقيه فيلدهاتو مثل قيمت و ... رو بذاري
}//end of external while
?>

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

zahra6377
سه شنبه 27 تیر 1391, 17:49 عصر
$sql1="select title as maintitle , summary as mainsummary from art";


maintitle و mainsummary چیه؟میشه توضیح بدید؟



CREATE TABLE IF NOT EXISTS `author_tb` (
`name` varchar(500) NOT NULL,
`rol` varchar(5000) NOT NULL,
`art_id` int(11) NOT NULL,
KEY `art_id` (`art_id`)
)



CREATE TABLE IF NOT EXISTS `art` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`author` varchar(255) NOT NULL,
`summary` mediumtext NOT NULL,
KEY `id` (`id`)
)



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

desatir7316
سه شنبه 27 تیر 1391, 18:04 عصر
maintitle و mainsummary چیه؟میشه توضیح بدید؟
همون titile و summary هستن که اسم مستعار توی جستجو براشون تعریف کردم، دفعه اول هردو حلقه رو با mysql_fetch_assoc نوشتم و چون این تابع نتیجه رو به صورت آرایه برمیگردونه تو نتیجه ها مشکل به وجود می آورد
ولی الان ظاهرا اگه پاکش کنی مشکلی پیش نمیاد


یعنی میگید جدولامو دوباره تعریف کنم؟
نه که بخواد از اول درستش کنید
یه سری تغیرات بدید

کد درست کار کرد؟
به این جدول های مقدار بدید تست کنید اگه درسته اون موقع تغیراتتونو اعمال کنید که مشکلی پیش نیاد

zahra6377
سه شنبه 27 تیر 1391, 18:51 عصر
<?php


mysql_connect("localhost","root","")or die(mysql_error());
mysql_select_db("zahra")or die(mysql_error());

$sql1="select title as maintitle , summary as mainsummary from art";
$result1=mysql_query($sql1);
// while($row1=mysql_fetch_assoc($result1)){
for($i=0; $i!=mysql_num_rows($result1); $i++){
echo @mysql_result($result1, $i,0)."<br>";
$sql2="select * from art,author_tb where
art.title='".@mysql_result($result1, $i,0)."' and art.id=author_tb.art_id;";
$result2=mysql_query($sql2);
while($row2=mysql_fetch_assoc($result2)){

// echo $row2["author"]."<br>";
echo $row2["name"]." = = ".$row2["rol"]."<br>";

}//end of internal while
echo @mysql_result($result1, $i,1)."<hr>";// اينجا ميتني بقيه فيلدهاتو مثل قيمت و ... رو بذاري
}//end of external while
?>


ممنون این کد کار کرد،فقط میشه یکم توضیحش بدید میخوام توی کد خودم بذارمش بعضی جاهاشو متوجه نمیشم.خطوط 11-12-13-21
بعد id مقاله ها چی شد که با تابع explode جداشون میکردیم؟

desatir7316
سه شنبه 27 تیر 1391, 19:51 عصر
الهي شکر
خط 11:

echo @mysql_result($result1, $i,0)."";
توي خط 8 کوئري اجرا شده و نتيجش توي $result1 قرار داده شده، حالا محتواي $result1 مثل يه جدول يا يه آرايه 2 بعدي در نظر بگير، حالا بريم سراغ @mysql_result (البته اين تابع رو بدون @ هم ميتوني استفاده کني):
پارامتر اول رو نتيجه کوئري رو بهش ميدي، پارامتر دوم رو مي گي کدوم سطر اون (که شماره ها از صفر شروع ميشن) و توي پارامتر سوم هم ميگي کدوم ستون(که اينم از صفر شماره هاش شروع ميشن) اگه پارامتر سوم رو ندي خودش صفر حسابش مي کنه

خط 12 چيز خاصي نيست، يه کوئريه که ادامش توي خط 13 است، با اين کوئري دو جدول رو به هم ارتباط دادم، با چند تا مقدار تستش کن متوجه مي شي،

خط 21 هم همونه که توي خط 11 توضيش دادم.


بعد id مقاله ها چي شد که با تابع explode جداشون ميکرديم؟
الان ديگه فيلد art_id توي جدول author_tb کليد خارجيه و با فيلد id توي جدول art که کليد اصليه ارتباط داره يعني هر مقداري که توي art_id قرار ميگيره از قبل بايد توي id اضاقه شده باشه(البته اگه اين ارتباط رو برقرار کرده باشي)
فیلد art_id دیگه مقداری با کاما نمی گیره، یعنی توی هر فیلدش فقط یه مقدار قرار میگیره البته میتونی خودت اوجوریش کنی ولی دیگه باید این رابطه بین جدول ها رو از بین ببری

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

چيزه ديگه اي ابهام نداري؟

zahra6377
سه شنبه 27 تیر 1391, 22:15 عصر
واقعا ازتون ممنونم هم از شما و هم از جناب colors
اگه اجازه بدید برم توی کد خودم بذارم بعد اشکالامو بپرسم.

desatir7316
سه شنبه 27 تیر 1391, 22:26 عصر
واقعا ازتون ممنونم هم از شما و هم از جناب colors

خواهش می کنم، چیزی نبود فقط کمک به یک هم نوع بود هرچند ناچیز بود


اگه اجازه بدید برم توی کد خودم بذارم بعد اشکالامو بپرسم.
در خدمتیم

zahra6377
جمعه 30 تیر 1391, 12:25 عصر
سلام
دوستان شرمنده قبل از این صفحه ای که دارم کدشو مینویسم یه صفحه هست که شامل یه جدوله که لیست مقاله ها داخلش نوشته شده،کاربر با کلیک روی هر مقاله به صفحه مورد نظر هدایت میشه که شامل مشخصات کامل مقاله هست که یکیش نام نویسنده ها و عنوان علمی اونا هست،موقعی که کاربر روی مقاله ها در صفحه قبلی کلیک میکنه id مقاله به این صفحه ارسال میشه و در این صفحه با استفاده از این id مشخصات مقاله از دیتابیس استخراج میشه و نمایش داده میشه،حالا نمیدونم که چطوری با این کد این کار رو انجام بدم ؟

MMSHFE
جمعه 30 تیر 1391, 16:59 عصر
این کد رو امتحان کنید:


for($i = 0; $i < $j; $i++) {
$result3 = mysql_query("SELECT * FROM `author_tb` WHERE (`name`='{$author_array[$i]}')");
if($result3) {
$while($row3 = mysql_fetch_assoc($result3)) {
echo '<p>' . $row3['rol'] . '</p>' . PHP_EOL;
}
}
}

soroush.r70
جمعه 30 تیر 1391, 19:47 عصر
اینو برای چی می ذارین . PHP_EOL;

zahra6377
جمعه 30 تیر 1391, 21:30 عصر
این کد رو امتحان کنید:


for($i = 0; $i < $j; $i++) {
$result3 = mysql_query("SELECT * FROM `author_tb` WHERE (`name`='{$author_array[$i]}')");
if($result3) {
$while($row3 = mysql_fetch_assoc($result3)) {
echo '<p>' . $row3['rol'] . '</p>' . PHP_EOL;
}
}
}

سلام
با این کد هم همون مشکل قبلی رو داره ،فقط برای نفر اول نشون میده!

desatir7316
شنبه 31 تیر 1391, 11:36 صبح
سلام
چیزی که به ذهن من رسید اینه که توی یه صفحه لیست مقالاتتو داری بعد روی هر کدوم که کلیک بکنی می خوای اون اطلاعاتی رو که راجع به اونه به دست بیاری:
طبق چیزی که من فهمیدم این میشه کد صفحه اولت که لیست مقالاتت توش هست:


<?php
mysql_connect("localhost","root","") or die("could not connect");
mysql_select_db("zahra");
$sql="select * from art";
$result=mysql_query($sql) or die("query error");
while($row=mysql_fetch_assoc($result)){
$myQueryStr="secondPage.php?selectedId=".$row["id"];
echo '<a href="'.$myQueryStr.'">';
echo "article NO:".$row['id']."</a><br>";
}
?>


اینم میشه کد صفحه secondPage.php که مشخصات کامل اون مقاله رو نشون میده:



<?php
$newId=$_GET['selectedId'];
mysql_connect("localhost","root","") or die("could not connect");
mysql_select_db("zahra") or die("could not select db");
$sql="select * from art where
art.id='".$newId."'";
$result=mysql_query($sql) or die("query error");
while($row=mysql_fetch_assoc($result)){
echo $row['id']."<br>";
echo $row['title']."<br>";
echo $row['summary']."<br>";
}
$sql="select * from author_tb where art_id=".$newId;
$result=mysql_query($sql) or die("query error");
for($i=0; $i!=mysql_num_rows($result);$i++){
echo mysql_result($result,$i,0)." = ".mysql_result($result,$i,1)."<br>";
}

?>


هرجا ابهامی بود بگو

zahra6377
یک شنبه 01 مرداد 1391, 17:05 عصر
هرجا ابهامی بود بگو

درست شد.واقعا ممنونم،دیگه کم کم داشتم ناامید میشدم.

desatir7316
یک شنبه 01 مرداد 1391, 19:17 عصر
درست شد.واقعا ممنونم،دیگه کم کم داشتم ناامید میشدم.
خواهش می کنم
ناامید چرا دیگه
من که 2روز پیش جوابش رو نوشته بودم
امیدوارم موفق باشی

MMSHFE
یک شنبه 01 مرداد 1391, 21:36 عصر
اینو برای چی می ذارین . PHP_EOL;
برای خوانایی سورس کد تولید شده. این ثابت در ویندوز به r\n\ و در لینوکس به n\ تبدیل میشه که باعث میشه دستور echo کارکتر End Of Line رو درج کنه و درنتیجه خروجیهای echoهای مختلف پشت سر هم قرار نگیرن. اینکار باعث میشه اگه خروجی نهایی، اون چیزی که میخواین نبود، توی View Source سورس کد مرتب تری داشته باشین و سریعتر بفهمین مشکل از کجاست. موفق باشید.

desatir7316
یک شنبه 01 مرداد 1391, 21:50 عصر
برای خوانایی سورس کد تولید شده. این ثابت در ویندوز به r\n\ و در لینوکس به n\ تبدیل میشه که باعث میشه دستور echo کارکتر End Of Line رو درج کنه و درنتیجه خروجیهای echoهای مختلف پشت سر هم قرار نگیرن. اینکار باعث میشه اگه خروجی نهایی، اون چیزی که میخواین نبود، توی View Source سورس کد مرتب تری داشته باشین و سریعتر بفهمین مشکل از کجاست. موفق باشید.

دوست عزیز این برای من کار نمی کنه ، /n هم کار نمی کنه
فقط <br> می تونم برم خط بعد
می دونی مشکل از کجاست؟

colors
دوشنبه 02 مرداد 1391, 10:41 صبح
درود

همونطور که فرمودن توی View Sourceی که از مرورگر میگیری، عمل میکنه. البته تو مرورگر هم یه خط فاصله میندازه. یه تست بزن