2011-08-20 3 views
2

J'ai cherché haut et bas sur Google et ce site pour une réponse à cette question sans succès.Comment enregistrer le contenu CKEditor mis à jour dans la base de données?

Je travaille sur un CMS personnalisé pour les futurs clients qui veulent faire leur propre maintenance. Voici le code qui charge le contenu de la page courante dans la zone de texte de la base de données:

if(isset($_GET['id'])) { 
    $id = $_GET['id']; 
    $content = mysql_query("SELECT title, content FROM pages WHERE id=".$id); 
    $search = mysql_num_rows($content); 
    if($search > 0){ 
     while($page = mysql_fetch_array($content)) { ?> 
     <h1>Editing <?php echo $page['title']; ?></h1> 
    <form id="editform" action="save.php?id=<?php echo $_GET['id']; ?>" method="post"> 
    <textarea id="editor" name="content"><?php echo $page['content']; ?></textarea> 
    </form> 
<?php } 
    } 
} ?> 

Voici le code dans save.php:

<?php 
if(isset($_POST['content'])){ 
$content = $_POST['content']; 
$id = $_GET['id']; 

echo $content; 

mysql_query("UPDATE pages SET content=".$content." WHERE id=".$id); 
} 
?> 

Le problème est que le POST [ « contenu »] ne cesse de se le le contenu original, pas celui édité que l'utilisateur vient de soumettre.

Comment résoudre ce problème?

+0

Je sais exactement rien sur le comportement CKEditor en php, mais en javascript vous devez appeler les méthodes de l'éditeur de mettre à jour l'élément underlaying ou getData() d'occurrence de l'éditeur pour obtenir des changements d'utilisateurs, il ne marche pas faire c'est automatique ... dans JS de toute façon – Zee

+0

@Zeela: Est-ce que j'utiliserais 'submit(); jQuery pour déclencher ce code de mise à jour? (Je sais en fait 'updateElement()' mais je trouve maintenant comment l'utiliser dans ma situation.) – Purag

Répondre

3

Les données doivent être transmises automatiquement lorsque le formulaire est affiché. Voici la page « Intégration » du Guide du développeur qui explique ceci:
http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Integration

Etes-vous sûr que la requête est en cours d'exécution avec succès et que le champ contenu est mis à jour? Je demande parce que le code affiché dit que dans save.php, vous utilisez:

$id = $_GET['id']; 

Cela semble poser un problème, parce que vous utilisez method = « post » dans votre formulaire, pas method = » obtenir".

Pourriez-vous également publier le code que vous utilisez pour remplacer la zone de texte avec CKEditor. Utilisez-vous la méthode PHP:

<?php 
$CKEditor = new CKEditor(); 
$CKEditor->basePath = '/ckeditor/'; 
$CKEditor->replace("content"); 
?> 

Ou la méthode JavaScript:

<script language="Javascript"> 
<!-- 
    CKEDITOR.replace('content'); 
//--> 
</script> 

Bien-être, Joe


Suivi de question dans les commentaires

Salut Purmou,

Je n'ai pas remarqué que vous incluiez l'ID dans l'action du formulaire, désolé à ce sujet. Si vous ne voulez l'utiliser comme une variable $ _POST au lieu, vous pouvez l'inclure comme un champ caché comme celui-ci:

<form id="editform" action="save.php?id=<?php echo $_GET['id']; ?>" method="post"> 
<input type="hidden" id="id" name="id" value="<?php echo $_GET['id']; ?>" /> 
<textarea id="editor" name="content"><?php echo $page['content']; ?></textarea> 

Il y a quelques bonnes documentaion sur le chargement de l'éditeur via PHP dans le dossier _samples du CKEditor installer: http://YourSite.com/ckeditor/_samples/php/

http://YourSite.com/ckeditor/_samples/php/replace.php, a les paramètres de base:

<?php 
// Include the CKEditor class. 
include_once "ckeditor/ckeditor.php"; 

// Create a class instance. 
$CKEditor = new CKEditor(); 

// Path to the CKEditor directory. 
$CKEditor->basePath = '/ckeditor/'; 

// Replace a textarea element with an id (or name) of "textarea_id". 
$CKEditor->replace("textarea_id"); 
?> 

similaires à la méthode JavaScript, vous pouvez ajouter des options de configuration avant de remplacer la zone de texte. Un exemple de la "avancée.php » file:

$CKEditor->config['width'] = 600; 

Pour utiliser la méthode PHP avec votre code spécifique, faites ceci:

if(isset($_GET['id'])) { 
    $id = $_GET['id']; 
    $content = mysql_query("SELECT title, content FROM pages WHERE id=".$id); 
    $search = mysql_num_rows($content); 
    if($search > 0){ 
     while($page = mysql_fetch_array($content)) { ?> 
     <h1>Editing <?php echo $page['title']; ?></h1> 
    <form id="editform" action="save.php?id=<?php echo $_GET['id']; ?>" method="post"> 
    <textarea id="content" name="content"><?php echo $page['content']; ?></textarea> 
    </form> 
<?php } 

include_once "ckeditor/ckeditor.php"; 
$CKEditor = new CKEditor(); 
$CKEditor->basePath = '/ckeditor/'; 
$CKEditor->replace("content"); 

    } 
} ?> 

J'ai changé l'identifiant textarea de "éditeur" à "contenu" je le ferais. Il est recommandé de ne pas utiliser "editor" pour l'ID ou le nom, car il est utilisé dans le code CKEditor pour faire référence à l'instance CKEditor

Vous pouvez configurer les paramètres dans la page où vous chargez l'éditeur ou dans le fichier config.js ou dans votre o wn fichier de configuration personnalisé.

J'ai passé du temps à essayer d'attraper la valeur du champ de contenu de formulaire après la soumission du formulaire, mais je n'ai pu le voir que lorsque CKEditor avait mis à jour le contenu.

être bien,
Joe

+0

Eh bien, excusez-moi de poser une question stupide, mais comment afficherais-je l'identifiant de la page en cours d'édition? J'en ai besoin sur la page save.php pour trouver les bonnes données à mettre à jour avec le nouveau contenu. Aussi, pourriez-vous expliquer comment utiliser les trucs PHP $ CKEditor par rapport à mon code? Merci pour l'aide. :) – Purag

+0

Salut Purmou, je ne suis pas sûr si vous êtes averti des changements à une réponse, donc j'ajoute ce commentaire pour vous faire savoir que j'ai répondu à votre question. Si l'utilisation de la méthode PHP ne résout pas le problème, publiez tout code que vous utilisez pour CKEditor et je verrai si je peux penser à autre chose à essayer. Joe – codewaggle

Questions connexes