Нужна помощь для вставки данных HTML и холста в базу данных MySQL

0

У меня есть небольшое веб-приложение, где вы можете рисовать на холсте и оставлять комментарий (используя форму 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 в разделе "эскиз" (где будут отображаться данные холста) и "комментарий" (куда будут поступать входные данные) в одной строке.

Если бы кто-нибудь мог мне помочь, я бы очень признателен.

  • 2
    ВНИМАНИЕ : При использовании mysqli вы должны использовать параметризованные запросы и bind_param для добавления пользовательских данных в ваш запрос. НЕ используйте ручное экранирование и интерполяцию или конкатенацию строк для достижения этой цели, потому что вы будете создавать серьезные ошибки SQL-инъекций . Случайно ушедшие данные представляют серьезный риск. Использование связанных параметров менее многословно и проще для проверки, чтобы убедиться, что вы делаете это правильно.
  • 2
    Примечание. Объектно-ориентированный интерфейс к mysqli значительно менее многословен, что облегчает чтение и аудит кода, и его нелегко спутать с устаревшим интерфейсом mysql_query . Прежде, чем вы слишком инвестируете в процедурный стиль, стоит переключиться. Пример: $db = new mysqli(…) и $db->prepare("…") Процедурный интерфейс является артефактом эпохи PHP 4, когда был представлен mysqli API, и его не следует использовать в новом коде.
Показать ещё 1 комментарий
Теги:

2 ответа

0

Я не вижу, что вы определили $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();
}
?>
  • 0
    переменная $ db просто подключается к базе данных
0

Поскольку вы хотите отправить с помощью 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";
       }
    ?>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню