array probleem in slider

Status
Niet open voor verdere reacties.

weswillem

Gebruiker
Lid geworden
8 nov 2011
Berichten
310
Er wordt een arraysessie weggezet in de temp van de keuze(1) die gemaakt is in het menu.
Mocht men dan een andere keuze(2) maken dan wordt de bestaande sessie gedumpt en
de nieuwe arraysessie geplaatst.

Datgene is wat mij niet lukt. Weet ook niet waar ik dit neerzet in het script.
de logische gedachte is even weg.

Ook wil ik de nummering van de sessiearray zichtbaar. Omdat dit gebruikt
wordt op regel 133 op aan te geven - hoeveelste foto van Totaalfoto(= $last)- in array.
de variabele $rid wordt gebruikt om alle fotos te tonen (dus db-nummering.
Zoekende op het www en diverse probeersels lukt het mij niet om dit voor elkaar te krijgen.
mocht iemand mij daarin willen helpen, heel graag.
Het duurt mij nu te lang'
b.v.d.

PHP:
<?php
include ("../core/lib.inc.php");
myheader("slider");

$conn = mysqli_connect( $db['host'], $db['user'], $db['pw'], $db['db'] );
if(mysqli_connect_errno($conn)) 
{ 
    trigger_error('Fout bij verbinden met database: '.mysqli_connect_error()); 
} else {
    //echo "Verbinding gemaakt";
    }

if (isset($_GET['img']) == ""){ $_GET['img'] = 1;}
if (isset($_GET['img']) <> ""){ $rid = $_GET['img'];}
//echo $rid;
// init slideshow class
$ss = new slideshow($err);
if (($err = $ss->init()) != '')
{
	//header('HTTP/1.1 500 Internal Server Error');
	echo $err;
	exit();
}
// get image files from directory
$ss->get_images($conn);
// set variables, done.
list($curr, $caption, $first, $prev, $next, $last, $Omschrijving, $positie, $rid) = $ss->run();
/*
	slideshow class, can be used stand-alone
*/
class slideshow
{
	private $files_arr = NULL;
	private $err = NULL;
	
	public function __construct(&$err)
	{
		$this->files_arr = array();
		$this->err = $err;
	}
	public function init()
	{
		// run actions only if img array session var is empty
		// check if image directory exists
		//if (!$this->dir_exists())
		//{
		//  echo $this->dir_exists();
		//	return 'Error retrieving images, missing directory';
		//}
		//return '';
	}
	public function get_images($conn)
	{
		// run actions only if img array session var is empty
	if (isset($_SESSION['imgarr']))
	{
			$this->files_arr = $_SESSION['imgarr'];
            
	}else{
			//echo "array niet in sessie dus hier langs<br>";
            //hier het gekozen menu-item wat meegegeven wordt
            $sql= "SELECT * from omschrijving where buro='".$_GET['id']."'";;
            $result = mysqli_query($conn,$sql);
           
            if($result){
               
                while($row=mysqli_fetch_assoc($result)){
                    $this->files_arr[] = $row;
                }
            //print_r ($list);
            }else{
                echo "Fout";
            }
            }
            $_SESSION['imgarr'] = $this->files_arr;
            //print_r ($this->files_arr);            		
	}
	public function run()
	{
		
		$last = count($this->files_arr);
       
		if (isset($_GET['img']))
		{
			if (preg_match('/^[0-9]+$/', $_GET['img'])) $curr = (int)  $_GET['img'];
            //echo $curr;
			if ($curr <= 0 || $curr > $last) $curr = 1;
		}
		if ($curr <= 1)
		{
			$prev = $curr;
			$next = $curr + 1;
		}
		else if ($curr >= $last)
		{ 
            $prev = $last - 1;
		    $next = $last;
		}
		else
		{
			$prev = $curr - 1;
			$next = $curr + 1;
		}
        
        $foto = $this->files_arr[$curr - 1]['foto'];
        $Omschrijving = $this->files_arr[$curr - 1]['beschrijving'];
        $rid = $this->files_arr[$curr - 1]['id']; 
		$positie = $this->files_arr[$curr - 1]['positie'];
        //echo 'Fotonummer = '.$foto.'';
        echo '<br>';
        
        // regel benden set de caption-naam...
        $ext = ".JPG";
		$caption = str_replace(' ', ' ', $this->files_arr[$curr - 1]['foto']);
		$caption = str_replace(' ', ' ', $caption);
		$caption = preg_replace('/\.(jpg|jpe?g|gif|png|JPG)$/i', '', $caption);
		$caption = $caption.$ext;
		return array($this->files_arr[$curr - 1]['foto'], $caption, 1, $prev, $next, $last, $Omschrijving, $positie, $rid);
	}
	private function dir_exists()
	{
		//return file_exists(foto);
	}
}
?> 
<div id="hoofdvak">
    <div id="tekstvak">
    <?php
    // alleen laten zien wanneer men lid is
    if (isset($_SESSION['lid']) == 1){
    // wijzigen aanbrengen wanner men gerechtigd is.....
       // if (isset($_SESSION['rechten']) == 1){
    echo'<div class="numbertext"><center>Foto : '.$rid.' van '.$last.'</center></div>';  
    echo'<div class="gallery">';
    ?> 
        <a class= "prev" href="?img=<?=$prev;?>">❮</a>         
        <a class= "next" href="?img=<?=$next;?>">❯</a>
    <?php  
        if ($positie == 0){                                
            echo'<center><img class="scaled" src="'.fotos.$caption.'" alt="" ></center>';                
        }else{          
            echo'<center><img class="scaled1" src="'.fotos.$caption.'" alt="">';  //style= "height= 480px;"> </center>';            
        } 
            echo'<div><center><p class="gallery-image-label">'.$Omschrijving.'</p></center></div>';
    echo'</div>';         
 ?>
 
Kan je de coce wat compacter maken tot relevante code van +/- 20 regels? Ruim 140 regels is iets te veel van het goede om te helpen.

Even een heads-up: Je weet dat er SQL-injection mogelijk is?
Ook <center> is deprecated. Je kan dit prima met CSS oplossen.
 
Laatst bewerkt:
Hier wordt de array gemaakt
Code:
            $sql= "SELECT * from omschrijving where buro='".$_GET['id']."'";;
            $result = mysqli_query($conn,$sql);
           
            if($result){
               
                while($row=mysqli_fetch_assoc($result)){
                    $this->files_arr[] = $row;
                }
            }else{
                echo "Fout";
           }
            }
            $_SESSION['imgarr'] = $this->files_arr;
                          
    }

