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..
Hier werkt het gewoon. Er is niks mis met de str_replace.
Enige wat ik kan bedenken is dat je het verkeerde paginanummer hebt.

Persoonlijk zou ik goede namen gebruiken, die aanduiden waar het bij hoort, zoals 'contact' ofzo.
het werkt bij mij ook. alleen niet uitvinden hoe ik het dus moet opslaan. want zoals ik al zei de pagina waar de html pagina in komt te staan is variabel.
- Ariën - op 01/09/2023 13:59:58

Persoonlijk zou ik goede namen gebruiken, die aanduiden waar het bij hoort, zoals 'contact' ofzo.


Inderdaad
Dan moet je een UPDATE-query uitvoeren, na bijv. een submit actie, of een actie als je jouw focus verliest op je textarea via AJAX (JavaScript) uitvoeren.
UPDATE content SET inhoud='nieuwe invoer' WHERE pagina = 'contact'
Hoe arien. ben het allemaal aan het uitpluizen. laat ik even een stap terugdoen. als ik nu de php uitvoer krijg ik de resultaten te zien, die ik vervolgens doormiddel van contenteditable ook weer kan veranderen. maar hoe kan ik nu de nieuwe inhoud dan uberhaupt weer opslaan in een php variable die ik vervolgens weer via update kan opslaan in de database. dus even uigaande van 1 specifieke placeholder en bijbehorende inhoud.

iets van onderstaande? geen idee!!

$inhoud = inhoud van placeholder[rij1titel1; ??



Alvast bedankt.
Ben je al bekend met het afhandelen van formulieren?
Ik heb nog nooit met contenteditable gewerkt, maar ik lees dat dit niet direct als een formulier-element gezien wordt. Je zult een verborgen lege formulierelement input type="hidden" moeten aanmaken met bijv. de naam hiddenTextarea, en die de waarde geven van je contenteditable (bijv. myContentEditable). De copyContent() functie wordt aangeroepen bij het verzenden van je formulier, en vanaf dan heb je de invoer in $_POST['hiddenTextarea'] staan.



function copyContent () {
    document.getElementById("hiddenTextarea").value =  
        document.getElementById("myContentEditable").innerHTML;
    return true;
}



<form action='whatever' onsubmit='return copyContent()'>
De rest van je formulier met een submitknop en e.v.t andere elementen naar eigen wens.
</form>


Je kan natuurlijk ook i.p.v. contenteditable een off-the-shelf product kiezen als TinyMCE of CKeditor.
bedankt voor de info en tips. formulieren ken ik zeker. contenteditable is geen formulier element inderdaad.
Ik ga er verder mee aan de slag.
TinyMCE of CKeditor zou misschien makkelijker zijn, maar kies wat je zelf wilt.
ik moet daar echt gaan induiken. wil het voor mij zelf op dit moment ook niet te ingewikkeld maken.
Maar even terugkomende op de update.

Maar wat betreft het updaten van de inhoud van een placeholder zou ik dus eerst de inhoud via getelementbyid moeten koppelen en vervolgens via ajax doorsturen naar een php bestand waar ik vervolgenss via update deze wel kan opslaan in de database. Dat heb ik in het verleden ook al gedaan en ben ik redelijk bekend mee. Maar dan moet ik wel de id's weten. en daar ligt het probleem nu juist. deze varieren ook en zijn allemaal uniek. dan zou hiervoor ook weer een soort query of zo moeten komen. Is vrij complex merk ik.

[size=xsmall]Toevoeging op 01/09/2023 15:11:20:[/size]

Ik kan natuurlijk ook voor elk html blok afzonderlijk een save button plaatsen met bijbehorende form etc.
Maar als ik dan in de pagina meerdere wijzingen zou aanbrengen in verschillende blokken dan zou ik op elke save button moeten klikken. dat is ook geen optie.
Met AJAX moeten is een groot woord. AJAX is altijd een middel en niet een doel.
Als je dit gewoon als een normale hand-aangeklikte formulier request wilt doen, dan kan dat ook. Met AJAX maak je het wel makkelijker in gebruik doordat de request op de achtergrond plaatsvindt (a-synchroon).

Reageren