PHP $_SESSION kleur pagina bewaren na sluiten sessie

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • MathijsB88
  • Registratie: Augustus 2020
  • Laatst online: 16-08 23:39
Hi,

Is er iemand die mij kan helpen met onderstaande php script? Ik heb een script gemaakt waarin met 'color picker' een kleur gekozen kan worden in het admin gedeelte van de website. Aan de voorzijde van de website verandert dan de kleur zoals ingesteld. Maar na het afsluiten van de browser en opnieuw opstarten is de kleur weer verdwenen. Ik vermoed dat het een fout is in de $_SESSION, maar kom er niet mee verder waar het dan misgaat.

Iemand die me verder kan helpen waar het fout gaat in mijn script?

1e deel van het script: color_footer.php
2e deel is selectie van stylesheet: public.php (voorheen .css file)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
session_start();

if(isset($_POST['color-picker'])) {
  $_SESSION['footer-color'] = $_POST['color-picker'];
}

$bg_color = isset($_SESSION['footer-color']) ? $_SESSION['footer-color'] : '#c8ced2';
?>

<?php require_once('../../private/initialize.php'); ?>

<?php
require_once('../../private/initialize.php');
$result = mysqli_query($db, "INSERT INTO `visits` (`id`, `time`, `subject`) VALUES (NULL, NOW(), 'Change color')"); 
?>
    
<?php require_login(); ?>

<?php $page_title = 'Staff Menu'; ?>
<?php include(SHARED_PATH . '/staff_header.php'); ?>

<div id="content">

    <h1>Color page</h1>
    <h2>Change color of footer of frontpage</h2>

  <div class="subjects listing">
  
<form method="post">
   <label for="color-picker">Select a front page footer color:</label>
   <input type="color" id="color-picker" name="color-picker" value="<?php echo $footer_color; ?>">
   <input type="submit" value="Confirm footer color">
</form>

<br>
      <li><a href="<?php echo url_for('/staff/change_color.php'); ?>">Back to color page</a></li>

    </ul>
  </div>

</div>

<?php include(SHARED_PATH . '/staff_footer.php'); ?>


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php 
header("Content-type: text/css"); 
?>

<?php
session_start();
?>

html {
  height: 100%;
  width: 100%;
}

body {
  width: 1100px;
  height: 100%;
  margin: auto;
  border: 0;
  font-family: Verdana, Arial, Helvetica, sans-serif;
  font-size: 13px;
  line-height: 15px;
  background: <?php echo $_SESSION['bg-color']; ?>; 
}

header {
  height: 140px;
  width: 1100px;
  margin: 0;
  padding: 0;
  text-align: left;
  background:  <?php echo $_SESSION['hd-color']; ?>;
  color: #FFFFFF;
}

header h1 {
  padding: 1em;
  margin: 0;
}


Alvast dank!

[ Voor 6% gewijzigd door MathijsB88 op 24-03-2023 19:59 ]

Beste antwoord (via MathijsB88 op 25-03-2023 14:00)


  • Yihka
  • Registratie: Juni 2011
  • Laatst online: 26-06 19:10
Als het idee is dat je de kleur van de website voor iedereen kan aanpassen, dan wil je het opslaan ergens waar de server bij kan. Denk hierbij aan een database, een bestand, enzovoort. Sleutelwoord hier is dat de server het beheert.

Is de kleur voor een specifiek persoon, zoals de ingelogde gebruiker? Als je al een inlog systeem hebt met een database en dergelijk, dan zou je iets vergelijkbaars kunnen doen voor deze instellingen. Dan beheert de server het nog steeds, maar scope je het per gebruiker.

Mocht je nog een heel simpel systeem hebben en is dit meer een demo project, zou je kunnen kijken naar cookies of wellicht andere opslagmethodes die het opslaan aan de kant van de gebruiker. De browser van de gebruiker.

Het is goed om je in te lezen welke manieren er zijn qua opslagmethodes en wat de voor- en nadelen zijn, dat gaat je uiteindelijk helpen met de juiste kiezen

Alle reacties


Acties:
  • 0 Henk 'm!

  • energydrank
  • Registratie: Mei 2014
  • Laatst online: 21:53
wat heb je zelf al gevonden/geprobeerd? dat stukje mis ik nog een beetje in de TS.

anyways:
Sessions worden als ik het me goed herinner altijd gedelete op het moment dat de browser wordt afgesloten(of vlak daarna), als je de kleur voor altijd wil opslaan kan je beter een database hiervoor gebruiken.

sessions zijn ook single user, dus dat zou betekenen dat de website alleen die kleur krijgt op de computer van de persoon die het heeft aangepast.

