我正在构建一个小的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!");
}
});
}
答案 0 :(得分:1)
您正在使用try
块而没有任何catch
或finally
- 这不起作用。最有可能的是,您的服务器配置为不输出任何错误,因此它会无声地死亡。
其他一些评论:
正如评论中所指出的,请使用PDO或MySQLi代替不推荐使用的MySQL类。
小心SQL注入并始终正确消毒,没有任何借口。 (下面我的代码与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()
并且一些长度检查可能是好的。
我希望这会有所帮助 - 祝你的项目好运!