У меня есть небольшое веб-приложение, где вы можете рисовать на холсте и оставлять комментарий (используя форму submit). Теперь мне просто нужна помощь в отправке этих данных в базу данных MySQL.
Это форма, в которой пользователь вводит свой комментарий. Когда они нажимают кнопку "Опубликовать", запускается функция "boo".
<form action="testSave.php" method="post" onsubmit="boo();">
<div id="canvas-bottom">
<input type="text" id="comment-box" name="comment" placeholder="Comment"/>
<input type="submit" id="post-button" name="post" value="Post"/>
</div>
</form>
Функция "boo" получает данные холста и отправляет их в другой файл PHP под названием "testSave.php",
<script>
function boo(){
var canvasData = drawingCanvas.toDataURL();
$.ajax({
type: "POST",
url: "testSave.php",
data: {
canvasData: canvasData
}
})
}
</script>
Это файл testSave.php
<?php
if(isset($_POST['canvasData'], $_POST['post'])) {
$img = $_POST['canvasData'];
$filteredData = substr($img, strpos($img, ",")+1);
$comment = strip_tags($_POST['comment']);
$comment = mysqli_real_escape_string($db, $comment);
$sql = "INSERT into posts (sketch, comment) VALUES ('$filteredData', '$comment')";
mysqli_query($db, $sql);
header("Location: index.php");
}
?>
Когда это выполняется, он отправляет мне на него пустую белую веб-страницу (/testSave.php), не работает.
Таким образом, я пытаюсь отправить эти данные в таблицу базы данных mysql в разделе "эскиз" (где будут отображаться данные холста) и "комментарий" (куда будут поступать входные данные) в одной строке.
Если бы кто-нибудь мог мне помочь, я бы очень признателен.
Я не вижу, что вы определили $db
что может быть проблемой, так как ваш код не знает, куда вставлять данные. Как говорили другие, лучше всего использовать подготовленные заявления.
if(isset($_POST['canvasData']) and isset($_POST['post'])) {
$mysqlHost = "";
$mysqlUser = "";
$mysqlPassword = "";
$mysqlDatabase = "";
$db=mysqli_connect($mysqlHost, $mysqlUser, $mysqlPassword, $mysqlDatabase);
$img = $_POST['canvasData'];
$filteredData = substr($img, strpos($img, ",")+1);
$comment = strip_tags($_POST['comment']);
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$stmt = $db->prepare("INSERT into posts (sketch, comment) VALUES (?, ?)");
$stmt->bind_param("ss", $filteredData, $comment);
$stmt->execute();
$stmt->close();
$db->close();
}
?>
Поскольку вы хотите отправить с помощью ajax, ваш код должен выглядеть так:
HTML
<form action="" method="post">
<div id="canvas-bottom">
<input type="text" id="comment-box" name="comment" placeholder="Comment"/><br>
<span id="msg" style="color: green;font-style: italic;"></span> // success message
<input type="submit" id="post-button" name="post" value="Post"/>
</div>
</form>
JS
$(document).ready(function(){
$("#post-button").click(function(){
var name =$("#comment-box").val();
$.ajax({
url:'testSave.php',
method:'POST',
data:{
name:name
},
success:function(response){
$("#msg").html(response);
}
});
});
});
PHP (testSave.php)
<?php
$img = $_POST['canvasData'];
$filteredData = substr($img, strpos($img, ",")+1);
$comment = strip_tags($_POST['comment']);
$comment = mysqli_real_escape_string($db, $comment);
$sql = "INSERT into posts (sketch, comment) VALUES ('$filteredData', '$comment')";
if (mysqli_query($db, $sql)) {
echo "Inserted successfully";
} else {
echo "failed";
}
?>
mysqli
вы должны использовать параметризованные запросы иbind_param
для добавления пользовательских данных в ваш запрос. НЕ используйте ручное экранирование и интерполяцию или конкатенацию строк для достижения этой цели, потому что вы будете создавать серьезные ошибки SQL-инъекций . Случайно ушедшие данные представляют серьезный риск. Использование связанных параметров менее многословно и проще для проверки, чтобы убедиться, что вы делаете это правильно.mysqli
значительно менее многословен, что облегчает чтение и аудит кода, и его нелегко спутать с устаревшим интерфейсомmysql_query
. Прежде, чем вы слишком инвестируете в процедурный стиль, стоит переключиться. Пример:$db = new mysqli(…)
и$db->prepare("…")
Процедурный интерфейс является артефактом эпохи PHP 4, когда был представленmysqli
API, и его не следует использовать в новом коде.