PDA

View Full Version : سوال: مشکل با خواندن از دیتابیس



mamali-mohammad
دوشنبه 08 فروردین 1390, 14:24 عصر
سلام
من یه سایت تقریبا داینامیک! ساختم
تو صفحه اول اومدم لیست کردم و تمام ایدی هایی که در Product هست رو میخونه و نشون میده :

SELECT * FROM products ORDER BY id DESC LIMIT 6

یه صفحه دیگه ساختم و حالا میخوام اون هایی که در product دارای Category هستن رو نشون بده :
SELECT * FROM products WHERE category='$category' ORDER BY id DESC LIMIT 6

پست هارو نشون میده ، با این تفاوت که اونایی که Category براشون انتخاب نشده رو نشون میده !!!
چطوری حل کنم مشکل رو ؟
ممنون

sargardoon
دوشنبه 08 فروردین 1390, 14:45 عصر
توجه داشته باش که single quote و double quote باهم فرق میکنه اینرو امتحان کن

SELECT * FROM products WHERE category="$category" ORDER BY id DESC LIMIT 6

و یا میتونی به این روش بنویسی
$sql = "SELECT * FROM products WHERE category='".$category."' ORDER BY id DESC LIMIT 6";

mamali-mohammad
دوشنبه 08 فروردین 1390, 15:06 عصر
SELECT * FROM products WHERE category="$category" ORDER BY id DESC LIMIT 6

این کلا ارور داد


$sql = "SELECT * FROM products WHERE category='".$category."' ORDER BY id DESC LIMIT 6";
این هم نتیجه قبلی رو میده

MMSHFE
دوشنبه 08 فروردین 1390, 15:33 عصر
با سلام، ساختار جدولتون و اينكه دقيقاً چه Query ميخواين رو بنويسيد تا بهتر بتونيم راهنمايي كنيم.
موفق باشيد.

mamali-mohammad
دوشنبه 08 فروردین 1390, 15:40 عصر
من یه جدول Products ساختم شامل این ردیف ها : id , product_name , price , details , category , subcategory , date_added
این کد رو در صفحه اصلی میزارم :

SELECT * FROM products ORDER BY id DESC LIMIT 6
هرچی رکود ثبت شده باشه رو نشون میده تا 6 تا

حالا در زیر همین صفحه میخوام فقط رکوردهایی رو نشون بده که در Category باشه .
اینو زدم :

SELECT * FROM products WHERE category='$category' ORDER BY id DESC LIMIT 6
نشون میده ، اما رکوردهایی که Category نداشته باشه رو نشون میده !!!

