14. januar 2006 - 17:21Der er
134 kommentarer og 1 løsning
Skift fra Tiny Mce til FCKeditor - hjælp
Hej,
Har fået lavet et mini CMS, hvor det er muligt at rette sider i Tiny Mce, hvorefter den gemmer i MySQL. Tiny Mce opfylder dog ikke mine krav og vil derfor gerne have integreret FCKeditor i stedet, men er i tvivl om hvordan jeg skal gøre.
else { mysql_query("TRUNCATE TABLE `min_database`"); mysql_query("INSERT INTO min_database (id,content) VALUES('forside','$content') "); echo "Forsiden er nu blevet opdateret."; }
Har via PHPmyadmin oprettet databasen "side" med følgende tabeller side1 (id, text) side2 (id, text) side3 (id, text)
min /admin/db.php ser således ud: --------------------------------------------------------------------------------- <?php mysql_connect("localhost","side","pass") or die("Kunne ikke forbinde til databasen.\n"); mysql_select_db("side"); ?> ---------------------------------------------------------------------------------
Skal via /admin/index.php Kunne redigere /side1.php /side2.php /side3.php med FCKeditor
Har nu lavet rediger.php hvor jeg har samlet det hele i fra dit svar i den anden tråd. Når jeg prøver at gå ind på rediger.php?id=side1 får jeg fejlen: Unknown column 'side1' in 'where clause'
Nu er jeg ikke en ørn til php men har selv fået det det til at virke.
Grunden til at der udkrives "Der blev ikke opdateret noget." er at if sætningen ikke er opfyldt.
Ret <input type="hidden" name="id" value = "<?=$id?>"> til <input type="tekst" name="id" value = "<?=$id?>"> så du kan se hvad feltet indeholder hvis det er tomt er det derfor.
Det med databaserne ved jeg ikke noget om bruger selv mysql.
if (isset($_GET["id"])) { $sql = "SELECT tekst FROM side1 WHERE id='" . $_GET['id'] . "'"; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($query);
Ja, men den skriver det sammen med "Der blev ikke opdateret noget." - den skulle da helst hav udskrevet sen sammen med "Siden er opdateret." efter som at det er i den del af if-sætningen at den er placeret...
Troede bare det var nemmere hvis jeg havde en tabel til hver side, men kan da godt nøjes med en.
Ja, kan heller ikke forstå den udskriver det. Burde jo ikke have noget at sige jeg har samlet siderne i én, modsat dit eksempel i den anden tråd, hvor du har en side til fckeditor og en anden side der gemmer.
Nej! Langt det nemmeste er at have alle siderne i en og samme tabel. Skal vi ikke bare gå i gang med sådan en løsning i stedet? Det er også sådan at mit eksempel fra den anden tråd virker. ^)
Og, jo vi kan sagtens samle al koden på en side hvis du heller vil have det?
Cool. Så skal vi først have noget kode som viser en liste over de sider der er i tabellen. Vil du komme med et bud (jeg kan godt skrive den, men så lære du jo ikke selv noget i processen ;^)?
Men så må det første vel være at udvide koden sådan at det bliver muligt at oprette nye sider.
Der skal altså være et link, "Ny side" eller sådan noget, som når du klikker på det så får du en formular hvor at du kan indtaste en ny side. Eller vil du have det på en anden måde?
if (isset($_GET["id"])) { $sql = "SELECT tekst FROM side WHERE id='" . $_GET['id'] . "'"; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($query);
Ja, men den skal lige passes til at den jo kommer via et link *uden* et id (altså noget med at droppe $_GET["id"]). Desuden skal den slet ikke hente noget ud af databasen - det er jo en helt ny side der skal oprettes - den eksistere ikke endnu.
Så skal vi have modificeret den eksisterende kode over på siden "tilbage_til_siden_med_listen.php" (hvad kalder du den?) til at tage imod det der submittes når man trykker på knappen.
Den SQL-sætning, som skal fyres af for at indsætte den nye side i tabellen, skal se sådan her ud:
"INSERT INTO side (tekst) VALUES ('Her skal teksten være')"
Læg mærke til at id-feltet slet ikke er med i denne - det bliver nemlig håndteret automatisk af databasen.
<?php mysql_connect("localhost","user","pass") or die("Kunne ikke forbinde til databasen.\n"); mysql_select_db("database"); ?> -------------------------------------------------------------------------------
========== list.php ==========
<? require_once("db.php");
if (isset($_POST['FCKeditor1'])) { $tekst = $_POST["FCKeditor1"];
$sql = "INSERT INTO side (tekst) VALUES ('" . $tekst . "')"; mysql_query($sql) or die(mysql_error()); }
$sql = "SELECT id FROM side ORDER BY id ASC"; $query = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_assoc($query)) { echo "<a href='rediger.php?id=" . $row["id"] . "'>Rediger side " . $row["id"] . "</a><br>"; } ?>
if (isset($_GET["id"])) { $sql = "SELECT tekst FROM side WHERE id='" . $_GET['id'] . "'"; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($query);
if (isset($_POST['id'])) { $tekst = $_POST["FCKeditor1"];
$sql = "UPDATE side SET tekst='$tekst' WHERE id='" . $_POST["id"] . "'"; mysql_query($sql) or die(mysql_error());
echo "Siden er opdateret."; } else { echo "Der blev ikke opdateret noget."; } ?> -------------------------------------------------------------------------------
Ved ikke helt hvordan vi kommer videre.
Har designet i én fil, og ville så include indholdet. Har lavet en menu med nogle punkter. Under et af punkterne skal det dog være muligt at oprette nye sider via cms'et.
Eks. hvis vi har et menupunkt der hedder "Netparty" Her vil jeg via mit cms kunne oprette "netparty 1", "netparty 2", etc. Når man klikker på linket skal man komme ind på en ny side omhandlende det valgte netparty - siden skal selvfølgelig includes.
if (isset($_GET["id"])) { $sql = "SELECT tekst FROM side WHERE id='" . $_GET['id'] . "'"; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($query);
Grunden til at du fik udskrevet "Der blev ikke opdateret noget." før er egentlig ganske simpel; Når du trykkede på et Rediger-link på list-php siden så bar $_GET["id"] sat til noget, men det var $_POST["id"] jo derimod ikke. Og derfor blev den anden halv del af den sidste if-sætning udført:
if (isset($_POST['id'])) { ... } else { echo "Der blev ikke opdateret noget."; }
<? if (isset($_GET["id"])) { $sql = DELETE from side WHERE id=" . $_GET['id']; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($query);
header("Location: list.php"); } ?>
Læg forresten mærke at der ikke er nogen grund til at have '-tegn rundt om id-værdien i din SQL. Det behøver du i øvrigt heller ikke i rediger.php koden:
Dvs. at:
$sql = "SELECT tekst FROM side WHERE id='" . $_GET['id'] . "'"; $sql = "UPDATE side SET tekst='$tekst' WHERE id='" . $_POST["id"] . "'";
- kan rettes til:
$sql = "SELECT tekst FROM side WHERE id=" . $_GET['id']; $sql = "UPDATE side SET tekst='$tekst' WHERE id=" . $_POST["id"];
Ser også lidt mere overskueligt ud, uden ' '. Når jeg prøver at slette får jeg fejlen: "Parse error: syntax error, unexpected T_STRING in delete_page.php on line 4"
Har rette line 4 til:
$sql = DELETE from side WHERE id=" . $_GET["id"]";
Du udskriver jo heller ikke det du henter ud fra databasen:
<? require_once("db.php");
if (isset($_GET["id"])) { $sql = "SELECT tekst FROM side WHERE id=" . $_GET["id"]; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($query);
Men i stedet for at include på den måde, kan du jo også bare lave en funktion til formålet:
function include_page($id) { $sql = "SELECT tekst FROM side WHERE id=" . $_GET["id"]; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($query);
echo $row["tekst"]; }
Denne kalder du så på de steder hvor at du vil have siderne includet:
Hvis dine sider for at indtaste html-kode skal være offentligt tilgængeligt, så bør du bruge funktioner som mysql_real_escape_string() til at beskytte dig. Hvis det derimod kun er dig selv som skal have muligheden, så er det ikke så nødvendigt. Len så skal du til gengæld have t login-system op at stå!
På den anden side så kunne det være at du selv havde lyst til at oprette en tekst hvor tegnet ' indgår - uden mysql_real_escape_string() vil det give dig problemer.
Måden den bruges på er at omkranse alle dine input:
Altså fra sådan noget som:
$sql = "INSERT INTO side (tekst) VALUES ('" . $tekst . "')";
- til:
$sql = "INSERT INTO side (tekst) VALUES ('" . mysql_real_escape_string($tekst) . "')";
Og fra:
$sql = "SELECT tekst FROM side WHERE id='" . $_GET['id'] . "'";
- til:
$sql = "SELECT tekst FROM side WHERE id='" . mysql_real_escape_string($_GET['id']) . "'";
Det er nu rart at hjælpe en som ikke er bleg for selv at kode. Alt for mange vil bare have løsningen mere eller mindre serveret. Men så lære de jo bare heller ikke noget i processen. :^|
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.