我正在构建一个小型 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 没有任何 catch
或 finally
– 这是行不通的。最有可能的是,您的服务器被配置为不输出任何错误,因此它会默默地终止。
其他一些说明:
正如评论中所指出的,请使用 PDO 或 MySQLi 而不是已弃用的 MySQL 类。
谨防 SQL 注入(inject)并始终正确清理,没有任何借口。 (下面的 PDO 代码使用
prepare
并处理此问题。)访问以字符串为键的数组时使用引号:
$_POST['fName']
或$row["lName"]
,而不是$row[lName]
。通过在文件顶部添加
error_reporting(E_ALL)
来输出开发页面时的所有错误。请注意,服务器设置可能仍会抑制错误输出,但这通常会处理所有问题。在大量代码中使用
switch
语句绝不是一个好主意;您希望保留所有代码的轻量级,或者切换到if
、else if
和else
的组合。
说得够多了。这是我对您的页面的编辑,使用 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/