Avatar billede morten_21 Nybegynder
01. februar 2011 - 22:52 Der er 3 kommentarer og
1 løsning

Brug af jQuery datepicker med datoer fra mySQL database

Halløj,

Jeg prøver at strikke en rådighedskalender sammen vha. jQuerys datepicker. Idéen er, at jeg først henter en række datoer fra en MySQL database, og derefter disabler disse dage.

Min datepicker virker som den skal, og i den kode jeg har fundet, er en speciel funktion, hvor de enkelte datoer findes:

var disabledDays = ["2-21-2011", "2-24-2011"];

Men jeg vil jo gerne hente dette array fra min database. Jeg er PHP novice, men ved hvordan jeg skal hente datoer fra databasen med PHP. Jeg forstår desværre ikke hvordan jeg skal putte de datoer ind i disabledDays.

Hvis nogen har tips, er jeg evigt taknemlig!

Nuværende kode:

<!DOCTYPE html>
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css"/>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
    <script src="scripts/ui.datepicker-da.js"></script>
<script>
$(document).ready(function() {

$.datepicker.setDefaults(
$.extend($.datepicker.regional['da']));

// get the current date
var date = new Date();
var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();

// Disable all dates till today
$('#datepicker5').datepicker({
minDate: new Date(y, m, d),
dateFormat: 'mm-dd-yy',
});

// Disable a list of dates
var disabledDays = ["2-21-2011", "2-24-2011"];
function disableAllTheseDays(date) {
var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
for (i = 0; i < disabledDays.length; i++) {
if($.inArray((m+1) + '-' + d + '-' + y,disabledDays) != -1) {
                return [false];
            }
        }
        return [true];
    }
    $('#datepicker5').datepicker({
            dateFormat: 'mm-dd-yy',
            beforeShowDay: disableAllTheseDays
    });

    });
    </script>

(herefter kommer html'en, som er lidt irrelevant)
Avatar billede HBP2 Praktikant
01. februar 2011 - 23:18 #1
Det ville have gjort det nemmere hvis du havde inkluderet det PHP kode hvor du læser datoerne. Men hvis vi antager at alle datoerne er i det korrekte format (dit gyselige (undskyld) D-MM-YYYY format) i et PHP array ved navn $brugtedatoer som måske er lavet sådan her:

$brugtedatoer = array()
// læs datoer fra MySQL og konverter formatet og put det
// ind i $brugtedatoer:
while ($row = mysql_fetch_assoc(...)) {
  $naeste_brugte_dato = $row['dato'];
  $brugtedatoer[] = '"'.$naeste_brugte_dato."'";
}
// lav en liste med alle datoerne
$brugtedatoer = implode(",", $brugtedatoer);

Jeg går ud fra at hele HTML+javascript delen er i et PHP script, så skal du blot fylde $brugtedatoer ind i javascripten.

Erstat:

var disabledDays = ["2-21-2011", "2-24-2011"];

med:

var disabledDays = [<?php echo $brugtedatoer; ?>];
Avatar billede morten_21 Nybegynder
02. februar 2011 - 10:52 #2
Hej og tak for bidraget. Du har ret i at datoformatet er grimt, men det var standard og har bekymret mig mere om de andre problemer jeg har haft.

Jeg kendte ikke til mysql_fetch_assoc, tak for den. PHP delen returnerer tilsyneladende ikke noget, selv om der er data i tabellen. Den melder heller ikke SQL fejl - kan du se hvad fejlen er?

<?php

$brugtedatoer = array();
// læs datoer fra MySQL og konverter formatet og put det
// ind i $brugtedatoer:

include("db_connection.php");

$result = mysql_query("SELECT date FROM dates");
if (!$result) { // add this check.
    die('Invalid query: ' . mysql_error());
   
while ($row = mysql_fetch_assoc($result)) {
  $naeste_brugte_dato = $row['date'];
  $brugtedatoer[] = '"'.$naeste_brugte_dato."'";
 
}
// lav en liste med alle datoerne
$brugtedatoer = implode(",", $brugtedatoer);

}
?>

db_connection.php ser sådan ud:
<?
mysql_connect("localhost", "root", "");
mysql_select_db("bookingtest");
?>

(lokal mysql server, så den åbne root konto er ikke så slem :)
Avatar billede HBP2 Praktikant
02. februar 2011 - 11:09 #3
Det er jo ligegyldig om du bruger mysql_fetch_assoc() eller noget andet; brug det du er vant til.

Det ser ud som om du har en { for enden af linien
if (!$result)
så hele læsningen sker kun hvis der er en fejl.
Avatar billede morten_21 Nybegynder
02. februar 2011 - 22:34 #4
Du har ret, det var en fejlplaceret {.

Tak for hjælpen.
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