Permalänk
Medlem

Ändra i html-DOM med PHP-kod

Hej!

Jag skulle behöva lite hjälp, jag vill trycka på en knapp och sedan när knappen har klicka tryckt på så vill jag ändra värdet i textarea och jag får inte använda JavaScript till att åstadkomma detta.

kod:

<!DOCTYPE html> <html lang="sv"> <head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form id="form1" method="post" action="test.php"> <textarea id="t1" name="t1name" style="width:300px; height:100px; resize:none;">Denna text ska ändras</textarea> <input type="submit" id="submitbutton" name="submitbuttonName" value="Skicka"> </form> <?php if(isset($_POST["submitbuttonName"])) { $text = $_POST["t1name"]; //ändra nu värdet i textarea till 'hello world' med hjälp av php-kod. } ?> </body> </html>

Permalänk
Medlem

I stället för att lösa uppgiften åt dig, hur tänker du att man _borde_ göra?

edit: Ledtråd, du kan blanda html och php-kodblock fritt, så länge du sluter php-blocken med <?php ... ?>

Permalänk
Medlem
Skrivet av elBenko:

I stället för att lösa uppgiften åt dig, hur tänker du att man _borde_ göra?

edit: Ledtråd, du kan blanda html och php-kodblock fritt, så länge du sluter php-blocken med <?php ... ?>

Det är menat att jag ska göra på detta liknande sätt:

//PHP-KOD $dom = new DOMDocument(); $dom->loadHTML($html); $element = $dom->getElementById("t1"); $element->nodeValue = 'hello world';

Men jag får tyvärr inte till det.

Permalänk
Medlem

@Lexdale: Ah, okej, då får man göra lite annorlunda. Har inte jobbat med php DOM tidigare, men en snabbkoll gav mig:

<?php

// 1. kolla om post är satt till något här, om ja fortsätt, annars printa formulärfilen

$doc = new DOMDocument();
$doc->load('ditt_htmldokument_med_formulär_här');

// 2. Hitta rätt element och sätt värdet till post-variabelns värde här, googla getElementsByTag / getElementById samt nodeValue

echo $doc->saveXML();

?>

Spara filen som test.php, och formuläret som något annat, typ test.html. Går säkert göra detta smidigare, men det är det bästa jag kan komma på utan någon som helst erfarenhet med DOM-manipulation i php

edit: Såg att du kommit en liten bit på vägen, du saknar bara att spara din DOM och printa den med echo

Permalänk
Medlem
Skrivet av elBenko:

@Lexdale: Ah, okej, då får man göra lite annorlunda. Har inte jobbat med php DOM tidigare, men en snabbkoll gav mig:

<?php

// 1. kolla om post är satt till något här, om ja fortsätt, annars printa formulärfilen

$doc = new DOMDocument();
$doc->load('ditt_htmldokument_med_formulär_här');

// 2. Hitta rätt element och sätt värdet till post-variabelns värde här, googla getElementsByTag / getElementById samt nodeValue

echo $doc->saveXML();

?>

Spara filen som test.php, och formuläret som något annat, typ test.html. Går säkert göra detta smidigare, men det är det bästa jag kan komma på utan någon som helst erfarenhet med DOM-manipulation i php

edit: Såg att du kommit en liten bit på vägen, du saknar bara att spara din DOM och printa den med echo

Hm,, typ såhär?

<!DOCTYPE html> <html lang="sv"> <head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form id="form1" method="post" action="test.php"> <textarea id="t1" name="t1name" style="width:300px; height:100px; resize:none;">Denna text ska ändras</textarea> <input type="submit" id="submitbutton" name="submitbuttonName" value="Skicka"> </form> <?php if(isset($_POST["submitbuttonName"])) { $text = $_POST["t1name"]; //Ändra nu värdet i textarea till 'hello world' med hjälp av php-kod. //PHP-KOD $dom = new DOMDocument(); $dom->loadHTML($html); $element = $dom->getElementById("t1"); $element->nodeValue = 'hello world'; echo $dom->saveXML(); } ?> </body> </html>

Det fungerar fortfarande inte, vad är det jag gör fel tro?

Permalänk
Medlem

@Lexdale: Nja, SaveHTML() ska du nog använda, iom. du laddar med html-formattering. Men problemet är att du försöker ladda variabeln $html som inte är deklarerad någonstans. Testa detta:

<?php $html = "<!DOCTYPE html> <html lang=\"sv\"> <head> <title>test</title> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"> </head> <body> <form id=\"form1\" method=\"post\" action=\"\"> <textarea id=\"t1\" name=\"t1name\" style=\"width:300px; height:100px; resize:none;\">Denna text ska ändras</textarea> <input type=\"submit\" id=\"submitbutton\" name=\"submitbuttonName\" value=\"Skicka\"> </form> </body> </html>"; if(isset($_POST["submitbuttonName"])) { $text = $_POST["t1name"]; $dom = new DOMDocument(); $dom->loadHTML($html); $element = $dom->getElementById("t1"); $element->nodeValue = $text; $html = $dom->saveHTML(); } echo $html; ?>

edit: Har inte möjlighet att testköra själv, har ingen webbserver uppe, men det där borde fungera.

Permalänk
Medlem
Skrivet av elBenko:

@Lexdale: Nja, SaveHTML() ska du nog använda, iom. du laddar med html-formattering. Men problemet är att du försöker ladda variabeln $html som inte är deklarerad någonstans. Testa detta:

<?php $html = '<!DOCTYPE html> <html lang=\"sv\"> <head> <title>test</title> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"> </head> <body> <form id=\"form1\" method=\"post\" action=\"test.php\"> <textarea id="t1" name=\"t1name\" style=\"width:300px; height:100px; resize:none;\">Denna text ska ändras</textarea> <input type=\"submit\" id=\"submitbutton\" name=\"submitbuttonName\" value=\"Skicka\"> </form> </body> </html>'; if(isset($_POST["submitbuttonName"])) { $text = $_POST["t1name"]; $dom = new DOMDocument(); $dom->loadHTML($html); $element = $dom->getElementById("t1"); $element->nodeValue = $text; $html = $dom->saveHTML(); } echo $html; ?>

edit: Har inte möjlighet att testköra själv, har ingen webbserver uppe, men det där borde fungera.

Detta fungerade men måste man verkligen spara ned all html-kod i en php-$variabel ? jag trodde att det skulle gå att ändra på html element och bara uppdatera sidan typ. Jag är inte superförtjust i att printa ut html-kod med php-echo, men det fungerade iallafall, tack!

Permalänk
Medlem

@Lexdale: loadHTML tar en sträng formatterad som html, så antingen lagrar du hela formuläret som en sträng i php-dokumentet, eller så har du formuläret externt och läser in det till en variabel innan du kör loadHTML. Vet tyvärr inte om det går att göra på något annat vis. Kanske går att använda en självreferens ($_SERVER['PHP_SELF']), men jag vet inte om loadHTML är smart nog att ta en url till en fil.