Зареждане на резултати от конкретната категория + ajax

vinsbg

Registered
Здравейте,

Може ли някой да помогне с този скрипт - getpictures.php
Код:
//get pic id from ajax request
if(isset($_POST["pic"]) && is_numeric($_POST["pic"]))
{
    $current_picture = filter_var($_POST["pic"], FILTER_SANITIZE_NUMBER_INT);
}else{
    $current_picture=1;
}

//Connect to Database
$mysqli = new mysqli($hostname, $username, $password, $databasename);

if ($mysqli->connect_error){  
    die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}

//get next picture id
$result = $mysqli->query("SELECT image_id FROM images WHERE image_id > $current_picture ORDER BY image_id ASC LIMIT 1")->fetch_object();

if($result){
    $next_id = $result->image_id;
}

//get previous picture id
$result = $mysqli->query("SELECT image_id FROM images WHERE image_id < $current_picture ORDER BY image_id DESC LIMIT 1")->fetch_object();
if($result){
    $prev_id = $result->image_id;
}

//get details of current from database
$result = $mysqli->query("SELECT image_name, image_title, image_hits FROM images WHERE image_id = $current_picture LIMIT 1")->fetch_object();

if($result){
   
    //construct next/previous button
    $prev_button = (isset($prev_id) && $prev_id>0)?'<a href="#" data-id="'.$prev_id.'" class="get_pic"><img src="prev.png" border="0" /></a>':'';
    $next_button = (isset($next_id) && $next_id>0)?'<a href="#" data-id="'.$next_id.'" class="get_pic"><img src="next.png" border="0" /></a>':'';
   
    //output html
    echo '
                                    <h1><a href="#">'.$result->image_title.'</a></h1>
                                        <div class="pull-right">
                                        '.$prev_button.'
                                        '.$next_button.'
                                        </div>
                                <div class="article-content">
                                    <figure>
                                        <img  src="upload/'.$result->image_name.'" alt=""/>
                                    </figure>
                                </div>
                            ';
    
}
До тук всичко перфектно си работи, НО просто зарежда всички снимки от базата. Трябва да стане да хваща image_id-то и да зарежда снимките в ajax-a само от тази категория.

В image_category.php е това:
Код:
<head>
<script type="text/javascript">
$(document).ready(function() {

	$.post( "getpicture.php", { pic: "1"}, function( data ) {
	  $(".main-post").html( data );
	});
	
	$(".main-post").on("click",".get_pic", function(e){
		var image_id = $(this).attr('data-id');
		$(".main-post").html("<div style=\"margin:50px auto;width:50px;\"><img src=\"loader.gif\" /></div>");
		$.post( "getpicture.php", { pic: image_id}, function( data ) {
			$(".main-post").html( data );
		});
		return false;
	});
	
});
</script>
</head>
<body>
<article class="main-post">
// тук излизат снимките...
</article>
</body>
А линка, който води към image_category e
<a href="image_category.php?image_id='.$row['image_id'].'"></a>
 
В ajax-request-a трябва да добавиш id-то на категорията и после в заявката слагаш един филтър и готово!
$.post('url', {pic_id: id, category: 1})....
...
where category_id={id-то взето от $_POST['category']}

+ да добавя, че си изписал доста код, който може да се опрости доста с prepared statement, защо не използваш тях?

+още нещо. Този код:

PHP:
//get pic id from ajax request 
if(isset($_POST["pic"]) && is_numeric($_POST["pic"])) 
{ 
    $current_picture = filter_var($_POST["pic"], FILTER_SANITIZE_NUMBER_INT); 
}else{ 
    $current_picture=1; 
}
що не го направиш така:

PHP:
$id = !empty($_POST['pix']) && is_numeric($_POST['pix']) ? $_POST['pix'] : 1;
 
Благодаря за отговора.

сега по ред:
1. $id = !empty($_POST['pix']) && is_numeric($_POST['pix']) ? $_POST['pix'] : 1;

тук $id кое ID е? на снимката, на категорията?

2. $.post('url', {pic_id: id, category: 1})...

това къде точно в ajax-a да бъде?

3. Намерих го като туториал това в гугъл.. не съм много в час все още с prepared statement, и затова реших него да ползвам..
 
