2010-02-03 3 views
1

J'utilise ajax pour rassembler les données de ckeditor à soumettre. Le problème est uniquement le contenu avant que la première apostrophe ne soit soumise à la base de données. Que pourrais-je faire de mal?Ckeditor ne soumet qu'une partie du contenu

Edit:

$date = strtotime($formData['date']); 
$article=mysql_real_escape_string($formData['article'],$DBconnect); 

$DBconnect=mysql_connect($dbVals['host'],$dbVals['user'],$dbVals['pass']); 

mysql_select_db($dbVals['db'], $DBconnect); 
$SQLstring="INSERT INTO PressRelease (ip, tym, title, date, article) VALUES('${_SERVER['REMOTE_ADDR']}', ".time().",'${formData['title']}', '$date', '$article')"; 

Je suis assez novice en la matière, donc s'il y a quelque chose que vous devez voir pour me aider à le faire savoir.

Répondre

2

Il semble que vous n'échappiez pas aux données de texte avant de les insérer dans la base de données. Utilisez cette fonction sur les données avant de passer dans votre requête SQL:

http://www.php.net/manual/en/function.mysql-real-escape-string.php

Edit: désolé, c'est en supposant que vous utilisez MySQL.

+0

+1 Je parie deux bières c'est ça. –

+0

oui j'utilise mysql, j'avais essayé d'utiliser cette fonction auparavant, je pensais que c'était aussi le problème, mais en l'utilisant aucune des données n'est soumise. ce que j'ai sous la forme est 2 zones de texte et puis une zone de texte ckeditor, toutes les autres données sont soumises à la base de données très bien. –

+0

Voulez-vous dire qu'avec mysql_real_escape_string aucune donnée n'est entrée dans la base de données? Soyez aussi précis que possible, cela nous aide à vous aider. –

1

Une méthode différente, plus compliquée et sans doute supérieure à celle proposée par Mark, utilise Parameterized Statements.

Pour emprunter un exemple de Wikipedia:

<?php 
$db = new mysqli("localhost", "user", "pass", "database"); 
$stmt = $db -> prepare("SELECT priv FROM testUsers WHERE username=? AND password=?"); 
$stmt -> bind_param("ss", $user, $pass); 
$stmt -> execute(); 
?> 

Il quitte la fuite jusqu'au pilote MySQL, ce qui réduit considérablement les chances de SQL Injection et des choses comme double fuite accidentelle. Notez que cela n'est pas possible en utilisant le old MySQL functions. Vous avez besoin des fonctions/objets Improved MySQLI ou similaire à PDO.

+0

La solution de Mark B est beaucoup plus simple, et je ne suis même pas sûr que le problème soit au niveau de la requête. –

+0

J'ai dit que c'était plus compliqué, n'est-ce pas? - Si le problème est au niveau de la requête (ce qui, compte tenu de la description du problème, est au moins parmi les raisons les plus probables), c'est certainement la méthode la plus "sécurisée". (Dans plus d'un sens.) – Atli

+0

je suis un débutant, donc je cherche quelque chose de plus à mon niveau, merci pour la suggestion si –

1

Si je comprends bien ce qui suit est le cas:

  • Vous avez un textarea qui est « repris » par CKeditor
  • Vous lisez le contenu de ce textarea avec Javascript
  • vous envoyez le contenu réunis au serveur avec AJAX

Si vous alerte() le contenu Javascript obtient du textarea, vous pouvez voir si l'étape 2 réussit. Si non, veuillez poster votre Javascript.

Si l'étape 2 est correcte, alors il y a peut-être un problème côté serveur, vider votre requête db pour voir cela.

Mise à jour: Assurez-vous, lorsque vous développez, d'activer toutes les erreurs et notifications. Et si vous faites des choses que vous ne pouvez pas "voir" facilement, comme AJAX, assurez-vous de garder un œil sur le journal des erreurs de votre serveur.

Dans votre ligne d'exemple de code 2, vous utilisez $ DBconnect, puis à la ligne 4, vous définissez ce que c'est. Comme vous pouvez le voir dans the PHP.net entry for mysql_real_escape_string si la fonction ne peut pas trouver une connexion à la base de données, la fonction génère une erreur et retourne FALSE. Le FAUX est mis dans votre base de données et c'est ce qui se passe dans votre base de données.

Mon conseil est le suivant: essayez plus fort lors du débogage. Testez toutes vos hypothèses, testez la valeur des variables à chaque étape, vérifiez qu'elles ont la valeur que vous attendez d'elles. Utilisez var_dump(), print_r(), echo et die(). Ou si vous voulez quelque chose de plus avancé utilisez un débogueur (je ne sais pas).

+0

alerte réussit, toutes les autres données dans le formulaire soumet bien, avant d'ajouter dans le ckeditor le formulaire travaillé parfaitement –

+0

Je ne comprends pas, le contenu dans les autres parties de l'élément de formulaire * do * finissent dans la base de données et les choses dans la zone de texte ckeditor ne le fait pas? –

+0

oui, c'est vrai, je sais que cela n'a pas beaucoup de sens, mais comme je l'ai mentionné je suis un nouveau programmeur et je pourrais manquer quelque chose de si simple ... –