MMSHFE
دوشنبه 08 فروردین 1390, 17:07 عصر
category$ رو از كجا ميخونيد؟ شرط WHERE رو توي پرانتز بگذارين و اسامي جداول و فيلدها رو هم بين گيومه برعكس (`) و ببينيد مشكل رفع ميشه يا نه؟


$result=mysql_query("SELECT * FROM `products` WHERE (`category`='$category') ORDER BY `id` DESC LIMIT 6");

mamali-mohammad
دوشنبه 08 فروردین 1390, 17:35 عصر
نشد !
این عکس از دیتابیس :

http://up.iranblog.com/images/a3qno42t246drmioxxnu.jpg

اونایی که دایره آبی داره Category داره و میخوام نمایش بده
اما برعکس شده !!
اونایی که Category نداره رو نشون میده !!!

sargardoon
دوشنبه 08 فروردین 1390, 18:59 عصر
یه کاری بکنید برای اونهایی که بدون مقدار هستش رو یه مقدار قرار بدهید اینطوری کارتون صد در صد درست میشه
اگر باز جواب نگرفتی ساختار دیتابیس و اطلاعاتش رو به صورت فایل sql بفرست، و یا به صورت دستی کد رو در MySQL امتحان کن بعد که جواب گرفتی از منوی Create PHP Code کدش رو بگیر و مقدار دسته رو تغییر بده.

mamali-mohammad
دوشنبه 08 فروردین 1390, 19:11 عصر
جواب نداد !
هرچی رکورد بود رو ، category هاشو پر کردم
اما دیگه هیچی نشون نمیده !
دقیقا داره برعکس خواسته من عمل میکنه !

sargardoon
دوشنبه 08 فروردین 1390, 19:29 عصر
میشه ساختار و داده های اون جدول رو بذاری اینجا؟؟؟؟

mamali-mohammad
دوشنبه 08 فروردین 1390, 19:38 عصر
کدوم داداش ؟

sargardoon
دوشنبه 08 فروردین 1390, 20:03 عصر
کدوم داداش ؟
یه چیزی مثل این که جدول مربوطه رو میسازه
CREATE TABLE IF NOT EXISTS `contactus` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` datetime NOT NULL,
`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
`email` varchar(30) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
`com` text CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


میخوام امتحانش کنم تا بتونم مشکلت رو حل کنم

mamali-mohammad
دوشنبه 08 فروردین 1390, 20:17 عصر
خدمت شما :


CREATE TABLE products (
id int(11) NOT NULL auto_increment,
product_name varchar(255) NOT NULL,
price varchar(16) NOT NULL,
details text NOT NULL,
category varchar(16) NOT NULL,
subcategory varchar(16) NOT NULL,
date_added date NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY product_name (product_name)
)

sargardoon
دوشنبه 08 فروردین 1390, 21:03 عصر
دوست عزیز من امتحان کردم و در تمامی حالتها جواب داد
SELECT * FROM products WHERE category='MAT' ORDER BY id ASC LIMIT 6;

SELECT * FROM products WHERE category='CLOTH' ORDER BY id DESC LIMIT 6;

SELECT * FROM products WHERE category='CAT' ORDER BY id DESC LIMIT 6;

SELECT * FROM products WHERE category='' ORDER BY id DESC LIMIT 6;
این هم یک نمونه

mamali-mohammad
دوشنبه 08 فروردین 1390, 21:15 عصر
آقا درست شد
مشکل من این بود که من از خود Category کل Category رو می خوندم
اینطوری : Category='category'
در صورتی که باید از هر category زیر مجموعه مورد نظر رو میزاشتم
ممنون دوست من

sargardoon
دوشنبه 08 فروردین 1390, 22:13 عصر
خوشحالم مشکلتون حل شده، من کدی نوشته بودم که اینرا هم تست کردم درست بود
این هم کدی که نوشتم

<?php
$con = mysql_connect('localhost','root','') or die('unable to connect mysql');
$db = mysql_select_db('test',$con) or die('unable to select database');

$category = 'cloth';
$sql = mysql_query("SELECT * FROM products WHERE category='".$category."' ORDER BY id DESC LIMIT 6;") or die('check sql syntax');

$nor = mysql_num_rows($sql);
$row = mysql_fetch_assoc($sql);
echo '<h3>Number of Records are: '.$nor.'</h3>';

echo "<table>";
for($h=0;$h<mysql_num_fields($sql);$h++){
$fieldCaption=mysql_field_name($sql,$h);
echo "<th width=80px style=\"text-align:center; background-color:#abcdef; border: thin solid #abcdef;\">".$fieldCaption."</th>";
}
for($i=0;$i<$nor;$i++){
echo "<tr>";
for($j=0;$j<mysql_num_fields($sql);$j++){
$DataRec = mysql_result($sql,$i,$j);
echo "<td width=80px style=\"text-align:center; border: thin solid #abcdef;\">".$DataRec."</td>";
}
echo "</tr>";
}
echo "</table>";
?>

mamali-mohammad
دوشنبه 08 فروردین 1390, 22:29 عصر
ممنون
مشکل حل شده
دمت گرم

mamali-mohammad
چهارشنبه 10 فروردین 1390, 17:30 عصر
داداش من یه مشکل دارم
فرض کن 5-6 تا دسته بندی داریم

من کاری کردم که برای هر پست که ارسال میشه ، روی عکسش که کلیک کنی ، Category رو بیاره :

<p><a href="cat.php?category='. $category .'">view</a></p>
اینم مسیری که باز میکنه و مشکلی برای آدرس ندارم :

http://127.0.0.1/store/cat.php?category=cloth

اینم کد صفحه cat.php :

<?php
if (isset($_GET['category'])){
include "storescript/connect_to_mysql.php";
$category=preg_replace('#[^0-9]#i','',$_GET['category']);
$sql=mysql_query("SELECT * FROM products WHERE category='$category' LIMIT 1");
$productCount=mysql_num_rows($sql);
if ($productCount>0){
while ($row=mysql_fetch_array($sql)){
$id=$row["id"];
$subcategory=$row["subcategory"];
$details=$row["details"];
$price=$row["price"];
$product_name=$row["product_name"];
$date_added=strftime("%b,%d,%Y",strtotime($row["date_added"]));
}
} else {
echo "No Item !";
exit();
}
} else {
echo "Data not render";
exit();
}
mysql_close();
?>

مشکل از کجاست ؟

mamali-mohammad
چهارشنبه 10 فروردین 1390, 22:15 عصر
دوستان ؟
میشه راهنمایی کنید ؟

mamali-mohammad
پنج شنبه 11 فروردین 1390, 13:13 عصر
دوستان این مورد رو کمک کنید ، دیگه سعی میکنم سوالی نپرسم !!

sargardoon
پنج شنبه 11 فروردین 1390, 14:38 عصر
دوستان این مورد رو کمک کنید ، دیگه سعی میکنم سوالی نپرسم !!
این حرفها چیه؟ اینجا درست شده که مشکلات هم دیگر رو حل کنیم.
من که متاسفانه متوجه نشدم وگرنه بهت کمک میکردم، کمی واضع تر بگو شاید دیگران بتوانند کمک کنند.

mamali-mohammad
پنج شنبه 11 فروردین 1390, 16:25 عصر
دمت گرم ، نوکرم

من یه صفحه Product.php ساختم
و دستوری نوشتم که اگه ID رو گرفتی ، اطلاعات رو از دیتابیس بخون و نمایش بده
که با گذاشتن echo $id , echo $category و ... در htm صدا میزنه و میخونه
در این مسیر نشون میده و مشکلی هم نیتس :

http://127.0.0.1/store/product.php?id=89
اینجا موردی نداریم و این کدش :


<?php
if (isset($_GET['id'])){
include "storescript/connect_to_mysql.php";
$id=preg_replace('#[^0-9]#i','',$_GET['id']);
$sql=mysql_query("SELECT * FROM products WHERE id='$id' LIMIT 1");
$productCount=mysql_num_rows($sql);
if ($productCount>0){
while ($row=mysql_fetch_array($sql)){
$category=$row["category"];
$subcategory=$row["subcategory"];
$details=$row["details"];
$price=$row["price"];
$product_name=$row["product_name"];
$date_added=strftime("%b,%d,%Y",strtotime($row["date_added"]));
}
} else {
echo "No Item !";
exit();
}
} else {
echo "Data not render";
exit();
}
mysql_close();
?>


حالا میخوام این عمل ، برای Category ها هم باشه که به این صورت نوشتم :


<?php
if (isset($_GET['category'])){
include "storescript/connect_to_mysql.php";
$forward="";
$category=preg_replace('#[^0-9]#i','',$_GET['category']);
$sql=mysql_query("SELECT * FROM products WHERE category='$category' LIMIT 5");
$productCount=mysql_num_rows($sql);
if ($productCount>0){
while ($row=mysql_fetch_array($sql)){
$id=$row["id"];
$subcategory=$row["subcategory"];
$details=$row["details"];
$price=$row["price"];
$product_name=$row["product_name"];
$date_added=strftime("%b,%d,%Y",strtotime($row["date_added"]));
$forward .="$subcategory";
}
} else {
echo "No Item !";
exit();
}
} else {
echo "Data not render";
exit();
}
mysql_close();
?>

دستور اینجوری میشه که اگه Category رو گرفتی ، $category رو بخون و محتویات اون رو به صورت چرخشی در forward نشون بده
اینم لینکش :

http://127.0.0.1/store/product.php?category=cloth
یا

http://127.0.0.1/store/product.php?category=book

که متاسفانه اونایی رو نشون میده که در category مورد نظر نیستن !
و اینکه فقط یدونه نشون میده ! در صورتی که LIMIT روی 6 هست

MMSHFE
پنج شنبه 11 فروردین 1390, 19:40 عصر
با سلام، دوست گرامي دستور preg_replace كه گذاشتن كه همه كاركترها رو حذف ميكنه. دقت كنيد كه درمورد id بايد عددي باشه ولي درمورد category از حروف استفاده كردين. الگوي preg_replace رو تعويض كنيد.
موفق باشيد.

mamali-mohammad
پنج شنبه 11 فروردین 1390, 20:32 عصر
ممنون عزیزم
این مشکل حل شده و حالا مشکل جدید دارم !!!

زمانی که میریم به یه دسته بندی این مسیر هست و محتویات رو نشون میده به خوبی :

http://127.0.0.1/store/cate.php?category=cloth

این صفحه به 6 آتیم LIMIT شده در نتیجه اگه در این دسته بندی بیشتر از 6 تا باشه صفحه اضافه میکنه
حالا برای اینکه صحفه بیاد لینک اینطوری میشه :


http://127.0.0.1/store/cate.php?category=cloth?pn=2

اما زمانی که میزنم نمیاره !
مشکل کجاست ؟

ممنون

MMSHFE
پنج شنبه 11 فروردین 1390, 21:22 عصر
با سلام، دوست گرامي مشكل از دستور limit كه گذاشتين هست. اينطوري تغييرش بدين:


$pn=1;
if($_GET['pn']!='')
{
$pn=intval(preg_replace('#[^0-9]#i','',$_GET['pn']));
}
$sql=mysql_query("SELECT * FROM products WHERE category='$category' LIMIT ".(($pn-1)*5).",5");

ببينيد مشكل رفع ميشه يا نه.
موفق باشيد.

mamali-mohammad
پنج شنبه 11 فروردین 1390, 21:49 عصر
نشد داداش
کلا دوتا sql داره که اینطوری کردم :


$sql = mysql_query("SELECT * FROM send WHERE category='$tar' LIMIT".(($pn-1)*5).",5");

$sql2 = mysql_query("SELECT * FROM send WHERE category='$tar' ORDER BY id DESC $limit".(($pn-1)*5).",5");

mamali-mohammad
پنج شنبه 11 فروردین 1390, 21:59 عصر
اینم از نحوه لینک دادن به پیج ها :


$centerPages .= '&nbsp; <a href="' . $_SERVER['PHP_SELF'] . '?'.$category.'?pn=' . $add1 . '">' . $add1 . '</a> &nbsp;';

و مسیر نهایی ساخته شده :

http://127.0.0.1/store/cate.php?category=cloth?pn=2

صفحه اول لیست رو خوب نشون میده
صفحه دوم رو چیزی نمیاره !

این خطا رو میده :

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP-5.3.3\www\store\cate.php on line 81
اینم خط 81 :

while($row = mysql_fetch_array($sql2)){

MMSHFE
پنج شنبه 11 فروردین 1390, 22:55 عصر
با سلام، قبل از دستور ..._sql=mysql$ دستور زير رو اجرا كنيد:


echo "SELECT * FROM send WHERE category='$tar' LIMIT".(($pn-1)*5).",5";

اين دستور رو هم قبل از دستور ..._sql2=mysql$ اجرا كنيد:


echo "SELECT * FROM send WHERE category='$tar' ORDER BY id DESC $limit".(($pn-1)*5).",5";

ببينيم چي چاپ ميشه تا مشكل رو رفع كنيم.
راستي، اين دستور رو هم بعد از همه دستورات اجرا كنيد:


echo mysql_error();

موفق باشيد.

mamali-mohammad
پنج شنبه 11 فروردین 1390, 23:02 عصر
SELECT * FROM send WHERE category='Graphic Template' LIMIT-5,5SELECT * FROM send WHERE category='Graphic Template' ORDER BY id DESC LIMIT 0,60,5
این اررور چاپ شد
هیچ تاثیری هم روی کار نداره جز همین ارور

MMSHFE
جمعه 12 فروردین 1390, 08:12 صبح
با سلام، اين صفحه رو ببينيد:
گذاشتن صفحه بعدي و قبلي (http://barnamenevis.org/showthread.php?280365-%DA%AF%D8%B0%D8%A7%D8%B4%D8%AA%D9%86-%D8%B5%D8%AD%D9%81%D9%87-%D8%A8%D8%B9%D8%AF%DB%8C-%D9%88-%D9%82%D8%A8%D9%84%DB%8C)
فكر كنم روش كار دستتون بياد.
راستي، limit$ رو براي چي توي دستور دوم گذاشتين؟
موفق باشيد.

mamali-mohammad
جمعه 12 فروردین 1390, 12:26 عصر
سلام
خوب این سوال خودم بود عزیز
که مشکل حل شده
در حال حاضر صفحات به خوبی کار میکنه
مشکل من بعد از Category هاست
فرض کنم میرم در Category به نام Cloth
این آدرسشه :

http://127.0.0.1/store/cate.php?category=cloth
این دسته بندی چندین محصول و داره و طبق دستور قبلی ، به چند صفحه تقسیم میشه
صفحه اصلیشو خوب نشون میده ، اما صفحه دومش که ادرس این هست رو دیگه نشون نمیده :

http://127.0.0.1/store/cate.php?category=cloth?pn=2
دقیقا همین دستور برای صفحه اصلی به خوبی کار می کنه :

http://127.0.0.1/store/index.php?pn=2

MMSHFE
جمعه 12 فروردین 1390, 12:45 عصر
با سلام، دوست گرامي بعد از cloth به جاي ? از & استفاده كنيد. مقادير Query String بايد بعد از ? به صورت زوج (name=value) ارسال بشن و اگه بيش از يك زوج بود، با & از هم جدا بشن.
موفق باشيد.

mamali-mohammad
جمعه 12 فروردین 1390, 13:18 عصر
داداش دمت گرم :قلب:
ردیف شد

حالا داداش یه مشکل دارم با کدهای java
مثلا یه کد هست که خبر گردشیه
یه کد هست مثلا خبر بالا رونده

حالا هرکدوم رو جدا بزارم کار میکنه ها
اما با هم میزارمشون یکیشون از کار میافته
مشکل کجاست ؟

پ.ن : از لحاظ جایگزینی و ساختاری هم اصلا به هم مرتبط نیستن ( div , class , id و ... منظورمه )

MMSHFE
جمعه 12 فروردین 1390, 14:26 عصر
با سلام، در صورت امكان بايد كد رو ببينم تا بتونم درمورد مشكل راهنمايي كنم.
موفق باشيد.