javascript - 添加和检索到 mysql

标签 javascript php jquery mysql

我正在构建一个小型 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/

相关文章:

javascript - 单击弹出窗口中的图像更改选择选项

javascript - 从数组中删除索引数组

javascript - Jquery 随机悬停在图像上,弹出图像但有些不会恢复到原始大小

javascript - 在 NodeJS 中从 URL 获取图像并通过 POST 上传到另一个

javascript - 以编程方式添加数组的对象属性

php - 发送文本而不是值

javascript - 漂亮的滚动视差效果不起作用

java - Java SHA1 与 JavaScript SHA1 的不同

php - fputcsv通知: Array to string conversion

jqueryMobile 将焦点设置在弹出窗口中的输入字段上