Autor Zpráva
Ikki
Profil
Zdravím přátelé,
po dlouhé době jsem narazil na problém, který mi hlava nějak nebere.
Napadlo mne mnoho řešení, ale každé nějakým způsobem vypadlo nebo nefungovalo, tak se obracím na Vás.

V indexu se nachází následující kód;
            $select = $mysqli->query("SELECT * FROM portfolio ORDER BY RAND() LIMIT 6");
            while ($done = $select->fetch_array()){ echo '
                        <li class="cbp-item '.$done['category'].'">
                            <a href="ajax/project.php?id='.$done['id'].'" class="cbp-caption cbp-singlePageInline"
                               data-title="'.$done['name'].'<br>vytvořil Roman">
                                <div class="cbp-caption-defaultWrap GrayScale">
                                    <img src="'.$done['image'].'" alt="">
                                </div>
                                <div class="cbp-caption-activeWrap">
                                    <div class="cbp-l-caption-alignLeft">
                                        <div class="cbp-l-caption-body">
                                            <div class="cbp-l-caption-title">'.$done['name'].'</div>
                                        </div>
                                    </div>
                                </div>
                            </a>
                        </li>';} ?>
                        
                    </ul>
                </div>

                <div class="cbp-l-loadMore-button">
                    <a href="ajax/loadMore.php" class="cbp-l-loadMore-button-link">Načíst další</a>
                </div>  
Tento kód vypíše 6 náhodných obrázků z databáze, no a následuje button, který načte všechny ostatní z dalšího souboru, ve kterém se nachází následující kód;
<div class="cbp-loadMore-block1">
<?php
require_once('../system/functions/query.php');
            $select = $mysqli->query("SELECT * FROM portfolio ORDER BY RAND()");
            while ($done = $select->fetch_array()){ echo '
        <li class="'.$done['category'].' cbp-item">
                            <a href="ajax/project.php?id='.$done['id'].'" class="cbp-caption cbp-singlePageInline"
                               data-title="'.$done['name'].'<br>vytvořil Roman">
                                <div class="cbp-caption-defaultWrap GrayScale">
                                    <img src="'.$done['image'].'" alt="">
                                </div>
                                <div class="cbp-caption-activeWrap">
                                    <div class="cbp-l-caption-alignLeft">
                                        <div class="cbp-l-caption-body">
                                            <div class="cbp-l-caption-title">'.$done['name'].'</div>
                                        </div>
                                    </div>
                                </div>
                            </a>
        </li>';}?>
</div>
A tady se nachází ten problém zdvojení. Jelikož na úvodu vypíšu pouze 6 obrázků, které tam zůstanou a v dalším souboru načítám veškeré obrázky, tak prvních 6 obrázků se vlastně zobrazí dvakrát. Tím, že je tam random select na těch daných 6 obrázků, tak nemůžu ani v "LoadMore" zakázat ID obrázků, které by se neměly zobrazovat.

Tak Vás prosím o pomoc, jak zabránit zdvojení? Děkuji.
Radek9
Profil
Ulož si ID těch šesti načtených (někde v rámci JS) a ajaxem je předej tomu PHP scriptu. Potom už stačí jen drobně upravit SQL dotaz:
SELECT * FROM portfolio ORDER BY RAND() WHERE id NOT IN (1, 2, 3, 4, 5, 6)

Samozřejmě nezapomeň ty vstupy (ID) ošetřit.
Ikki
Profil
Jenže tady mám problém s tím, že jsou to dva oddělené soubory a nijak na sebe nenavazují kromě vyvolán pomocí <a>.
Pokud uložím data, tak ty data opět najdu pouze v tom souboru, ale už né v LoadMore a pomocí URL ty údaje taky předat nemůžu, protože se to musí načíst automaticky na úvodní stránce.
Radek9
Profil
Ikki:
Proto ti říkám, abys to pomocí toho prvního souboru nějak zakódoval do JS nebo do toho odkazu (třeba pomocí query stringu):
<div>
  <ul>
<?php
$select = $mysqli->query("SELECT * FROM portfolio ORDER BY RAND() LIMIT 6");
$ids = array();
while ($done = $select->fetch_array()){
    $ids[] = $done['id'];
    
    echo '
        <li class="cbp-item '.$done['category'].'">
            <a href="ajax/project.php?id='.$done['id'].'" class="cbp-caption cbp-singlePageInline"
               data-title="'.$done['name'].'<br>vytvořil Roman">
                <div class="cbp-caption-defaultWrap GrayScale">
                    <img src="'.$done['image'].'" alt="">
                </div>
                <div class="cbp-caption-activeWrap">
                    <div class="cbp-l-caption-alignLeft">
                        <div class="cbp-l-caption-body">
                            <div class="cbp-l-caption-title">'.$done['name'].'</div>
                        </div>
                    </div>
                </div>
            </a>
        </li>';
}
?>
                        
  </ul>
</div>

<div class="cbp-l-loadMore-button">
  <a href="ajax/loadMore.php?ids=<?=join(',', $ids)?>" class="cbp-l-loadMore-button-link">Načíst další</a>
</div>

V druhém souboru to normálně dostaneš v $_GET['ids'], splitneš podle čárky, ošetříš a začleníš do dotazu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: