1

送信するckeditorデータを収集するためにajaxを使用しています。問題は、最初のアポストロフィがデータベースに送信される前のコンテンツのみです。何が間違っているのでしょうか?

編集:

$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')";

私はこれでかなり新しいので、私に知らせるのを助けるためにあなたが見る必要がある何かが他にあるならば。

4

3 に答える 3

2

データベースに挿入する前にテキストデータをエスケープしていないようです。SQLクエリに渡す前に、データに対してこの関数を使用します。

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

編集:申し訳ありませんが、MySQLを使用していることを前提としています。

于 2010-02-03T15:04:19.917 に答える
1

Markが提案した方法とは異なり、より複雑で、間違いなく優れた方法は、ParameterizedStatementsを使用することです。

ウィキペディアから例を借りるには:

<?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();
?>

エスケープはMySQLドライバーに任せており、SQLインジェクションや偶発的なダブルエスケープなどの可能性を大幅に減らします。

これは、古いMySQL関数を使用しては不可能であることに注意してください。改善されたMySQLI関数/オブジェクト、またはPDOのようなものが必要です。

于 2010-02-03T15:14:12.733 に答える
1

私が正しく理解していれば、次のことが当てはまります。

  • CKeditorに「引き継がれる」テキストエリアがあります
  • あなたはJavascriptでそのテキストエリアのコンテンツを読んでいます
  • 収集したコンテンツをAJAXを使用してサーバーに送信します

Javascriptがテキストエリアから取得するコンテンツをalert()すると、ステップ2が成功したかどうかを確認できます。そうでない場合は、Javascriptを投稿してください。

手順2が正しければ、サーバー側に問題がある可能性があります。dbクエリをダンプして確認してください。

更新: 開発中は、すべてのエラーと通知をオンにするようにしてください。また、AJAXのように簡単に「見る」ことができない作業を行っている場合は、サーバーのエラーログに注意してください。

コード例の2行目では$DBconnectを使用し、4行目ではそれが何であるかを定義しています。mysql_real_escape_stringのPHP.netエントリでわかるように、関数がデータベースへの接続を見つけられない場合、関数はエラーを生成し、FALSEを返します。FALSEはデータベースに入れられ、それがデータベースに入ります。

あなたへの私のアドバイスは:デバッグにもっと一生懸命努力することです。すべての仮定をテストし、すべてのステップで変数の値をテストし、それらが期待する値を持っているかどうかを確認します。var_dump()、print_r()、echo、die()を使用します。または、より高度なものが必要な場合は、デバッガーを使用します(私は使用しません)。

于 2010-02-03T15:14:46.883 に答える