gpt4 book ai didi

javascript - 添加和检索到 mysql

转载 作者:行者123 更新时间:2023-11-29 12:52:12 25 4
gpt4 key购买 nike

我正在构建一个小型 php 应用程序,您可以在其中添加人员,然后在页面上查看他们。当我简单地添加时,一切顺利,但后来我开始使用开关,现在添加或检索都不起作用。我看不出我的语法有任何问题,有人能看出有什么问题吗?

php

<?php

$con = mysql_connect("hostWasHere","username","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("dbIsHere", $con);

try{

switch($_POST['action'])
{
case 'retrieve':
$show=mysql_query("Select * from test",$con);

while($row=mysql_fetch_array($show)){
echo "<li><b>$row[firstName]</b> : $row[lastName]</li>";
}
mysql_close($con);
break;

case 'new':
$sql="INSERT INTO test (firstName, lastName)
VALUES
('$_POST[fname]','$_POST[lname]')";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";

mysql_close($con);
break;
}

}




?>

使用这个的 JavaScript 是:

function saveToServer() {
alert("clicked");
$.post("api.php", {
'action': "new",
'fname': $('#fname').val(),
'lname': $('#lname').val()
},
function () {
alert("succes");
}
);

}

function getFromServer() {
console.log("in get!");
$.ajax({
type: "post",
url: "api.php",
data: "action=retrieve",
success: function (data) {
$("#comment").html(data);
console.log("success!");
}
});

}

最佳答案

您使用的 try block 没有任何 catchfinally – 这是行不通的。最有可能的是,您的服务器被配置为不输出任何错误,因此它会默默地终止。

其他一些说明:

  • 正如评论中所指出的,请使用 PDO 或 MySQLi 而不是已弃用的 MySQL 类。

  • 谨防 SQL 注入(inject)并始终正确清理,没有任何借口。 (下面的 PDO 代码使用 prepare 并处理此问题。)

  • 访问以字符串为键的数组时使用引号:$_POST['fName']$row["lName"] ,而不是 $row[lName]

  • 通过在文件顶部添加 error_reporting(E_ALL) 来输出开发页面时的所有错误。请注意,服务器设置可能仍会抑制错误输出,但这通常会处理所有问题。

  • 在大量代码中使用 switch 语句绝不是一个好主意;您希望保留所有代码的轻量级,或者切换到 ifelse ifelse 的组合。

<小时/>

说得够多了。这是我对您的页面的编辑,使用 PDO 而不是已弃用的 MySQL 系列。

<?php
error_reporting(E_ALL);

// PDO has more options to read about
// for initialization, but this should do for now
$con = new PDO("host=host;dbname=db_here", "username", "password");

if (!$con) {
die('Could not connect: !');
}

// Do some validation on $_POST before using it.
$action = '';
if(isset($_POST['action'])) {
$action = $_POST['action'];
}

if($action == 'retrieve') {
$sql = $con->execute('SELECT * FROM test');
$rows = $sql->fetchAll(PDO::FETCH_ASSOC);

foreach($rows as $row) {
echo '<li><b>'.$row['firstName'].'</b> : '.$row['lastName'].'</li>';
}
$con = null;
}
else if($action == 'new') {
$sql = $con->prepare('INSERT INTO test (firstName, lastName)
VALUES (?, ?)');

// TODO: more checks on fname and lname before accepting
if(isset($_POST['fname']) || isset($_POST['lname'])) {
$result = $sql->execute( array($_POST['fname'], $_POST['lname']) );
if(!$result) {
die('Error occured');
}
else {
echo 'Added 1 row';
}
}

$con = null;
}
else {
// TODO: Default page
}
<小时/>

PS:请永远不要相信用户输入。代码仍然相当盲目地插入 $_POST 值(只是检查它们是否至少已设置),使用 is_scalar() 进一步检查以及一些长度检查可能会很好.

我希望这能有所帮助——祝你的项目好运!

关于javascript - 添加和检索到 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24554206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com