次のajaxコールを実行しているときに、id removeAttachmentおよびdata属性 "data-recordid"のボタンをクリックすると、スクリプトはそれに応じてPHPスクリプトを実行します。エラーコード500で応答します。これにより、ajax呼び出しが終了しません。PHPのajaxコールが実行されますが、返されます。
JS
$('#removeAttachment').on("click", function(e){
e.preventDefault();
var recordid = $(this).data('recordid');
if(confirm("Weet je zeker dat je deze bijlage wilt verwijderen?")){
$.ajax({
type: 'POST',
url: ('/functions/maintenance_functions.php?action=removeAttachment'),
data: {recordId: recordid},
cache: false,
success: function(data,status) {
$('#currentAttachment').hide();
$('#record_table').bootstrapTable('refresh');
}
})
}
});
PHP - (!と問題なく動作している)は、PHPスクリプトは他のAjaxのクエリによって呼び出される様々な "行動" が含まれていることに注意してください
if($action=="removeAttachment" && isset($_POST['recordId']) && get_maintequipmentrecord_info($_POST['recordId'],"equipment_id")==$_SESSION['active_maint_equipment'] && can_super_access($page)==true){
$attachment = get_maintequipmentrecord_info($_POST['recordId'],"attachment");
$attachment_file = $_SERVER['DOCUMENT_ROOT']."/_files/maintenance/attachments/".$attachment;
if($attachment!='' && file_exists($attachment_file)) {
unlink($attachment_file);
}
$stmt = $connect->prepare("UPDATE maintenance_records SET attachment=NULL WHERE record_id=?");
$stmt->bind_param("si", $_POST['recordID']);
$stmt->execute();
$stmt->close();
}
残念ながら、PHPスクリプトとそれに付随する関数が適切に実行されているため、実際に問題が見つかりませんでした(ファイルがサーバーから削除され、データベースフィールドが設定されていますNULLに設定します。 誰か手掛かりですか?ありがとう!
編集12/9/17 JSをデータ部分で更新しました。また、SQLインジェクションを防ぐために、MySQLにデータを挿入するためのPHPコードを更新しました。それについてのコメントのために多くのありがとう!それでも、スクリプトがエラー500 を返しますが、PHPのログには、次のことを示しています
[12-9月 - 2017年21時04分45秒ヨーロッパ/ベルリン] PHPの警告:> mysqli_stmt :: bind_param():型定義文字列の要素数>> /アプリケーション/MAMP/htdocs/functions/maintenance_functions.phpオンライン$ [12-Sep-2017 21:04:45ヨーロッパ/ベルリン]のバインド変数の数と一致しませんスタックトレース: [12-Sep-2017 21:04:45ヨーロッパ/ベルリン] PHP 1. {main}()> /アプリケーション/MAMP/htdocs/functions/maintenance_functions.php:0 [12-Sep-2017 21 :04:45ヨーロッパ/ベルリン] PHP 2. mysqli_stmt-> bind_param()> /アプリケーション/MAMP/htdocs/functions/maintenance_functions.php:104
まだファイルはサーバーから削除されているので、コードの一部を実行することができます。しかし、値はデータベースから削除されませんが、私はSQLクエリで何が間違っているか見ることはできません。 参考までに、アプリケーションはローカルのWebサーバー(nginx + mysql)上で実行されていますが、これは常にインターネットから切断されます。
詳細については、Webサーバーのエラーログを参照してください。 –
[Little Bobby](http://bobby-tables.com/)によると*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-injection-in-php)*** [prepared](http://en.wikipedia。org/wiki/Prepared_statement)のステートメント([MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php))を参照してください。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –
いくつかあります - ファイル、不正な形式のSQLクエリなどを削除できません – cstruter