Slecht voor je gezondheid en je portomonnee!


Acties:
  • 0 Henk 'm!

  • I_IBlackI_I
  • Registratie: Januari 2014
  • Laatst online: 22:27
Om je probleem te snappen moet je uitzoeken wat een session precies inhoud. Als je het concept session snapt zal je merken waarom dit probleem zich voordoet. Eigenlijk werkt je code precies goed, maar je hebt een verkeerde aanpak voor je probleem gekozen. Zoals hierboven beschreven moet je een lang(er)durige opslagmethode gebruiken.

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou de kleur opslaan in localStorage, dan is de volgende keer gewoon.

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Yihka
  • Registratie: Juni 2011
  • Laatst online: 26-06 19:10
Als het idee is dat je de kleur van de website voor iedereen kan aanpassen, dan wil je het opslaan ergens waar de server bij kan. Denk hierbij aan een database, een bestand, enzovoort. Sleutelwoord hier is dat de server het beheert.

Is de kleur voor een specifiek persoon, zoals de ingelogde gebruiker? Als je al een inlog systeem hebt met een database en dergelijk, dan zou je iets vergelijkbaars kunnen doen voor deze instellingen. Dan beheert de server het nog steeds, maar scope je het per gebruiker.

Mocht je nog een heel simpel systeem hebben en is dit meer een demo project, zou je kunnen kijken naar cookies of wellicht andere opslagmethodes die het opslaan aan de kant van de gebruiker. De browser van de gebruiker.

Het is goed om je in te lezen welke manieren er zijn qua opslagmethodes en wat de voor- en nadelen zijn, dat gaat je uiteindelijk helpen met de juiste kiezen

Acties:
  • +1 Henk 'm!

  • MathijsB88
  • Registratie: Augustus 2020
  • Laatst online: 16-08 23:39
Bedankt allemaal voor de reacties!

Het is gelukt. Ik ben inderdaad afgestapt van de $_SESSIONS. Hoe ik het nu heb gedaan: ik heb in de database een nieuwe tabel aangemaakt 'colors'. Op de bevestigingspagina van de kleurinstelpagina heb ik door middel van SQL-UPDATE de kleurcode geüpdate in de tabel 'colors'.
Op de stylesheet heb ik met behulp van PHP en SQL-SELECT de kleurcode weer opgehaald en gebruikt om de kleur aan te passen.

Nogmaals dank allemaal.

Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 00:31

AW_Bos

Liefhebber van nostalgie... 🕰️

Sessions zijn, de definitie omschrijft het al: "a period devoted to a particular activity.". Een periode die gewijd is aan een bepaalde activiteit, en waar iemand aan deelneemt.
Deze kan je onmogelijk voor anderen gebruiken.

Daarom is een database de beste oplossing. Misschien kan je de tabel colors verder uitkristalliseren in 'styles', Want ik denk dat je naast kleuren ook andere stijlelementen hebt. Misschien wil je wel een logo kunnen aanpassen, of een link willen voorzien van een underline.

Naast een database kan je ook een configuratie-file maken waarin je dit instelt. Maar standaard gaat dit niet via een adminpanel. ;)

[ Voor 11% gewijzigd door AW_Bos op 25-03-2023 22:53 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • +1 Henk 'm!

  • eLScha
  • Registratie: Juli 2005
  • Niet online
Wat gebeurt er als iemand de volgende kleur instelt:

code:
1
"><script>alert('Oei oei');</script>


Aanvulling:

Heb je alle error reporting ingeschakeld terwijl je aan het programmeren bent? Dit zou namelijk een foutmelding moeten geven:

code:
1
2
3
4
5
6
7
<?php 
header("Content-type: text/css"); 
?>

<?php
session_start();
?>

[ Voor 52% gewijzigd door eLScha op 25-03-2023 23:32 ]


Acties:
  • +1 Henk 'm!

  • Groax
  • Registratie: Oktober 2012
  • Laatst online: 18-08 11:58
AW_Bos schreef op zaterdag 25 maart 2023 @ 22:52:
Sessions zijn, de definitie omschrijft het al: "a period devoted to a particular activity.". Een periode die gewijd is aan een bepaalde activiteit, en waar iemand aan deelneemt.
Deze kan je onmogelijk voor anderen gebruiken.
Zeker waar maar een Sessie kan gestolen worden. Nu bevat deze sessie geen boeiende informatie maar het is zeker niet onmogelijk om iemands zijn sessie te bemachtigen.

https://nl.wikipedia.org/wiki/Session_hijacking
Pagina: 1