Avatar billede Fiber Bjørn Juniormester
21. november 2014 - 10:24 Der er 12 kommentarer og
1 løsning

Dato - Vis indlæg fra denne uge

Jeg har lidt problemer med at få vist de indlæg som er lavet i denne uge

$query = mysql_query("select * from kalender where dato >= 2014-11-17 and dato <= 2014-11-23 order by dato");
while($getter = mysql_fetch_array($query))
{ echo $getter["dato"];}

hvad går lige galt???
Avatar billede olsensweb.dk Ekspert
21. november 2014 - 10:48 #1
prøv denne sql istedet, dvs med plinger omkring datoen

select * from kalender where dato >= '2014-11-17' and dato <= '2014-11-23' order by dato


hvorfor bruger du mysql_fetch_array, istedet for mysql_fetch_assoc ?
du får dobbelt å mange data ud som du har brug for

hvorfor anvender du stadig det gamle mysql API ??
Avatar billede Fiber Bjørn Juniormester
21. november 2014 - 10:57 #2
i forhold til forslag fandt jeg selv lige ud af det :)
Med samme resultat som dig. Man kan da godt nok stirrer sig blind.

Hvorfor at jeg bruger mysql_fetch_array istedet for mysql_fetch_assoc ?
Der må jeg være svar skyldig. Hvad er fordelen med mysql_fetch_assoc???


Og til hvorfor at jeg bruger det gamle mysql API?
Det ved jeg heller ik. Jeg ved ikke bedre.

Men er da lydhør overfor nye tiltag.
Avatar billede michael_stim Ekspert
21. november 2014 - 11:09 #3
Hvis det er noget du skal bruge dynamisk, kan du bruge:

SELECT * FROM kalender WHERE week(dato - INTERVAL 1 DAY) = week(NOW() - INTERVAL 1 DAY) ORDER BY dato
Avatar billede Fiber Bjørn Juniormester
21. november 2014 - 11:25 #4
Jeg skal vise det sådan.

Uge 47
Mandag 17-11-2014  bla bla bla
Tirsdag 18-11-2014  bla bla bla
Onsdag 19-11-2014  bla bla bla
Torsdag 20-11-2014  bla bla bla
Fredag 21-11-2014  bla bla bla
Lørdag 22-11-2014  bla bla bla
Søndag 23-11-2014  bla bla bla

Uge 46
Mandag 10-11-2014  bla bla bla
Tirsdag 11-11-2014  bla bla bla
Onsdag 12-11-2014  bla bla bla
Torsdag 13-11-2014  bla bla bla
Fredag 14-11-2014  bla bla bla
Lørdag 15-11-2014  bla bla bla
Søndag 16-11-2014  bla bla bla


OVS indtil den sidste dato der er registreret.
Avatar billede olsensweb.dk Ekspert
21. november 2014 - 11:41 #5
#2
>Der må jeg være svar skyldig. Hvad er fordelen med mysql_fetch_assoc???

prøv dette eks og se output

<?php
// test data
/*
CREATE TABLE IF NOT EXISTS `kalender` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dato` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci AUTO_INCREMENT=3 ;

--
-- Data dump for tabellen `kalender`
--

INSERT INTO `kalender` (`id`, `dato`) VALUES
(1, '2014-11-17'),
(2, '2014-11-18');
*/

// av det gør ondt at anvende det gamle API
mysql_connect ("localhost", "root", "", true);
mysql_select_db("test") or die('Could not select database ');

$sql = "select * from kalender where dato >= '2014-11-17' and dato <= '2014-11-23' order by dato";

echo "med mysql_fetch_array, her er det både assoc og array <br>";
$query = mysql_query($sql);
echo '<pre>';
while($getter = mysql_fetch_array($query))
{print_r($getter);}
echo '</pre>';

echo "med mysql_fetch_assoc <br>";
$query = mysql_query($sql);
echo '<pre>';
while($getter = mysql_fetch_assoc($query))
{print_r($getter);}
echo '</pre>';
?>



>Det ved jeg heller ik. Jeg ved ikke bedre.
det api du anvender er forlængst forældet, og udgår af PHP i kommende vertioner
ref http://php.net/mysql_connect
[citat]
Warning

This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:

    mysqli_connect()
    PDO::__construct()
[/citat]

det nemmeste at gå over til er mysqli, og så skrive det i procedural style, så er der kun minimale ændringer

$query = mysqli_query($conn, $sql);
while($getter = mysqli_fetch_assoc($query))

læg mærke til der bare er kommet et i på mysql_, og query nu skal have en connection, som første parameter.


som oop style

$query = $conn->query($sql);
while($getter = $query->fetch_assoc())

i mysqli kan du blande procedural og oop style, hvis man vil
Avatar billede Fiber Bjørn Juniormester
21. november 2014 - 11:59 #6
hvilken version starter mysqli i af PHP versioner?
Jeg kører med PHP 5.3 på en gammel installation og synes ikke at det virker på denne installation???
Avatar billede olsensweb.dk Ekspert
21. november 2014 - 12:41 #7
>hvilken version starter mysqli i af PHP versioner?
ref http://php.net/manual/en/mysqlinfo.api.choosing.php
                      ext/mysqli     PDO_MySQL     ext/mysql
PHP version introduced     5.0     5.1     2.0
Lifecycle                 Active     Active     Deprecated


her er lidt du kan kigge på, det er ikke hele løsningen, men bare noget inspiration
     
