添加和检索到 mysql

发布时间: 2017/4/9 21:19:37
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我很小的 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:

你使用的 try 块没有任何 catchfinally — — 这不起作用。最有可能,您的服务器配置为不输出任何的错误,所以它默默地死。

几个其他备注︰

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

  • 小心的 SQL 注入和总是消毒正确,没有任何借口。(我的代码下面 PDO 用 prepare 和照顾这。)

  • 你正在访问数组与字符串作为键时使用引号︰ $_POST['fName']$row["lName"] ,而不是 $row[lName]

  • 输出所有的错误,而你正在你的页面通过添加 error_reporting(E_ALL) 顶部的您的文件。请注意,服务器设置仍然可能抑制错误输出,但这一般照顾一切。

  • 使用 switch 语句与大量的代码永远不会是一个好主意; 你想要保持所有代码那里相当轻量或切换到的组合 ifelse ifelse


说得够多。这里是我为您的页面,而不过时的 MySQL 家庭使用 PDO 的编辑。

<?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() 和一些长度检查可能会好。

我希望这能帮助 — — 好运与您的项目 !

官方微信
官方QQ群
31647020