Van php array naar javascript array

Status
Niet open voor verdere reacties.

Radio247

Gebruiker
Lid geworden
8 dec 2011
Berichten
31
Ik heb 2 werkende onderdelen waarvan de array gegevens van php naar java omgezet dienen te worden door middel van json_encode.
Helaas lijkt er iets niet goed te gaan.... afzonderlijk werken zij maar de combinatie niet.
Wie kan mij op weg helpen in dit probleem?

Hieronder het script.
Code:
<?php
include 'connect.php';

$sql = "SELECT * FROM cpl_cdreleases WHERE active='Y' ORDER BY cdid DESC LIMIT 5";
$result = mysqli_query($conn, $sql);

while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
    printf ("%s (%s) (%s)\n<br>", $row["cdid"], $row["cdnaam"], $row["cdhoes"]);
}
?>

Code:
<!-- Converting PHP array into JavaScript array -->
<script type="text/javascript">
    var galleryarray=<?php echo json_encode($row);?>;
    document.write(galleryarray[0]);

//    var galleryarray=new Array();
//    galleryarray[0]='anita en ed-Chiri Biri Bim.jpg'
//    galleryarray[1]='brigitte nijman-altijd laat.jpg'
//    galleryarray[2]='die spatzl-tijd voor gezelligheid.jpg'
//    galleryarray[3]='Ferry goorden-als ik haar zo zie dansen.jpg'
//    galleryarray[4]='jordi falcon-laat me alleen.jpg'

// -- rotatie script -- //
    var curimg=0
    function rotateimages()
    {
        document.getElementById("slideshow").setAttribute("src", "cplog/cds/cds/"+galleryarray[curimg])
        curimg=(curimg<galleryarray.length-1)? curimg+1 : 0
    }

    window.onload=function() {
        setInterval("rotateimages()", 3000)
    }
</script>

<div style="width: 170px; height: 160px">
    <img id="slideshow" src="img/balletje.png" />
</div>

mod. code in een
Code:
[/noparse] tag gezet[/COLOR]
 
Laatst bewerkt door een moderator:
Eerst even fout rechtzetten: Java is geen Javascript.
Het zijn twee totaal verschillende programmeertalen. :)

Om op je probleem terug te komen:
$row bestaat niet. Die bestaat enkel in de loop.

Oplossing: Geen loop gebruiken om je mysqli_fetch_array(), dan is $row overal beschikbaar.
 
Beste. Even kort dus file even samengevoegd ...

zie er is enkele lijnen bij gekomen zie *myArray

PHP:
<?php
include 'connect.php';
$sql = "SELECT * FROM cpl_cdreleases WHERE active='Y' ORDER BY cdid DESC LIMIT 5";
$result = mysqli_query($conn, $sql);
$myArray = [];//*
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
    //printf ("%s (%s) (%s)\n<br>", $row["cdid"], $row["cdnaam"], $row["cdhoes"]);
    $myArray[] = $row;//*
}
?>
<!-- Converting PHP array into JavaScript array -->
<script type="text/javascript">
    var galleryarray=<?php echo json_encode($myArray);?>;//*
    document.write(galleryarray[0]);
//    var galleryarray=new Array();
//    galleryarray[0]='anita en ed-Chiri Biri Bim.jpg'
//    galleryarray[1]='brigitte nijman-altijd laat.jpg'
//    galleryarray[2]='die spatzl-tijd voor gezelligheid.jpg'
//    galleryarray[3]='Ferry goorden-als ik haar zo zie dansen.jpg'
//    galleryarray[4]='jordi falcon-laat me alleen.jpg'
// -- rotatie script -- //
    var curimg=0[COLOR="#FF0000"];// end die puntkoma dan voor elke lijn die afsluit[/COLOR]
    function rotateimages() {
        document.getElementById("slideshow").setAttribute("src", "cplog/cds/cds/"+galleryarray[curimg])
        curimg=(curimg<galleryarray.length-1)? curimg+1 : 0
    }
    window.onload=function() {
        setInterval("rotateimages()", 3000)
    }
</script>


extra code om een slideshow te maken TER INFO
Code:
<SCRIPT language=JavaScript>
        aantalfotos = 5; //aantal images
        fotos = new Array(aantalfotos);//array van de figuren
        intervaltijd = 2;  //intervaltijd
        fadetijd = 5 //fadetijd
         fotos[0] = "/layout/home/home1.gif"
         fotos[1] = "/layout/home/home2.gif"
         fotos[2] = "/layout/home/home3.gif"
         fotos[3] = "/layout/home/home4.gif"
         fotos[4] = "/layout/home/home5.gif"
</SCRIPT>
<SCRIPT language=JavaScript >
        function fotoOK() {//foto ok?
            if (document.images)    return true;
            else return false;
        }
        function laadfoto(fotoURL) {
            if (BrowserOK) {
                if (document.all){
                    document.images.fotoshow.style.filter="blendTrans(duration=2)";
                    document.images.fotoshow.style.filter="blendTrans(duration=fadetijd)";
                    document.images.fotoshow.filters.blendTrans.Apply();
                }
                document.fotoshow.src = fotoURL;
                if (document.all){
                    document.images.fotoshow.filters.blendTrans.Play();
                }
                return false;
            }
            else {
                return true;
            }}
        function volgendefoto() {
            gekozenfoto = (gekozenfoto + 1) % aantalfotos;
            laadfoto(fotos[gekozenfoto]);
        }
        BrowserOK = fotoOK();
        gekozenfoto = 0;
        setInterval("volgendefoto()",intervaltijd * 1000);
