Stel ik heb in mijn database 2 veldnamen en wel content1 en content2. Content1 bavat alle namen van variabelen die doormiddel van een php script zijn aangemaakt. De namen van deze variabelen worden ook in een php document gebruikt om de inhoud daarvan weer te geven (zie verder onderaan). De inhoud van content1 zijn elk uniek en worden door een php script dus gegenereerd. veldnaam "content2". bevat de inhoud die aan deze variable is/wordt toegekend.

Hieronder een voorbeeld hoe het eruit zou kunnen zien:

Content1 bevat bijvoorbeeld de volgende variablenamen:

rij1titel1
rij1titel2
rij90tekst1
rij90tekst2

De repec. waardes in content2 bevatten bijvoorbeeld

hallo iedereen
Welkom iedereen
Dit huis is blauw
Deze tandenborstel is rood

dus rij1titel1 = hallo iedereen
etc..


zie de onderstaande code die ik momenteel heb. Hierdoor wordt alles uit de database dus ingelezen. Maar hoe kan ik nu ervoor zorgen dat de variabelen namen uit de database worden toegewezen en vervolgens kunnen worden weergegeven? beetje verwarrend wellicht wat ik bedoel. Hoop dat het een beetje duidelijk is wat ik wil. Weet ook niet of dit uberhaupt mogelijk is!!

Via onderstaande script wordt alles dus ingelezen


<?php

$servername = "xxxxx";
$username = "xxxx";
$password = "xxxx";
$dbname = "xxxxx";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, content1, content2 FROM content2";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
    echo "id: " . $row["id"]. " - Content1: " . $row["content1"]. " - content2: " . $row["content2"]. "<br>";
  }
} else {
  echo "0 results";
}
$conn->close();
?>


Wat er vervolgens zou moeten eigenlijk is dat onderstaande als het ware automatisch zou moeten worden aangemaakt. Dit kan ik dus niet handmatig aanmaken, omdat ik niet weer welke variablenamen in de database voorkomen!!

$rij1titel1 = $row['rij1titel1'];
$rij1titel2 = $row['rij1titel2'];
$rij90tekst1 = $row['rij90tekst1'];
$rij90tekst2 = $row['rij90tekst2'];

zit zorgt er uiteindelijk ook voor dat ik de inhoud kan worden weergeven in php


<h1>Onderstaand de weergave van de inhoud</h1>
<h1 contenteditable="plaintext-only"><?php echo $rij1titel1; ?></h1>
<h2 contenteditable="plaintext-only"><?php echo $rij1titel2; ?></h1>

<p contenteditable="plaintext-only"><?php echo $rij90tekst1; ?></p>
<p contenteditable="plaintext-only"><?php echo $rij90tekst2; ?></h1>


h1 zou dus "hallo iedereen" moeten weergeven etc.. etc..
Single quote na tekst. Dat kan je ook aan de kleuren hierboven zien, dat tekst blauw is, en de placeholder rood.
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.
Klopt, dat moet inhoud zijn.
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?


<?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;

?>

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... ;-)
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.



$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;
Wat staat er in je database?
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:



id   placeholder   inhoud                       Pagina
1    inhoud_a      hier een lap tekst             1
2    rij1titel1    Dit is de titel
2

{/code]

[size=xsmall]Toevoeging op 01/09/2023 13:48:37:[/size]

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.
UPDATE tabelnaam SET inhoud = 'Dit is de nieuwe titel ' WHERE placeholder = 'rij1titel1'
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.

Reageren