无论我做什么,我的PHP代码都不会运行

时间:2015-06-10 08:10:36

标签: php mysql

美好的一天人们,
几天前,我开始学习php,现在我打算用mysql自学数据库查询。
但是,我目前的代码不会处理任何事情。

它应该从index.html获取文本输入,将其传递给a.php并让a.php在数据库(电话簿)中查找(name /)输入字符串,然后输出表中的匹配行。

它由两部分组成; index.html就是以下内容:

<form action="a.php">
<input type="text" name="q">
<input type="submit">
</form>

和应该处理输入数据的a.php:

<?php
    echo $_GET['q'];
    $such = $_GET['q'];
    $mysqliu = new mysqli("HOST", "User", "Password", "Database");
    $sql="Select * from LIST where name like '%$such%'";
    $result = mysqli_query($mysqliu,$sql);
    if($result = $mysqliu->query($sql)) {
    echo "<table><tr><th>Kennummer</th><th>Name</th><th>Strasse</th><th>PLZ</th><th>Telefon</th></tr>";
        while($row = $result->fetch_array() ) {
            echo "<tr>";
            echo "<td>" , "$row[0]" , "</td>";
            echo "<td>" , "$row[1]" , "</td>";
            echo "<td>" , "$row[2]" , "</td>";
            echo "<td>" , "$row[3]" , "</td>";
            echo "<td>" , "$row[4]" , "</td>";
            echo "</tr>";
        }
    }
    $result->close();
    echo "</table>";
    else {
        echo"Nope"
    }
    $mysqliu->close();
?>

我尽可能多地试着看看它在哪里打破了,似乎只要我想做点什么就可以了。&#34; q&#34; (来自index.html的查询),它会中断 上面的代码不包含SQL连接数据,但是我的代码中存在这些数据 这个问题与PHP服务器或服务器端无关,所以我确定我做错了。
我可以在a.php中回显变量q,所以它已经过去了,但无论我在那之后做什么,没有任何反应,我得到一个空白页面。 请问专家能帮帮我吗?

解决:这是;在最后错过了。 感谢大家的投入。

此致〜

5 个答案:

答案 0 :(得分:1)

尝试在表单标记中添加方法,如GET或POST。设置q字段的默认值。还要为提交类型设置一个名称,并将整个$ _GET或$ _POST数组转储到php文件中。

答案 1 :(得分:1)

首先,您需要使用error_reporting(-1);在页面中启用错误报告。当您收到错误但未显示时,因为错误报告已关闭。

其次,您的代码欢迎SQL注入所以最好首先了解如何在数据库查询后避免SQL注入。

第三,您需要检查PHP上是否安装了MySQLi扩展名。使用var_dump(function_exists('mysqli_connect'));,然后检查输出。

第四,$mysqli->fetch_array();返回奇怪的结果,有时是因为旧的PHP版本因此可能是错误的原因,请检查一次。

第五,我相信你的if else声明有错误。 else语句应在}语句的if之后开始。

我可以在您从错误日志中显示问题中的确切错误后编辑我的答案,同时您可以查看这些错误。

答案 2 :(得分:1)

我不会给你确切的答案,我会让你弄清楚......

  1. 使用keyDownTime
  2. 检查您的delta声明,看起来是否正确?

答案 3 :(得分:1)

注意:

  • 您的method
  • 中没有<form>属性
  • 如果用户只是输入了他们的浏览器a.php怎么办?您应该验证页面,以便用户不能只访问此页面
  • 你的桌子真的是LIST吗?对此区分大小写。
  • 您的查询仍然容易SQL injections。您应该使用PHP的mysqli_real_escape_string()扩展名,或者更好地使用mysqli_* prepared statement

您的表单应如下所示:

<form action="a.php" method="GET">

并清理传递数据的值:

$such = mysqli_real_escape_string($mysqliu,$_GET["q"]);

如果您对准备好的陈述感到好奇,可以试试这个:

$such = "%".$_GET["q"]."%";
$mysqliu = new mysqli("HOST", "User", "Password", "Database"); /* REPLACE NECESSARY DATA */

if($stmt = $mysqliu->prepare("SELECT kennummer,name,strasse,plz,telefon FROM LIST WHERE name LIKE ?")){ /* REPLACE NECESSARY COLUMN NAME */
  $stmt->bind_param("s",$such); /* BIND PARAMETER TO THE QUERY */
  $stmt->execute(); /* EXECUTE QUERY */
  $stmt->bind_result($kennummer,$name,$strasse,$plz,$telefon); /* BIND THE RESULT TO VARIABLE */
  ?>
    <table>
      <tr>
        <th>Kennummer</th>
        <th>Name</th>
        <th>Strasse</th>
        <th>PLZ</th>
        <th>Telefon</th>
      </tr>
  <?php
  while($stmt->fetch()){ /* LOOP THE RESULT */
    ?>
      <tr>
        <td><?php echo $kennummer; ?></td>
        <td><?php echo $name; ?></td>
        <td><?php echo $strasse; ?></td>
        <td><?php echo $plz; ?></td>
        <td><?php echo $telefon; ?></td>
      </tr>
    <?php
  }
  ?>
    </table>
  <?php
  $stmt->close();
}

答案 4 :(得分:1)

解决了:最后,;失踪了。感谢大家的投入。