添加并检索到mysql

时间:2014-07-03 12:51:21

标签: 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!");
    }
  });

}

1 个答案:

答案 0 :(得分:1)

您正在使用try块而没有任何catchfinally - 这不起作用。最有可能的是,您的服务器配置为不输出任何错误,因此它会无声地死亡。

其他一些评论:

  • 正如评论中所指出的,请使用PDO或MySQLi代替不推荐使用的MySQL类。

  • 小心SQL注入并始终正确消毒,没有任何借口。 (下面我的代码与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()并且一些长度检查可能是好的。

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