使用JavaScript和PHP连接phpMyAdmin上的数据库

3
我正在尝试用HTML/JavaScript制作一个绘图应用程序,我想将文件保存到MySQL/phpMyAdmin中。我的问题是连接到我设置的数据库。
用户在画布上绘制,点击保存按钮后,我会从我的JavaScript文件发送线条(保存在数组中)和用户名到一个PHP文件,该文件将信息发送到数据库。我已经尝试在网上寻找解决方案,但似乎找不到任何有用的信息。可能就在我的眼前,但我从未尝试过编写JavaScript和PHP。
为了确保没有混淆:我无法弄清楚如何从我的JavaScript文件发送数据到我的PHP文件并更新数据库。
以下是我目前的代码:
HTML:
<button id="saveimage" onclick="saveImage()">Save image</button>

Javascript:

function saveImage()
{
    var position = JSON.stringify(allMousePos);
    author = prompt("Please type your name");

    $.ajax({
        type: 'post',
        url: 'https://localhost/folder/database.php',
        data: {author: author, position: position},
        success: function( data ) {
        console.log( data );
        }
    });
}

PHP:

$dbhost = 'localhost';
$dbuser = 'User';
$dbpass = 'pass';

$conn = mysql_connect($dbhost, $dbuser, $dbpass);

if (!$conn)
{
    die('Could not connect: ' . mysql_error());
}

if (!get_magic_quotes_gpc())
{
    $author = addslashes($_POST['author']);
    $mousepositions = addslashes($_POST['position']);
} else
{
    $author = $_POST['name'];
    $mousepositions = $_POST['position'];
}

var_dump($author);

$sql = "INSERT INTO Images (Author, Image) VALUES ('$author', '$mousepositions')";

mysql_select_db('db_to_use');
$retval = mysql_query($sql, $conn);

if (!$retval)
{
    die('Could not enter data: ' . mysql_error());
}

echo "Entered data successfully\n";
mysql_close($conn);

我在Chrome或Firefox中运行此代码时,控制台没有任何输出,并且数据库中也没有任何内容。
如果您需要更多信息,请告诉我。该数据库仅有3个字段:自动递增的ID、作者和职位。

为什么不在IDE中调试?你有检查过日志吗?同时,在行之间打印一些消息,看看是否显示。这样你就会知道哪里出错了。 - undefined
1
我不知道你是从哪里学到这样的编码方式的,请停止。这种做法基于非常过时的实践,充满了毫无意义的模仿代码,并且使用addslashes是非常危险的不安全的。mysql_query是一个过时的接口,在新应用程序中不应该使用,并且将在未来版本的PHP中被删除。PDO并不难学。像PHP The Right Way这样的指南可以解释最佳实践。 - undefined
我不确定在firebug中哪里可以找到响应?如果我点击“POST localhost/folder/database.php [0ms]”这一行,会打开一个新窗口,但是不确定在这里要查找什么..? - undefined
@tadman 很酷,谢谢。正如你所读的,我是新手PHP和JavaScript。只是addslashes和mysql(到mysqli)不好吗? - undefined
如果你从头开始学习编程,我强烈建议使用一个像Laravel这样的开发框架,为自己提供一个基础来构建。框架作为如何组织代码的示例,定义规范以保持代码有序,并且通常具有大量社区代码和插件,您可以轻松地使用它们而不需要花费太多时间。从头编写代码非常耗时且难以维护,最好避免。 - undefined
显示剩余3条评论
2个回答

0
不要忘记解码您的数据(之前由JSON.stringify编码)。
在尝试处理数据库之前,尝试添加json_decode()并使用var_dump()显示所有变量。
希望这有所帮助。

我按照Steve的说法做了,现在控制台输出了一些内容。Chrome显示“POST https://localhost/folder/database.php net::ERR_INSECURE_RESPONSE”,而Firefox则显示“POST https://localhost/folder/database.php [0ms]”。我也按照你的说法做了,但var_dump似乎没有输出任何内容。 - undefined
哦,真的吗...你试过用"http"代替"https"了吗? - undefined

0
根据我的评论,您的函数中有一个不必要的嵌套点击处理程序,因此请将其删除。另外,您正在尝试建立安全连接,但(可能)没有在您的计算机上安装ssl,因此您需要建立常规连接(http而不是https):
function saveImage()
{
    var position = JSON.stringify(allMousePos);
    author = prompt("Please type your name");

    $.ajax({
        type: 'post',
        url: 'http://localhost/folder/database.php', //<--Note http
        data: {author: author, position: position},
        success: function( data ) {
        console.log( data );
        }
    });
}

是的,我按照你说的更新了我的代码。在Firefox中,从http更改为https似乎可以正常工作,因为它现在显示“POST http://localhost/folder/database.php [HTTP/1.1 200 OK 3ms]”,但数据库中没有任何内容。使用相同的更改,在Chrome中它会显示“XMLHttpRequest无法加载http://localhost/folder/database.php。请求的资源上不存在'Access-Control-Allow-Origin'标头。因此,不允许来自'null'的访问。” - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接