如何在PHP中显示已发送的消息而不通过标头位置重定向


How would you display a sent message in PHP without redirecting through header location?

我正在使用JQuery mobile,它在加载外部文件时出现问题-总是显示"加载页面错误"消息。所以我不能在提交表单后使用PHP中的标题位置重定向到页面

一旦按下提交按钮,您将如何在其下方显示已发送的消息?

这是HTML:

<form method="post" id="update_beer" action="php/input_pint.php">
      <p><label for="name">Your name</label><input type="text" size="30" name="name" id="name" /></p>
      <p><label for="price">Price of a pint</label><input type="number" name="price" id="price" cols="5" /></p>
      <p><input type="submit" value="Update" name="commit" id="message_submit"/> or 
      <a class="close" href="/">Cancel</a></p>
</form>

这是将所有输入发送到我的数据库的PHP:

<?php
//input price_pint.php
$con = mysql_connect("hostname", "databasename", "password");
if (!$con) {
die("Could not connect." . mysql_error());
}
mysql_select_db("databasename", $con);
$sql="INSERT INTO price_pints (name, price)
VALUES
('$_POST[name]','$_POST[price]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
mysql_close($con);
?>

我只是不知道如何将回显消息与我的表单关联起来。

您可以使用ajax,还需要对输入进行sql转义,否则像Foster's Sam Smith's ect这样的饮料会破坏您的查询。

<script>
$("#update_beer").submit(function(e){
    $.ajax({
        type: "POST",
        url: "php/input_pint.php",
        data: $("#update_beer").serialize(),
        success: function(data){
            if(data=='true'){
                alert('Beer Added');
            }
        }
    });
    e.preventDefault();
});
</script>

还有一种更好的连接和插入数据库的方法,使用PDO:

<?php
try {
    $db = new PDO("mysql:host=127.0.0.1;dbname=databasename", 'dbuser', 'dbpassword');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch (Exception $e){
    die('Cannot connect to mySQL server.');
}
if($_SERVER['REQUEST_METHOD']=='POST'){
    if(!empty($_POST['name']) && !empty($_POST['price'])){
        $sql = 'INSERT into price_pints (`name`,`price`) VALUES (:name,:price)';
        $query = $db->prepare($sql);
        $query->bindParam(':name', $_POST['name'], PDO::PARAM_STR);
        $query->bindParam(':price', $_POST['price'], PDO::PARAM_STR);
        $query->execute();
        die('true');
    }
}
die('false');
?>

创建一个函数,该函数将把它插入数据库,并在成功的情况下返回一个标志-true,如果出现问题则返回false。然后根据该标志回显您的消息。