我一直在尝试让我的php代码显示mysql数据库中的条目。在某种意义上,我不需要手动打印表格,而是根据alogrythm打印表格,我想让它自动运行,但它不能像预期的那样工作。
我尝试过不同的设置表格的方法,但都不管用,我得到的最多的是打印表格中的一个条目,然后在后面吐出错误。
$base = $_POST["base"];
$connection = mysqli_connect("localhost","login","pass") or die("Impossible to connect to the database!");
$db = mysqli_select_db($connection, "database")or die("Impossible to download the database!");
$sql = "SELECT * FROM $base";
$mysqli_result = mysqli_query($connection, $sql);
$sql2 = "SHOW COLUMNS FROM $base";
$set1 = mysqli_query($connection, $sql2);
$colu = array();
while($db = mysqli_fetch_row($set1)){
$colu[] = $db[0]; }
$columns=implode("<br/>",$colu);
echo "<TABLE BORDER=1>";
echo "<TR><TH>$colu[0]</TH><TH>$colu[1]</TH><TH>$colu[2]</TH><TH>$colu[3]</TH><TH>$colu[4]</TH><TH>$colu[5]</TH></TR>";
while ($row = mysqli_fetch_array($set1)) {
$colu[0] = $row["echo $colu[0]"];
$colu[1] = $row["echo $colu[1]"];
$colu[2] = $row["echo $colu[2]"];
$colu[3] = $row["echo $colu[3]"];
$colu[4] = $row["echo $colu[4]"];
$colu[5] = $row["echo $colu[5]"];
echo "<TR><TD>$colu[0]</TD><TD>$colu[1]</TD><TD>$colu[2]</TD><TD>$colu[3]</TD><TD>$colu[4]</TD><TD>$colu[5]</TD></TR>";}
echo "</TABLE>";
mysqli_free_result($mysqli_result);
mysqli_close($connection); ?>
$_post[$base];部分工作,我猜问题是在while循环,因为它没有完成一次,我不知道为什么它不想工作。
2条答案
按热度按时间pgx2nnw81#
我看到你的剧本有些问题。如果要获取列作为标题和表体内容,则使用了错误的结果集。
o2gm4chl2#
你现在面临的最大问题是:
这是一个巨大的sql注入漏洞,即使他们只传递一个空字符串给它,这都是不好的。例如,这将导致查询错误,并且根据服务器上的设置和错误报告,您可能会公开相当多的信息。一个例子是堆栈跟踪可能包含db密码等。
与其直接使用用户输入,不如创建如下白名单:
这样,您只使用您知道其价值的数据。
变量重用
除此之外,您的变量名会导致一系列“代码混乱”。如果必须使用变量名的泛型,则会发生这种情况。一些例子:
最后一个也是错误的,因为行键类似于:
或者有列名的东西。因为您在下一个循环中使用这个变量(“变量混淆”),所以它将是
$row["echo $colu[0]"];
会被放回去的。所以我们假设这是正确的,没有echo
并将使用Name
作为值。游标重用
您还可以重用db游标
$set1
在上面绕了两圈。我不确定mysqli,但是pdo不允许你这么做。这可能就是第二个循环失败的原因。我认为第二个应该是$mysqli_result
. 这有点让人困惑,因为两个查询都是先循环一个然后循环另一个。而不是做一个查询,循环通过它。然后做另一个,然后循环。相反,你可以这样做:
从数据库获取表名的奖励:
希望这有道理。