<?php
// test data
/*
CREATE TABLE IF NOT EXISTS `kalender` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dato` date NOT NULL,
  `text` text COLLATE utf8_danish_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci AUTO_INCREMENT=3 ;

--
-- Data dump for tabellen `kalender`
--

INSERT INTO `kalender` (`id`, `dato`, `text`) VALUES
(1, '2014-11-17', 'sjfslfjslk'),
(2, '2014-11-18', 'fnseowwau slsjfweiou sdfjwiodurw');
*/
$conn = mysqli_connect("localhost", "root", "", "test");
if (!$conn) {
    echo 'Der opstod en fejl.';
    exit();
}
mysqli_set_charset($conn, "utf8");


// http://dev.mysql.com/doc/refman/5.0/en/locale-support.html

// sætter navne til dansk
$sql = "SET lc_time_names = 'da_DK'";
$query = $conn->query($sql);
   
$sql = "select *, DAYNAME(dato) AS dayname, DATE_FORMAT(dato, '%d-%m-%Y') dansk_dato from kalender where dato >= '2014-11-17' and dato <= '2014-11-23' order by dato";
$query = $conn->query($sql);

$str="<table>";
while($row = $query->fetch_assoc()){
  $str .= "<tr>";
    $str .= "<td>". $row['dayname'] ."</td>";   
    $str .= "<td>". $row['dansk_dato'] ."</td>";
    $str .= "<td>". $row['text'] ."</td>";   
  $str .= "</tr>";   
    // $str .= $row['dayname']." ". $row['dansk_dato']. " ". $row['text']."<br>";   
}
$str .="</table>";
echo $str;
?>


vil du lave et kald der laver hele kalenderen, dvs den også skal lave uge nummer, og hvor langt ud i fremtiden skal den læse, eller laver du et kald pr uge og selv skriver overskrift.
Avatar billede jakobdo Ekspert
21. november 2014 - 12:57 #8
Hvis dit ønske er som beskrevet i: #4

Ville jeg nok hellere lege med denne:

select *, YEAR(dato), WEEK(dato) from kalender order by YEAR(dato), WEEK(dato)
Avatar billede olsensweb.dk Ekspert
21. november 2014 - 13:07 #9
eller lege lidt med denne

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week

select *, DAYNAME(dato) AS dayname, DATE_FORMAT(dato, '%d-%m-%Y') dansk_dato from kalender where WEEK(dato,3) = 47 order by dato


47 er denne uge

WEEK(dato,3)
3    Monday    1-53    with 4 or more days this year
Avatar billede olsensweb.dk Ekspert
21. november 2014 - 15:08 #10
løsningen er en combi af de 2 sql's

$conn = mysqli_connect("localhost", "root", "", "test");
if (!$conn) {
    echo 'Der opstod en fejl.';
    exit();
}
mysqli_set_charset($conn, "utf8");
   
// sætter navne til dansk
$sql = "SET lc_time_names = 'da_DK'";
$query = $conn->query($sql);   
   
   
$sql = "select *, DAYNAME(dato) AS dayname, DATE_FORMAT(dato, '%d-%m-%Y') dansk_dato, YEAR(dato) AS year, WEEK(dato,3) AS week from kalender order by YEAR(dato), WEEK(dato,3)";
$query = $conn->query($sql);
$str="<table>";
$week=0;
while($row = $query->fetch_assoc()){
  if ($week != $row['week']){
  $week=$row['week'];
      $str .= "<tr>";
  $str .= '<td  colspan="3">'. $row['week'] ."</td>";
  $str .= "</tr>";
  }
 
    $str .= "<tr>"; 
    $str .= "<td>". $row['dayname'] ."</td>";   
    $str .= "<td>". $row['dansk_dato'] ."</td>";
    $str .= "<td>". $row['text'] ."</td>";   
  $str .= "</tr>";   
    // $str .= $row['dayname']." ". $row['dansk_dato']. " ". $row['text']."<br>";   
}
$str .="</table>";
echo $str;
Avatar billede olsensweb.dk Ekspert
21. november 2014 - 16:11 #11
som michael er inde på kunne man lave det dynamisk, hvilke kunne være en fordel, afh af din brug af udtrækket

bare størrer end i dag

select *, DAYNAME(dato) AS dayname, DATE_FORMAT(dato, '%d-%m-%Y') dansk_dato, YEAR(dato) AS year, WEEK(dato,3) AS week from kalender WHERE dato > NOW() order by YEAR(dato), WEEK(dato,3)


størrer end i dag og mindre en idag + 6 måneder

select *, DAYNAME(dato) AS dayname, DATE_FORMAT(dato, '%d-%m-%Y') dansk_dato, YEAR(dato) AS year, WEEK(dato,3) AS week from kalender WHERE dato >= NOW() AND dato <= ( ADDDATE( NOW(), INTERVAL 6 MONTH) ) order by YEAR(dato), WEEK(dato,3)
Avatar billede Fiber Bjørn Juniormester
24. februar 2015 - 12:25 #12
Det er endt op med denne kode, som virker. Godt nok er det i ved den gamle måde at connect på. Også må jeg lige få det gamle lavet om.

Jeg har oprettet et nyt spørgsmål her for at give point igen :).
http://www.eksperten.dk/spm/1001981



$query = mysql_query("select *, DAYNAME(d) AS dayname, DATE_FORMAT(d, '%d.%m %Y') AS nydato, YEAR(d) AS year, WEEK(d,3) AS week from kalender WHERE d >=  '".$denne_mandag_Y_m_d."' - INTERVAL 4 WEEK order by year DESC, week DESC, d , e ");
        while($getter = mysql_fetch_array($query))


ronols#  Vil du give et svar da du har været mest aktiv. Hvis andre også gerne vil have point så meld ind :)
Avatar billede olsensweb.dk Ekspert
24. februar 2015 - 14:15 #13
får du her
de 2 andre havde også nogle interessante input, som jeg samlede op på, og lod mig inspirerer af
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

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