【问题标题】:How would you display a sent message in PHP without redirecting through header location?如果不通过标头位置重定向,您将如何在 PHP 中显示已发送的消息?
【发布时间】:2013-02-15 13:28:08
【问题描述】:

我正在使用 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 解决此问题?
  • 使用ajax无刷新解决方案
  • 不要在新代码中使用mysql_* 函数。而且真的不要像那样从用户输入构建 SQL。

标签: php html forms jquery-mobile echo


【解决方案1】:

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

<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');
?>

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 2014-05-13
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多