【问题标题】:debugging PHP/MySQL调试 PHP/MySQL
【发布时间】:2012-11-06 20:30:36
【问题描述】:

我对 PHP/MySQL 非常陌生,我不知道最好的工具集或如何正确调试。

这是我正在处理的代码 sn-p。我有两个主要问题。

1:我注意到转义序列不起作用。在页面显示中忽略所有 \n。

2:我的代码没有进入 while 循环,因此没有显示结果。当我在 phpMyAdmin 上运行相同的查询时,我得到一个结果。

这是输出:

我在你的 db!echoinside 帖子中我们有一个结果表存在名称: 外帖

<?php
$mysqli = new mysqli("****", "*****", "******", "******");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo "I'm in your db!";
echo "echo";
if( $_POST["submit"] ) {
echo "inside post"; 
    if (!($stmt = $mysqli->prepare("SELECT Cust_name FROM SERVICE_TICKET WHERE Ticket_num=?"))) {
            echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
    }
    if (!$stmt->bind_param("i", $_POST['ticket'])) {
        echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
    }
    if (!$stmt->execute()) {
        echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    }
    if (!$stmt->bind_result($Cust_name)) {
        echo "Binding output parameters failed: (" . $stmt->errno . ") " . $stmt->error;
    }
    else {
        echo "We have a result";
        echo "<table><br/>";
        echo "table exists";
        printf("<br/>\n\n\n\n\nname:  %s", $Cust_name);
        while ($stmt->fetch()){
            echo "in while loop";
            echo "<tr>\n<td>".$Cust_name."</td>\n</tr>";
        }
        echo "</table>";
    }

}
echo "outside post";
?>

为表单添加html:

<head>
    <title>Bicycle Store Service Ticket</title>
    <link rel="stylesheet" type="text/css" href="web.css" />
</head>
<body>
    <h1>ACME BICYCLE SHOP</h1>
    <h3 align="center">GET IN GEAR!</h3>

    <form action="search_service.php" method="post">
    <h3>CHECK A SERVICE TICKET</h3>

    <h4>Ticket Number: <input type="text" ticket="ticket">&nbsp;&nbsp;

    <input type="submit" name="submit" value="Search">
    </form>

    <p><a href="index.html">HOME</a></p>
</body>
</html>

任何建议都会非常有帮助。

【问题讨论】:

    标签: php html mysqli


    【解决方案1】:

    问题 #1: 转义序列正在工作,但在 HTML 中换行符是“无意义的空白”,因此不会显示。您可以使用&lt;br&gt; 标签添加换行符。

    问题 #2: 看起来您的查询返回一个空结果集(没有指定编号的票证),因此第一次调用 $stmt-&gt;fetch() 返回 false。

    编辑: HTML 中带有“ticket”输入的行应如下所示:

    <h4>Ticket Number: </h4><input type="text" name="ticket">&nbsp;&nbsp;
    

    所以是name="ticket"而不是ticket="ticket"&lt;h4&gt;标签应该被关闭。

    【讨论】:

    • 这是什么意思? (没有指定号码的票)。我将如何解决这个问题?
    • 这意味着我认为(虽然我不确定)数据库表 SERVICE_TICKET 中没有行在其 Ticket_num 字段中具有 $_POST['ticket'] 的值,所以您的查询 (@ 987654330@) 不返回任何结果。这只是一个有根据的猜测,但这是我要检查的第一件事。
    • 当。所以这不是代码的问题,而是查询的问题?我在 myPHPadmin 中仔细检查了查询,它返回一个结果,但它在 php 端不起作用。啊啊啊啊。
    • 查询对我来说似乎很好,参数的值是我认为导致问题的原因。使用var_dump($_POST['ticket']); 打印ticket post 参数的值并告诉我您是否看到了奇怪的东西。
    • 这很有帮助。它返回 NULL。我也添加了html表单。我是否错误地连接它们?
    【解决方案2】:

    1:我注意到转义序列不起作用。所有的\n 在页面显示中被忽略。

    \n 不是转义字符。它是换行符(LF ala 换行符)。它在 &lt;PRE&gt; 块之外的 HTML 中被忽略,所以要么添加 &lt;PRE&gt; (但这会“杀死”标记,或者使用 &lt;br /&gt; 这意味着精确的 \n 但“在 HTML 中”。

    PS:如果不需要,请不要使用?&gt;

    【讨论】:

      猜你喜欢
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 2014-01-15
      • 2011-04-09
      • 2014-12-17
      • 2011-03-30
      • 1970-01-01
      相关资源
      最近更新 更多