По първото - $id е $current_picture, използвах по-краткото име просто.

2. $.post('url', {pic_id: id, category: 1})...
това къде точно в ajax-a да бъде?
Е как къде, ти имаш само един ред...

ето този:
[js] $.post( "getpicture.php", { pic: image_id}, function( data ) {[/js]
трябва да ползваш параметър cat_id: 5 примерно, за да вземеш всичко от 5-та категория.

А ето нещо, което ще ти бъде полезно - http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059
(аз точно оттам започнах с prepared statements)
 
Нещо май не го правя като хората.. значи правя го така
Код:
		$.post( "getpicture.php", { pic: image_id,  category: 1}, function( data ) {
			$(".main-post").html( data );
		});
После в getpicture.php предполагам в тази заявка трябва да добавя WHERE клаузата нещо такова?
Код:
//get details of current from database
$result = $mysqli->query("SELECT image_name, image_title, image_hits FROM images WHERE image_id = $current_picture and img_category=1 LIMIT 1")->fetch_object();

В ajax-a категорията предполагам трябва да я подам от линка още на индекс-а, като ID-то на самата снимка или не? И ако не как ще стане динамично?


п.п. Благодаря за туториала. Ще го прегледам.

п.п2. Така по този начин зарежда първата снимка от категорията и като натисна бутона за следваща дава просто празна страница.
 
От това няма смисъл:
Код:
{ pic: image_id,  category: 1}
ползвай едно от двете:
[js]{ pic: image_id }
{ cat_id: 1}[/js]
1. в първия случай взимаш една картинка (getpic.php примерно)
2. във втория взимаш всичко от категория 1 (getcat.php примерно)

1. в първия случай ползваш кода, който досега ползваше
2. във втория имаш грубо казано това:
PHP:
select * from images where cat_id = $_POST['cat_id']
echo 'всичко от категория $_POST['cat_id']';
while(..)
echo '<img src="$row['image_src']" />'
 
Явно няма да го бъде. Не мога да го разбера как точно работи. Как след като съм отворил дадена снимка ajax-a после ще знае коя е категорията на тази снимка. Най-вероятно аз трябва да я подам в линка към съответната снимка. преди да се зареди новата страница?

Направих го както показа:
Код:
$.post( "getpicture.php", { img_category: 1 }, function( data )
И заявката в getpicture.php
Код:
$statement = $mysqli->query("SELECT image_name, image_title, image_hits FROM images WHERE img_category = ? LIMIT 1")->fetch_object();
$statement->bind_param('i', $_POST['img_category']);
$statement->execute();
$result = $statement->get_result();
if($result){
отговора показва, че нещо заявката не връща коректен отговор май..
Call to a member function fetch_object() on a non-object...

п.п. Нещо друго, което неразбирам е това:
Код:
$.post( "getpicture.php", { pic: "1"}, function( data ) {
	  $(".main-post").html( data );
Това какво всъщност прави? Зарежда първата снимка ли?
 
Тъй като явно съм създал известно объркване, ще обясня нещата отначало:

1. Имаме 2 неща: категории и снимки
2. Следователно имаме два скрипта - един, който извежда всички снимки от категорията и един, който показва снимка с линкове "предишна" и "следваща"
2.1. Този, който показва дадена снимка - него вече си го направил и той работи
2.2 Този, който дава всички снимки от дадена категория:
PHP:
$category = (int) $_GET['id'];

// select * from pictures where category_id = $category
// тук естествено си оправяш колоните и таблицата

// в цикъла с фетчването имаш просто това:
while($row = msyqli fetch what you want) {
    echo '<a href="show_img.php?id='.$row['id'].'">open image with id='.$row['id'].'</a>';
}
3. Готови сме със server-side-a. Остава ajax-a:
3.1. Този за определена снимка:
$.get('show_img.php', {id: id})
3.2 Този за категориите:
$.get('show_categ.php', {id: id});

Ако се объркваш от имената:
show_pict.php - получава $_GET['id'] от ajax-a, което показва снимката, която искаш да се покаже
show_categ.php - получава $_GET['id'] от ajax-a, което показва номера на категорията, от която ще изведем снимките
 

Back
Горе