</SCRIPT>
<NOSCRIPT><IMG src="/layout/home/home1.gif" name=fotoshow>
Een deel van de site is niet zichtbaar(autofotoshow)</NOSCRIPT>


mod. beoordeling van andere helpers verwijderd
 
Laatst bewerkt door een moderator:
kleine stap voorwaarts

Inmiddels heb ik het script aangepast en lijkt er wat vooruitgang te komen, helaas geeft de uitlezing van de javascript array alleen de laatste waarde weer als geheel en dan nog dezelfde als afzonderlijke tekens.

Kan dit komen door de manier van opbouwen van de php array of door het omzetten naar de javascript array ?

PHP:
<?php
include 'connect.php';

$sql = "SELECT * FROM cpl_cdreleases WHERE active='Y' ORDER BY cdid DESC LIMIT 5";
$result = mysqli_query($conn, $sql);
$aantal = mysqli_num_rows($result);
echo "aantal regels = ", $aantal. '<br />';

while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {

//		printf ("-%s- (%s) (%s)\n<br>", $row["cdid"], $row["cdnaam"], $row["cdhoes"]);
 
$gallery = array ($row["cdhoes"],);
foreach ($gallery as $sGallery) {
	echo $sGallery.'<br />';
 	}
}
?>

<!-- Converting PHP array into JavaScript array -->
<script type="text/javascript">
	var galleryarray=<?php echo json_encode($sGallery);?>;
	document.write(galleryarray[0]); //kan later uitgeschakeld worden
 
Je overschrijft steeds $sGallery in elke iteratie van je while(), dus krijg je enkel de laatste waarde. ;)

PHP:
<?php
/*code */ 
$item = []; // defineer array
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
   $item[] = $row;
}

// Ophalen van SJON-string
echo json_encode($item);
?>
 
var galleryarray=<?php
Dit geeft een foutmelding omdat je in JS dit niet mag doen: =<?

Concept waarmee je misschien verder kan?
Code:
<?php
// Maak met fetch_array een array met daarin alle rows, dan krijg je bijvoorbeeld
$gallery = [
    [ 1, 'A naam', 'A hoes' ],
    [ 2, 'B naam', 'B hoes' ],
    [ 3, 'C naam', 'C hoes' ],
    [ 4, 'D naam', 'D hoes' ],
    [ 5, 'E naam', 'E hoes' ]
];
// Json Encode de array
$json = json_encode($gallery);
?>

Code:
<?php
// Maak van een PHP variabele een JS variabele
echo '<script type="text/javascript">' . PHP_EOL;
echo 'var strJson = \'' . $json . '\';' . PHP_EOL;
echo '</script>' . PHP_EOL;
?>

Code:
<script type="text/javascript">
// Json Decode
try {
    var galleryarray = JSON.parse(strJson);
} catch (error) {
    console.error(error);
}
// Zet de javascript array op het scherm
for (var i = 0; i < galleryarray.length; i++) {
    document.write(galleryarray[i][0] + ' ** '); // id
    document.write(galleryarray[i][1] + ' ** '); // naam
    document.write(galleryarray[i][2] + '<br>'); // hoes
}
</script>

Is er een bepaalde reden dat je dit via een json omweg wilt doen?
 
Laatst bewerkt:
Dank aan allen

Het was behoorlijk veel zoeken en proberen voor een goed willend amateur zoals ik, maar het is gelukt dankzij jullie allen die mee gedacht hebben.
Onderstaand dan ook het werkende script zoals het op de site geplaatst gaat worden.

Code:
<?php
include 'connect.php';

$sql = "SELECT * FROM cpl_cdreleases WHERE active='Y' ORDER BY cdid DESC LIMIT 5";
$result = mysqli_query($conn, $sql);
$aantal = mysqli_num_rows($result);

while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
   $item[] = $row["cdhoes"];
}
?>

<!-- Converting PHP array into JavaScript array -->
<script type="text/javascript">
	var galleryarray=<?php echo json_encode($item);?>;

// -- rotatie script -- //
	var curimg=0
	function rotateimages()
	{
		document.getElementById("slideshow").setAttribute("src", "cplog/cds/cds/"+galleryarray[curimg])
		curimg=(curimg<galleryarray.length-1)? curimg+1 : 0
	}

	window.onload=function() {
		setInterval("rotateimages()", 3000)
	}
</script>

<div style="width: 170px; height: 160px">
	<img id="slideshow" src="img/balletje.png" />
</div>
 
Prima, ik raad wel aan om foutafhandeling aan je query toe te voegen.
 
De var galleryarray regel in je code geeft een foutmelding.
Code:
<script type="text/javascript">
    var galleryarray=<?php echo json_encode($item);?>;
Uncaught SyntaxError: Unexpected token '<'

Is logisch want JS ziet een waarde die met een < begint en dat mag niet.

Je zou dit kunnen oplossen door met php 'echo' een stukje Javascript in de code te zetten.
Code:
<?php
// ......
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
   $item[] = $row["cdhoes"];
}
// convert PHP array into JavaScript array
echo '<script type="text/javascript">' . PHP_EOL;
echo 'var galleryarray = \'' . json_encode($item) . '\';' . PHP_EOL;
echo '</script>' . PHP_EOL;
?>

<script type="text/javascript">
// -- rotatie script -- //
var curimg=0
// ......
</script>
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan