PHP/MySqlの新機能 - 一部の文字列を格納するデータベースを作成しようとしています。ユーザーに挿入を知らせる方法はありますか...更新エントリを複製しますか?
すべて正常に動作します - 私のフォームには3つのユーザーエントリがあります:class
、keywords
、usrstring
これは問題なくデータベースに追加されています。しかし
2つの問題、:
#1)これは私が使用しているMySQLの機能である:class
とkeywords
の両方が行と一致した場合にのみ
$sql = "INSERT INTO `reporting` (class, keywords, usrtext) VALUES (\"$class\", \"$keywords\", \"$usrtext\") ON DUPLICATE KEY UPDATE `usrtext` = \"$usrtext\" ";
をしかし、私はduplicate key update
をしたいです。 ORインスタンスではなく、class
またはkeywords
のいずれかが一致すると、行が更新されます。これはANDインスタンスを実現する正しい構文ですか?
#2、私は次のようにバックメインインデックスページへの再指示Ajaxのポストを介してフォームデータを送信しています:
$("#formdata").submit(function(e) {
var url = "posted.php"; // the script where you handle the form input.
e.preventDefault(); // avoid to execute the actual submit of the form.
$.ajax({
type: "POST",
url: url,
data: $("#formdata").serialize(), // serializes the form's elements.
success: function(data)
{
window.location.href = 'index.php?=successfullyadded';
alert(data) ;
$("#formdata")[0].reset(); // reset form and clear all hidden inputs
}
});
});
私はアラートを作成するプロセスを中断することができますどのように/元のフォームページにプロンプトを表示して、ユーザーに重複したエントリが通知され、キャンセルするエントリを更新し続けるオプションが与えられます(入力が完了する前にclass
またはkeywords
を変更する機会を与えます)。
** WARNING **:あなただけのPHPを学習している場合は、http://php.net/manual/en/function.mysql-query([ 'mysql_query']時代遅れを習得しないでください.php)インターフェイス。それはひどいので、PHP 7では削除されました。[PDOは学ぶのが難しくありません](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo- for database-access /)、[PHP The Right Way](http://www.phptherightway.com/)のようなガイドはベストプラクティスの説明に役立ちます。 **あなたのユーザーパラメータが[正しくエスケープされている](http://bobby-tables.com/php)か、重大な[SQLインジェクションバグ](http://bobby-tables.com/ )。 – tadman
複合キー(クラス、キーワード)はありますか? (もちろん正規化された環境では、キーワードと呼ばれる列はありません) – Strawberry
@tadman - 警告と参考に感謝します。私は本当に 'mysqli'を使用しています。文字のエスケープ入力を適切にスクラブすることについて読んでいます(多くの人が文字エスケープでは不十分であることを暗示しているようです)。これまでは、物事を安全に保つためにxampp localhost環境でしか練習していませんでした。 – user1837608