Avatar billede riefart Seniormester
17. marts 2013 - 14:13 Der er 8 kommentarer og
1 løsning

Hvordan bruges databaseværdier fundet med php i javascriptfunktion?

Jeg har en tabel 'slides' i en database, som opbevarer id og sti til billeder, der skal bruges i mit slideshow. Tabellen har endnu ingen virkning, da jeg ikke kan indlæse de fundne værdier i min slideshowfunktion (de udskrives dog fint på siden). Lige nu kører slideshowet derfor efter de stier, der er angivet som parametere i RunSlideShow(). Js-filen, som definerer slidefunktionen er angivet i head'en.
Herunder klip fra filen.

<?php
//hent alle poster i tabellen 'slides'
if($stmt=$mysqli->prepare('SELECT `id`, `navn` FROM `slides` ORDER BY id asc')) {
    $stmt->execute();
    $stmt->bind_result($id, $navn);
    while($stmt->fetch()) {
    echo $id.'. '.$navn.'<br />';
    }
    $stmt->close();
}
?>

//og kaldet til slideshowfunktionen

<div id="baggrund">
<img alt="" src="slides/img1.jpg" width="400" height="200" id="billede"></div>
<script type="text/javascript">
RunSlideShow("billede","baggrund", "slides/img1.jpg;slides/img2.jpg;slides/img3.jpg;slides/img4.jpg;slides/img5.jpg", 4);
</script>

Hvordan får jeg indlæst billedstierne fra databasesøgningen i funktionen?
Avatar billede jakobdo Ekspert
17. marts 2013 - 16:20 #1
Her udskriver du jo dine info fra DB / PHP:
echo $id.'. '.$navn.'<br />';

Det skal du jo "bare" omskrive og få den til at udskrive dette:
"slides/img1.jpg;slides/img2.jpg;slides/img3.jpg;slides/img4.jpg;slides/img5.jpg"

Det kunne måske nemt laves sådan:

<?php
//hent alle poster i tabellen 'slides'
$slides = array();
if($stmt=$mysqli->prepare('SELECT `id`, `navn` FROM `slides` ORDER BY id asc')) {
    $stmt->execute();
    $stmt->bind_result($id, $navn);
    while($stmt->fetch()) {
      $slides[] = $navn;
    }
    $stmt->close();
}
?>

og i din html/js:

<div id="baggrund">
<img alt="" src="slides/img1.jpg" width="400" height="200" id="billede"></div>
<script type="text/javascript">
RunSlideShow("billede","baggrund","<?php echo implode(";",$slides"); ?>", 4);
</script>
Avatar billede olebole Juniormester
17. marts 2013 - 17:02 #2
<ole>

Jakobs løsning er helt fin, bortset fra en mindre 'tankefisk'. PHP-arrayet skal samles (imploderes) over et komma og ikke et semikolon:

RunSlideShow("billede","baggrund","<?php echo implode(",", $slides"); ?>", 4);

Derudover ved jeg, du er i gang med at lære MySQLI, så jeg vil lige tydeliggøre en enkelt ting:

Når du har udefrakommende variabler, som skal ind i din SQL-kode, bør du bruge prepare-metoden og 'bygge en funktion' i databasen, hvis indhold ikke kan ændres via variablernes indhold.

Har du ikke udefrakommende variabler, som skal ind i din SQL-kode, kan du ligeså godt bruge den simplere query-metode.

Sidstnævnte returnerer dog ikke et statement, men et result (ligesom du var vandt til fra MySQL). Derfor kan koden omskrives til:

<?php
//hent alle poster i tabellen 'slides'
$slides = array();
if($res = $mysqli->query('SELECT `id`, `navn` FROM `slides` ORDER BY id asc')) {
    while($row = $res->fetch_assoc()) {
      $slides[] = $row['navn'];
    }
    $res->free();
}
$mysqli->close();
?>

Ak ja, nu var du lige så glad for at have læst en letlæselig guide (tak for rosen i øvrigt =), og så belæsser klovnen dig bare med nye ting at forholde sig til  *o)

Sådan er det desværre med korte og letlæselige tekster ... de er som regel kun begyndelsen  =)

/mvh
</bole>
Avatar billede olebole Juniormester
17. marts 2013 - 17:05 #3
PS: Det er ikke en fejl at bruge prepare. Man kan bare ligeså godt bruge den simplere query i dette tilfælde ... og så virker du, som om du ønsker at lære  =)
Avatar billede jakobdo Ekspert
17. marts 2013 - 17:30 #4
Se js kode i spørgers kode olebole. Derfor semikolon
Avatar billede olebole Juniormester
17. marts 2013 - 17:58 #5
@Jakob: Hvem har talt om komma ...?!??!!! Naturligvis skal det være et semikolon! Sorry!  *o)

@riefart: Se bort fra det, jeg skrev om Jakobs løsning. Efter at have genstartet mine briller trækker jeg øjeblikkelig dén kommentar i land. Det var noget vrøvl  =)
Avatar billede olebole Juniormester
17. marts 2013 - 17:59 #6
- men det andet om prepare/query kan du godt regne med  =)
Avatar billede riefart Seniormester
17. marts 2013 - 20:12 #7
Hej begge to.
Jeg har prøvet de forslag I er kommet med og Jakobdo's:
implode(";",$slides"); meldte fejl.
Derimod gav Oles enklere query bonus. Og nu virker det.
Og ja, jeg prøver at suge til mig, alt det jeg kan. Det kommer lige så langsomt.
Mange tak for hjælpen.
Smid et svar.
Avatar billede jakobdo Ekspert
17. marts 2013 - 20:22 #8
Svar!
Avatar billede olebole Juniormester
17. marts 2013 - 20:53 #9
Jeg samler ikke point, så de er Jakobs - men tak for tilbudet  =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I går 23:37 Poe strøm Af lurup i LAN/WAN
I går 14:46 GIF-EDITOR Af snestrup2000 i Billedbehandling
I går 14:03 Logge ind Af Bob i PC
I går 12:12 2 skærme - 1 virker - den anden siger No signal Af eksmojo i Skærme
I går 10:33 openvpn projekt Af dcedata1977 i Windows