actuele weekdagen

Status
Niet open voor verdere reacties.

Frenske123

Terugkerende gebruiker
Lid geworden
2 jul 2007
Berichten
1.260
Hallo

Ik wil de actuele weekdagen (maand-zondag) ophalen uit tabel , bij desbetreffende datum hoort een flyer.
dus voor deze week
2019-03-11 maandag
2019-03-12
t/m
2019-03-17 zondag

Voor maandag heb ik

PHP:
$monday = date('Y-m-d', time() - ((date('w')+6) * 86400) );
echo $monday_datum = date('d-m-Y',time() - ((date('w')+6) * 86400) );
$flyer_maandag = $mysqli->query("SELECT image FROM `$tabel`
WHERE datum = '$monday'  AND image != ''")->fetch_object()->image;

voor dinsdag
$tuesday = date('Y-m-d', time() - ((date('w')+5) * 86400) );
echo $tuesday_datum = date('d-m-Y',time() - ((date('w')+5) * 86400) );
$flyer_dinsdag = $mysqli->query("SELECT image FROM `$tabel`
WHERE datum = '$tuesday'  AND image != ''")->fetch_object()->image;
?>     <img src="<?= $flyer_dinsdag ?>" alt="flyer">
?>

enz tot en met zondag ,
Alleen krijg ik altijd verkeerde dagen en een en ander verschilt ook nog op zondag/maandag (zal start datum van week zij)
heb al div. varianten geprobeerd maar geen resultaat
 
Vermoedelijk gebruik je (string)datum en (date)datum door elkaar, die kan je niet met elkaar vergelijken in de where (denk ik). Het meest logisch is dat de kolom `datum` in de DB van het type date is. De code in php pas je hierop aan. Ik ben niet echt thuis in sql maar kom hierop terecht.
Code:
$tabel = '......';
$monday = date('Y-m-d', time() - ((date('w')+6) * 86400) );
$sql_flyer_day = "SELECT image FROM `$tabel`
WHERE (DATE_FORMAT(datum, '%Y/%m/%d') AS 'fdatum' = '$monday') AND image != ''";
// volgende regel testen in phpMyAdmin
echo $sql_flyer_day;

In MySql heeft date het formaat yyyy-mm-dd
 
Laatst bewerkt:
Als je van +6 eens -1 maakt kom je dan beter uit ?
+5 wordt dan -2 enz enz

Frank
 
Bedankt

Zit ff te klooie met de uitvoer ( tijdje eruit geweest wegens oogaandoening) de hele query wordt geprint

Dit hoort niet thuis in php myadmin?
PHP:
echo $sql_flyer_day;
 
Als je rekening wilt houden met maand overgangen dan kan je rekenen met "datum getallen".
Code:
// datum van vandaag als getal
$vandaag = '2019-03-02';  // of $vandaag = date('Y-m-d');
$intVandaag = strtotime($vandaag);

// weekdag van vandaag als getal (ma=1 t/m zo=7)
$dagnr = date('w', $intVandaag);
if ($dagnr == 0) $dagnr = 7;

// bereken afgelopen maandag als getal en geef dit als Y-m-d
$maandag = date('Y-m-d', $intVandaag - (($dagnr-1) * 86400));
echo $maandag;

* In phpMyAdmin werk je met SQL, niet met php. Je kan bijvoorbeeld een SELECT query testen met echte gegevens (niet met php variabelen).
Voorbeeld: SELECT image FROM `tbl_image` WHERE datum=`2019-03-02` AND image!=``
 
Laatst bewerkt:
Dit is de broncode op webpagina met 4 maart 2019 (maandag vorige week)

HTML:
<img src="SELECT image FROM `kalender`
WHERE (DATE_FORMAT(datum, '%Y/%m/%d') AS 'fdatum' = '2019-03-04') AND image != ''" alt="flyer maandag">
      <div class="caption">
        <h3>Maandag</h3>
        <p> <a href="programma.html?dag=maandag"  class="btn btn-default">Meer Info</a> </p>
 
Als je rekening wilt houden met maand overgangen dan kan je rekenen met "datum getallen".
Code:
// datum van vandaag als getal
$vandaag = '2019-03-02';  // of $vandaag = date('Y-m-d');
$intVandaag = strtotime($vandaag);

// weekdag van vandaag als getal (ma=1 t/m zo=7)
$dagnr = date('w', $intVandaag);
if ($dagnr == 0) $dagnr = 7;

// bereken afgelopen maandag als getal en geef dit als Y-m-d
$maandag = date('Y-m-d', $intVandaag - (($dagnr-1) * 86400));
echo $maandag;

* In phpMyAdmin werk je met SQL, niet met php. Je kan bijvoorbeeld een SELECT query testen met echte gegevens (niet met php variabelen).

Mooi maar heb ik nog steeds datum nodig voor uit tabel

Ik wil deze week de flyer van 11 maart ophalen
die van 12 maart enz
dus ik krijg 7 flyers van 7 dagen
als ik nou de juiste dag kan selecteren.......

tabel
datum | image
2019-03-11 | flyer-a
2019-03-12 | flyer-b
....
2019-03-17 | flyer-g
 
Laatst bewerkt:
Aan het zoeken of Mysqli hierin voorziet
(fout) voorbeeld
PHP:
SELECT * FROM mytable WHERE MONTH(event_date) = 5 AND DAYOFWEEK(event_date) = 7;

kan ik php wellicht maand en jaar laten selecteren en Mysql1 de dag

verbeterd
PHP:
$flyer_maandag = $mysqli->query("SELECT * FROM `$tabel` WHERE MONTH(datum) = 3 AND DAYOFWEEK(datum) = 6 AND image != ''")->fetch_object()->image;
// 1 for Sunday,2 for Monday …… 7 for Saturday
 
Laatst bewerkt:
Mooi maar heb ik nog steeds datum nodig voor uit tabel
De oplossing die ik gaf is voor de datum berekening die in #1 niet klopt.

Ik wil deze week de flyer van 11 maart ophalen
die van 12 maart enz
dus ik krijg 7 flyers van 7 dagen
De php in #5 berekent de 'maandag' voorafgaand aan een bepaalde datum.
Als je 2019-03-01 (vrijdag) opgeeft, krijg je als antwoord 2019-02-25 (maandag).

Als je wilt weten hoe je gegevens uit een MySql database haalt kan je het beste eerst dit doornemen.
In de while loop kan je dit zetten
Code:
<img src="<?php echo $row["image"]; ?>" alt="flyer">

Als je de maandag weet (zie #5) en op een gelijkende wijze zelf de zondag bepaalt dan
zou de sql query er zo uit kunnen zien.

SELECT datum, image FROM `kalender`
WHERE image != '' AND datum BETWEEN str_to_date('2019-02-25', '%Y-%m-%d') AND '2019-03-02';
 
De oplossing die ik gaf is voor de datum berekening die in #1 niet klopt.


De php in #5 berekent de 'maandag' voorafgaand aan een bepaalde datum.
Als je 2019-03-01 (vrijdag) opgeeft, krijg je als antwoord 2019-02-25 (maandag).

Als je wilt weten hoe je gegevens uit een MySql database haalt kan je het beste eerst dit doornemen.
In de while loop kan je dit zetten
Code:
<img src="<?php echo $row["image"]; ?>" alt="flyer">

Als je de maandag weet (zie #5) en op een gelijkende wijze zelf de zondag bepaalt dan
zou de sql query er zo uit kunnen zien.

SELECT datum, image FROM `kalender`
WHERE image != '' AND datum BETWEEN str_to_date('2019-02-25', '%Y-%m-%d') AND '2019-03-02';


ff op mijn gemak doornemen
Je laatste regel bevat datum , tenzij als voorbeeld die kan ik er neit inzetten


ik heb dit voor moment lijkt het te werken.
PHP:
 $huidige_maand = date('m'); 
$huidige_jaar = date('Y');
$flyer_woensdag = $mysqli->query("SELECT * FROM `$tabel` WHERE  YEAR(datum) = $huidige_jaar AND  
MONTH(datum) = $huidige_maand AND DAYOFWEEK(datum) = 4 AND image != ''")->fetch_object()->image;
// 1 for Sunday,2 for Monday …… 7 for Saturday     Hier woensdag (4)



zou er nog een week moeten bijkomen :shocked:
 
Laatst bewerkt:
Alle datums / images in 1 keer uitlezen en in de html zetten kan ook.
Code:
<?php
function datum2getal ($datum='') {
   if ($datum == '') return strtotime(date('Y-m-d'));
   else return strtotime($datum);
}
function getal2datum ($datumgetal=null) {
   if (!is_null($datumgetal)) return date('Y-m-d', $datumgetal);
   else return date('Y-m-d', strtotime(date('Y-m-d')));
}
function dagNaam ($datum='') {
   $dagen = ['Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag'];
   if ($datum == '') $dagnr = date('w');
   else $dagnr = date('w', datum2getal($datum));
   return $dagen[$dagnr];
}

$intDagNr   = date('w');
$intVandaag = datum2getal();
$intMaandag = $intVandaag - (($intDagNr-1) * 86400);
$intZondag  = $intMaandag + (6 * 86400);
$maandag    = getal2datum($intMaandag);
$zondag     = getal2datum($intZondag);

// gebruik het voorbeeld op www.w3schools.com/php/php_mysql_select.asp
// met deze $sql

$sql = "SELECT datum, image FROM kalender
WHERE image != '' AND datum BETWEEN str_to_date('" . $maandag . "', '%Y-%m-%d') AND '" . $zondag . "'";

while ($row = $result->fetch_assoc()) {
   echo '<img src="' . $row["image"] . '" alt="Flyer ' . strtolower(dagNaam($row["datum"])) . '">';
   echo '<div class="caption">';
   echo '<h3>' . dagNaam($row["datum"]) . '</h3>';
   echo '<p> <a href="programma.html?dag=' . strtolower(dagNaam($row["datum"])) . '" class="btn btn-default">Meer Info</a> </p>';
   echo '</div>';
}
?>
 
Kan het zijn dat hier een fout in zit

PHP:
   $dagen = ['Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag'];

krijg geen uitvoer




Maandag tot donderdag heeft
class <div class="col-md-3
vrijdag tot zondag
<div class="col-md-4

omdat een week 7 dagen heeft 4 en 3 naast elkaar , maar mischien kan ik dat oplossen op andere manier.
 
Test kleine stukjes code in een klein bestand dan zie je dat het werkt :D Probeer de bijlage maar eens.

aanvulling
col-md-1 t/m col-md-12 hebben te maken met de css van Bootstrap, niet met php en ook niet met sql.
Een class in de html heeft geen invloed op de gebruikte php of sql (daardoor ook niet op de dagnamen in de php array)
 

Bijlagen

  • php-testbestand.zip
    851 bytes · Weergaven: 28
Laatst bewerkt:
Beste Bron.

Bedankt voor hulp

Jou bestandje werkt!

Ik heb nou onderstaande
Jij zet het in een keer in een lus /loop?

wat ik met die class bedoelde (klopt is bootstrap) dat als ik de gehele DIV
HTML:
 <div class="col-md-3 col-sm-6 hero-feature">
in een lus zet ik met 2 verschillende classes zit
<div class="col-md-3 en <div class="col-md-4


PHP:
<?php

function datum2getal ($datum='') {
	if ($datum == '') return strtotime(date('Y-m-d'));
	else return strtotime($datum);
}
function getal2datum ($datumgetal=null) {
	if (!is_null($datumgetal)) return date('Y-m-d', $datumgetal);
	else return date('Y-m-d', strtotime(date('Y-m-d')));
}
function dagNaam ($datum='') {
	$dagen = ['Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag'];
	if ($datum == '') $dagnr = date('w');
	else $dagnr = date('w', datum2getal($datum));
	return $dagen[$dagnr];
}

$intDagNr   = date('w');
$intVandaag = datum2getal();
$intMaandag = $intVandaag - (($intDagNr-1) * 86400);
$intDinsdag = $intVandaag - (($intDagNr-2) * 86400);
$intZaterdag = $intVandaag - (($intDagNr-6) * 86400);
$intZondag  = $intMaandag + (6 * 86400);
$maandag    = getal2datum($intMaandag);
$dinsdag    = getal2datum($intDinsdag);
$zaterdag   = getal2datum($intZaterdag);
$zondag     = getal2datum($intZondag);

?>
<?php
// Flyer voor Maandag
$maandag = $mysqli->query("SELECT image  FROM `$tabel`  WHERE datum = '$maandag' AND  image != ''")->fetch_object()->image;  
?>

  <div class="col-md-3 col-sm-6 hero-feature">
    <div class="thumbnail" > 
<img src="<?= $maandag;
?>" alt="flyer maandag">
      <div class="caption">
        <h3>Maandag</h3>
        <p><a href="programma.html?dag=maandag"  class="btn btn-default">Meer Info</a> </p>
      </div>
    </div>
  </div>
  
<?php  
// Flyer voor Dinsdag
$dinsdag = $mysqli->query("SELECT image  FROM `$tabel`  WHERE datum = '$dinsdag' AND  image != ''")->fetch_object()->image;  
?>
  <div class="col-md-3 col-sm-6 hero-feature">
    <div class="thumbnail" > 
<img src="<?= $dinsdag;
?>" alt="flyer dinsdag">
      <div class="caption">
        <h3>Dinsdag</h3>

        <p><a href="programma.html?dag=dinsdag"  class="btn btn-default">Meer Info</a> </p>
      </div>
    </div>
  </div>

enz. voor woensdag tot zondag
 
Niet getest (anders moet ik ook een DB tabel maken en vullen) maar het concept klopt wel.
 

Bijlagen

  • index-datum-2.zip
    1,2 KB · Weergaven: 28
ik krijg melding

Notice: Trying to get property of non-object in l/public_html/test/7-dagen-flyers-test-2.php on line 57


57
PHP:
if ($result->num_rows > 0) {
......
 
Laatst bewerkt:
ff een testdb aangemaakt met tabel kalender en kolommen datum (DATE) en image (TEXT).
7 datums er ingezet en bij 4 daarvan een flyer ingevuld. Bij mij werkt de code direct.

Toch weer je code nakijken ?

Is je datumveld in de database van type DATE ?
 
Laatst bewerkt:
Vreemd heb code exact overgenomen

datum en image kloppen alsook tabel naam

expres database gegevens fout ingevuld en dan komt ook andere melding , dus dat is ok/
 
Laatst bewerkt:
In phpMyAdmin heb ik eerst een lege database gemaakt met naam `flyerkal`
Daarna de tabel `kalender` gemaakt:
Code:
CREATE TABLE `kalender` (
  `datum` date NOT NULL DEFAULT '0000-00-00',
  `image` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Daarna naar tabel `kalender` gegaan en deze test rijen ingevoerd:
Code:
INSERT INTO `kalender` (`datum`, `image`) VALUES
('2019-03-11', 'flyer-a'),
('2019-03-12', ''),
('2019-03-13', 'flyer-c'),
('2019-03-14', ''),
('2019-03-15', ''),
('2019-03-16', 'flyer-f'),
('2019-03-17', 'flyer-g'),
('2019-03-18', 'flyer-h'),
('2019-03-19', ''),
('2019-03-20', 'flyer-j'),
('2019-03-21', 'flyer-k'),
('2019-03-22', ''),
('2019-03-23', 'flyer-m'),
('2019-03-24', '');

Zo gaat het eruit zien

datum_thumbs.jpg
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan