Hoe variabelnamen uit database toewijzen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 4 volgende »

- Ariën  -
Beheerder

- Ariën -

31/08/2023 22:34:36
Quote Anchor link
Je kan ook prima een configuratie maken met een array in een aparte config.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$strings
= [
'home' => array (
        'title' => 'Onze website',
        'content' => 'Welkom op onze site. Hier kan je informatie vinden over.....'
        ),
'contact' => array (
        'title' => 'Contactgegevens',
        'content' => 'Je kan ons bereiken via bla bla'
        ),
'over_ons' => array (
        'title' => 'Over ons',
        'content' => 'Wij zijn bla die bla....'
        ),
];


// laat array zien
echo "<pre>".print_r($strings)."</pre>";

// gebruik als volgt:
echo $strings['over_ons']['title']; // toont Over ons

?>


Op dit punt heb je een mooie multidimensionale array. Je kan zelf nog per pagina een extra 'tekstblok' aanmaken.

Nadeel: Onderhoud. Hoe wil je op locatie je tekst aanpassen?
Op dit punt zijn databases juist handiger.
Gewijzigd op 31/08/2023 22:37:42 door - Ariën -
 
PHP hulp

PHP hulp

18/12/2024 03:08:56
 
Paul Weiss

Paul Weiss

31/08/2023 22:39:07
Quote Anchor link
he ivo. bedankt voor je input. stel ik op prijs. $1etitel gebruik ik ook niet. wel $rij1titel1. Placeholders eigenlijk nooit gebruikt. maar wel een idee wellicht. en inderdaad maak ik wellicht teveel zorgen dat een gebruiker de pagina kan aanpassen via inspect. zal ook eens kijken naar smarty.
 
- Ariën  -
Beheerder

- Ariën -

31/08/2023 22:41:14
Quote Anchor link
$rij1titel1 dit zegt niemand wat.

Zeg op zijn minst wat het is, en waar de titel bij hoort.
Zie dus mijn geschreven multidimensionale array. het is geen database, maar wel een mooie genormaliseerde structuur.

Ter informatie: Ik gebruik zelf ook Smarty, alhoewel ik denk ik tegenwoordig naar Twig had gekeken omdat die slimmer is. Mijn CMS gebruikt Smarty voor templates met placeholders zoals {$sitename}.
Met dit zorg ervoor dat de placeholder gevuld wordt.
$smarty->assign('sitename', 'Mijn site');

Je kan ook hele array's gebruiken in een assign() en placeholder. Ikzelf heb een array met configuratie en enkele strings in de database opgeslagen die ik met {$config.template.about_us} kan oproepen. Maar je kan dit net zo goed uit een vaste hardcoded array halen.
Gewijzigd op 31/08/2023 22:45:41 door - Ariën -
 
Paul Weiss

Paul Weiss

31/08/2023 22:42:50
Quote Anchor link
he arien. jij ook bedankt voor je reactie. Ik denk dat ik nu genoeg heb om verder mee te gaan. iedereen nogmaals super bedankt.
 
- Ariën  -
Beheerder

- Ariën -

31/08/2023 22:45:56
Quote Anchor link
Zie mijn edit met wat meer info. ;-)

Succes! :-)
 
Paul Weiss

Paul Weiss

01/09/2023 08:49:01
Quote Anchor link
Ivo P op 31/08/2023 22:26:57:
Ik zou in plaats van
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<h1 contenteditable="plaintext-only"><?php echo $rij1titel1; ?></h1>


meer zien in

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<h1 contenteditable="plaintext-only">{rij1titel1}</h1>


Maar bovenstaande code wordt dan toch alleen {rijtitel1} weergegeven. waar verwijst dit dan naar? Placeholders ken ik alleen van forms waarbij inputvelden alvast gevuld worden. of textarea waarbij tekst verschijnt die je al gedefinieerd hebt verschijnt en die je kunt wijzigen. Bovendien moet ik het ook nog eens kunnen opslaan in de database. wellicht zie ik de connectie niet. Maar zal er nog eens naar kijken.

Dan zijn het geen variabelen, maar placeholders.

En dan zou je ook eens kunnen kijken hoe bijvoorbeeld Smarty werkt met het vullen van de inhoud in een template.

Je beperkt je nu ook in de naamgeving van de variabelen. $1eTitel is bijvoorbeeld niet toegestaan.

terwijl je met str_replace() geen beperking hebt in de te vervangen placeholders.


Toevoeging op 31/08/2023 22:30:05:

Verder ben je volgens mij de enige die zich zorgen maakt over het aanpassen van de pagina middels Inspect.

Er zit nog een knop in je browser die zorgt dat de pagina geheel verdwijnt namelijk.
(er staat een X op en staat helemaal rechtsbovenaan)

Daarnaast kunnen gebruikers ook met Zoom de site heel anders uit laten zien, mogelijk omdat ze slechte ogen hebben.
Of met leuke plugins kun je kleuren en layout aanpassen, omdat je dat beter kunt lezen.

Dat doet niets af aan hoe je pagina er voor elke standaard gebruiker uit gaat zien.
 
- Ariën  -
Beheerder

- Ariën -

01/09/2023 09:14:10
Quote Anchor link
Er mist een reactie op je quote?
 
Ivo P

Ivo P

01/09/2023 09:14:59
Quote Anchor link
Quote:
Maar bovenstaande code wordt dan toch alleen {rijtitel1} weergegeven


file1.template:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<h1 contenteditable="plaintext-only">{rij1titel1}</h1>


Datebase tabel
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
id   placeholder   inhoud
1    inhoud_a      hier een lap tekst
2    rij1titel1    Dit is de titel


script.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$sql
= "SELECT placeholder, inhoud FROM tabel WHERE pagina = 123;";

$inhoud = file_get_content('file1.template');
while ($row = mysqli_fetch_assoc($result)) {
    $inhoud = str_replace('{' . $row['placeholder'] . '}', htmlspecialchars($row['tekst]), $inhoud);
}


echo $inhoud;

?>
 
- Ariën  -
Beheerder

- Ariën -

01/09/2023 09:30:19
Quote Anchor link
Dit wat Ivo schrijft is dus een eigen vorm van een templateparser, wat Smarty ook is.
Met Smarty heb je nog meer logica erin zitten die je ook in PHP gebruikt. Zoals if-elseif-else statements, modifiers om text aan te passen met bijv. strtoupper() en nog veel meer.

Dus als je HTML en PHP gescheiden wilt hebben, dan is een templateparser de optie. Je kan dit ook prima inzetten voor een algemeen CMS die je ook inzet voor andere klanten.
 
Paul Weiss

Paul Weiss

01/09/2023 09:54:17
Quote Anchor link
ah oke. op die manier. ik ga ernaar kijken. zal ook goed moet kijken wat voor mijn doel het beste werkt ook.
thx.

Toevoeging op 01/09/2023 11:42:17:

Ivo P op 01/09/2023 09:14:59:
Quote:
Maar bovenstaande code wordt dan toch alleen {rijtitel1} weergegeven


file1.template:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<h1 contenteditable="plaintext-only">{rij1titel1}</h1>


Datebase tabel
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
id   placeholder   inhoud
1    inhoud_a      hier een lap tekst
2    rij1titel1    Dit is de titel


script.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$sql
= "SELECT placeholder, inhoud FROM tabel WHERE pagina = 123;";

$inhoud = file_get_content('file1.template');
while ($row = mysqli_fetch_assoc($result)) {
    $inhoud = str_replace('{' . $row['placeholder'] . '}', htmlspecialchars($row['tekst]), $inhoud);
}


echo $inhoud;

?>



dank je wel. er zit echter ergens een fout in de onderstaande syntax. Kan 'm alleen niet vinden. heb er al naar gekeken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
while ($row = mysqli_fetch_assoc($result)) {
    $inhoud = str_replace('{' . $row['placeholder'] . '}', htmlspecialchars($row['tekst]), $inhoud);
}
 
- Ariën  -
Beheerder

- Ariën -

01/09/2023 11:46:33
Quote Anchor link
Single quote na tekst. Dat kan je ook aan de kleuren hierboven zien, dat tekst blauw is, en de placeholder rood.
Gewijzigd op 01/09/2023 11:48:46 door - Ariën -
 
Paul Weiss

Paul Weiss

01/09/2023 12:03:29
Quote Anchor link
Oh ja ik zie het. ik ben er momenteel mee aan het stoeien. krijg het alleen nog niet werkend. Ik heb nu een tabel aangemaakt met ook nog een kolom met pagina. Maar waar verwijst 'tekst' nu precies naar? MOet toch 'inhoud' zijn?
Als ik het goed begrijp moet dus nu in de content uit file1.template de overeenstemmende placeholder vervangen worden door "dit is de titel". Maar dat gebeurd momenteel nog niet.
Gewijzigd op 01/09/2023 12:17:18 door Paul Weiss
 
- Ariën  -
Beheerder

- Ariën -

01/09/2023 12:21:49
Quote Anchor link
Klopt, dat moet inhoud zijn.
 
Paul Weiss

Paul Weiss

01/09/2023 12:32:34
Quote Anchor link
ik krijg het nog niet werkend. file1.template wordt bovendien de content niet gelezen. als ik file1.txt gebruik wel. Ik heb nu onderstaande code maar {rij1titel1} wordt niet vervangen door de bijbehorende tekst.
Wat doe ik fout?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

$inhoud
= file_get_contents("file1.txt");
echo $inhoud;

$sql = "SELECT placeholder, inhoud FROM tabel WHERE pagina = 2";
$result = $conn->query($sql);


while ($row = mysqli_fetch_assoc($result)) {
    $inhoud = str_replace('{' . $row['placeholder'] . '}', htmlspecialchars($row['inhoud']), $inhoud);
}


echo $inhoud;

?>
Gewijzigd op 01/09/2023 12:32:48 door Paul Weiss
 
- Ariën  -
Beheerder

- Ariën -

01/09/2023 12:53:15
Quote Anchor link
Bestaat file1.template wel?

Kijk eens met print_r($row); in je while-loop of die data beschikbaar is in je database.

Meten en dus debuggen is weten... ;-)
Gewijzigd op 01/09/2023 12:54:23 door - Ariën -
 
Paul Weiss

Paul Weiss

01/09/2023 13:00:47
Quote Anchor link
de file bestaat en met m.b.v. van onderstaande code heb ik ook al getest of de waarde naar voren komt.
Zowel placeholder als ook de inhoud van pagina 2 werden weergegeven.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
$sql = "SELECT placeholder, inhoud FROM tabel WHERE pagina = 2";
$result = $conn->query($sql);
$row = $result->fetch_assoc();


$placeholder = $row['placeholder'];
$inhoud = $row['inhoud'];
echo $placeholder;
echo $inhoud;
 
- Ariën  -
Beheerder

- Ariën -

01/09/2023 13:05:55
Quote Anchor link
Wat staat er in je database?
 
Paul Weiss

Paul Weiss

01/09/2023 13:17:11
Quote Anchor link
Ik heb nu print_r($row); in de loop toegevoegd. Daar verschijnt deze inhoud wel.
Zit dan een foutje in de str_replace denk ik. Maar ik zie het niet.
In mijn tabel staat precies dat wat ivo heeft aangegeven. Heb alleen 1 extra kolom met de naam pagina.
zie hieronder:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
id   placeholder   inhoud                       Pagina
1    inhoud_a      hier een lap tekst             1
2    rij1titel1    Dit is de titel
2

{/code]

Toevoeging op 01/09/2023 13:48:37:

Hier even een update. werkt nu wel. Deze werkwijze is inderdaad beter. Maar nu rijst de vraag als ik het tekstblok wijzig hoe kan ik de inhoud dan weer opslaan in de database. Met php variable wist ik het wel.
de namen van de placeholders kunnen namelijk steeds varieeren bijv.
 
- SanThe -

- SanThe -

01/09/2023 13:48:57
Quote Anchor link
UPDATE tabelnaam SET inhoud = 'Dit is de nieuwe titel ' WHERE placeholder = 'rij1titel1'
Gewijzigd op 01/09/2023 13:52:26 door - SanThe -
 
Paul Weiss

Paul Weiss

01/09/2023 13:59:22
Quote Anchor link
ja dat weet ik dat het op deze manier moet. Maar de namen van de placeholders weet ik niet. de namen van placeholders worden aangemaakt door een php script. elke pagina bestaat namelijk uit meerdere html blokken die enorm kunnen varieeren. voor titel1 wordt dan ook het rijnummer door het systeem ervoor geplaatst. op die wijze krijg ik dus placeholders met de naam rij1titel1 en rij12titel1 en dat geldt dan niet alleen voor titel maar ook voor tekst1 en fontkleur etc.. Is er een manier om alle placeholdernamen uit te lezen of zo? de rij slaat dus op het html block dat waar staat in de pagina.
Gewijzigd op 01/09/2023 14:01:40 door Paul Weiss
 

Pagina: « vorige 1 2 3 4 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.