Vervolgens moet de array worden leeg gemaakt als een andere keuze wordt gemaakt in het menu.
daarna moet onderstaande $rid aangepast door een nummertje van de array telkens
als ik op de NEXT of PREV-knop drukt.
Dit en het leeg maken van de array weet ik niet te realiseren.

Code:
echo'<div class="numbertext"><center>Foto : '.$rid.' van '.$last.'</center></div>';
 
je kan gewoon $_SESSION['imgarr'] = array[]; doen
of unset().

Verder is je $_GET['id'] overigens lek. Je dient deze waarde netjes te escapen met mysqli_real_escape_string()
 
Je 1e antwoord ga ik uitproberen.
$_GET['id'] probleem is mij bekend. Ben de site aan het finetunen. Staat op de TODO lijst.
Hoop dat je mijn 2e vraag ook kan beantwoorden om de array nummers er uit te halen.
1e foto is array[0], 2e foto is array[1] en zo ophogen met de >> knop en verlagen met de << knop
Bedankt alvast, leermeester;)
 
In #1 regel 13-15 haal je datatypes door elkaar.
Het lijkt erop dat dit de $_GET wat beter uitleest en omzet naar een getal.
PHP:
$rid = 1;
if (isset($_GET['img'])) {
    if (intval($_GET['img']) > 0) $rid = intval($_GET['img']);
}
echo $rid;
 
Laatst bewerkt:
@Bron

Dit heb ik bij de vraag vergeten. Deze regels had ik aangebracht op het moment dat ik alle foto's liet zien.
dat waren er 178, nu heb ik er 416. Dus wil nu dat men kan kiezen tussen twee items. Keuze A zien of Keuze B zien.
dus $rid is dus het idnr van de db. die heb ik dan kennelijk niet meer nodig.
Heb een beetje problemen hoe dit uit te leggen, sorry
Hoop dat men het begrijp.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan