【问题标题】:Matching user input with mysql database and giving different results depending on user input将用户输入与mysql数据库匹配并根据用户输入给出不同的结果
【发布时间】:2017-08-15 04:13:39
【问题描述】:

我有这个表单页面

<!DOCTYPE html>
<html>
    <head>
        <title>Navigation</title>
    </head>

<body>

<form name="form" method="POST" action="capstone.php">
    <fieldset>
        <p>Where are you trying to go? </p>
        <input type="roominput" name="mapinput" id="mapinput">
<br />
<br />
<input type="submit" name="submit" value="Submit">
</fieldset>
</form>
</body>
</html>

我有这个 php 代码,它将表单页面中的用户输入与 sql 数据库相匹配,并在房间是否存在时回显。

如何更改此代码以匹配来自表单页面的用户输入与数据库并根据来自表单的用户输入发布不同的图像?

 <?php
$conn=mysqli_connect("localhost","xxx","xxx","xxx");
if (mysqli_connect_errno())
{
echo "Connect failed: " . mysqli_connect_error();
exit();
}

if (isset($_POST['mapinput']))
{
 $map = $_POST['mapinput'];
 $query = "SELECT * FROM `Rooms` WHERE `Room Number` ='$map'";
 $result = mysqli_query($conn,$query); 

     if (mysqli_num_rows($result))
        {
           echo 'Room already exists';
        } 

else 
{
echo 'Room does not exist, please try again.';
}

}

mysqli_close($conn);

?>

【问题讨论】:

  • echo '&lt;img src=""&gt;'?
  • if (mysqli_num_rows($result) &gt; 0) 先改变这个看看你是否得到任何行回来
  • 我有多个图像需要根据用户从搜索表单中的输入显示
  • 然后在 if (mysqli_num_rows($result) &gt; 0) 之后创建一个变量 $data = mysqli_fetch_array($result); 并使用 foreachwhile 循环显示来自 $data 的结果
  • @Mario 我在实施您告诉我的更改时遇到问题。你能帮我对它的外观进行硬编码吗?

标签: php mysql database match


【解决方案1】:

在这里,我可以给你这样的答案,因为我不知道数据库表列的名称。

Mysqli:capstone.php

<?php

$conn = mysqli_connect("localhost","xxx","xxx","xxx");

if (isset($_POST['submit']))
{
    if (isset($_POST['mapinput']))
    {
        $map = mysqli_real_escape_string($conn, $_POST['mapinput']);

        $query = "SELECT * FROM Rooms WHERE Room Number = '$map'";
        $result = mysqli_query($conn,$query); 

        // check if query returns any result
        if (mysqli_num_rows($result) > 0)
        {
            $data = mysqli_fetch_array($result);

            // loop through yours result displaying data u want
            // and lets say u have image path stored in database
            foreach ($data as $dat)
            {
                echo $dat['column_name'] . ' <img src="'.$dat['image_url'].'"><br />';
            }
        }
        else
        {
            echo 'No results found.';
        } 
    }
    else 
    {
        echo 'Please enter room name.';
    }
}

mysqli_close($conn);

?>

表格:

<form method="POST" action="capstone.php">
<fieldset>
    <p>Where are you trying to go? </p>
    <input type="text" name="mapinput" id="mapinput">
    <input type="submit" name="submit" value="Submit">
</fieldset>
</form>

【讨论】:

  • 图像未存储在数据库中。它们就在 /var/www/html 文件夹中。他们应该在数据库中吗?另外,假设用户在表单中输入“书店”并将其与数据库匹配,您如何提出自己的个人形象?例如:书店有自己的图片,美食广场有自己的图片等。但应该只在用户输入房间并与数据库匹配时显示。
  • 为此,当用户上传图像以将图像路径存储到数据库(如 image_folder/user_image.jpg )时最好这样,这样您以后就可以使用它,就像我在这段代码中给你的例子一样,它将是 @ 987654323@ 这是一个最好的解决方案。如果您已经上传了图片,您将无法知道它来自哪个用户。
  • 如果它的图片是书店的图片,而你只有一张图片,你可以在foreach循环中使用它,只需添加if语句if ($dat['column_name'] == 'bookstore') echo '&lt;img src="images/bookstore.jpg"&gt;'
  • 刚收到一个空白页,好像卡住了什么的。
  • 将此添加到脚本顶部 &lt;?php 标签 error_reporting(1); ini_set('error_reporting', E_ALL);
【解决方案2】:

type="roominput" 不是有效的输入类型。

如果您打算使用整数,则必须是 "text""number"。后者是 HTML5 类型。

参考:

您的代码也对 SQL 注入开放,请使用准备好的语句:

注意:如果输入是整数,那么使用$map = (int)$_POST['mapinput']; 是很好的选择。

但是,您应该首先检查它是否为整数。有很多方法可以检查这一点,仅举几例:

“如何更改此代码以匹配来自表单页面的用户输入与数据库并根据来自表单的用户输入发布不同的图像?”

您可以使用whileforeach 循环成功查询结果。

然后,回显您要显示的图像。图像的来源取决于它的位置,无论是来自文件夹还是数据库中的 BLOB;那部分是未知的,完全是两种不同的方法。

如果来自服务器上保存的文件:

<img src="/path/to/images/image_x.jpg">

或使用来自while 循环的$image = $row['image_in_column'];

<img src="/path/to/images/$image">

作为一个 BLOB:

更多示例:

【讨论】:

    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2013-07-19
    • 2016-12-09
    • 2011-11-08
    相关资源
    最近更新 更多