我正在尝试创建一个网站来访问SQLite数据库并检索不同用户的信息。然而,我遇到了一些问题。这是我的索引页代码。
<?php
$db = new SQLite3('people.db');
$results = $db->query('select FirstName,LastName from People');
?>
<html>
<head>
</head>
<body>
<?php
while ($row = $results->fetchArray()) {
echo '<div class="person"><p class="name"><a href="lookup.php?first=" .
urlencode($row['FirstName']) . '&last=' . urlencode($row['LastName']) . '">' .
$row['FirstName'] . ' ' . $row['LastName'] . '</a></p></div>;
?>
}
?>
</body>
</html>
和lookup.php代码:
<?php
$db = new SQLite3('people.db');
$first = urldecode($_GET['first']);
$last = urldecode($_GET['last']);
$results = $db->query('select * from People where FirstName="' . $first . '" and LastName="' . $last . '"');
$row = $results->fetchArray();
?>
<html>
<head>
</head>
<body>
<div class="person">
Name: <?php echo $row['FirstName'] ?><br/>
Last Name: <?php echo $row['LastName'] ?><br/>
Age: <?php echo $row['Age'] ?><br/>
</div>
</body>
</html>
当我点击索引页面上名字为"Denzil"、姓氏为"Ezras"的人的名字时,效果很好。lookup.php显示他的名字、姓氏和年龄。然而,当一个人的名字或姓氏中有空格时,我会遇到问题。例如,一个人的FirstName是"James",LastName是"De Jongh",lookup.php将不显示FirstName、LastName或Age。此页面的URL显示为:
http://localhost/lookup.php?first=James&last=De+Jongh
我曾尝试在PHP中使用var_export来查看$first和$last,它们似乎是有序的。当我将它们复制并粘贴到sqlite3.exe中时,它会得到正确的值。我做错了什么?
试试这个正如我从url中看到的那样,空间不是显示为%20,而是显示为+这将把任何空格转换为%20,这是url可以接受的。
$last = str_replace(' ', '%20', $last);
或者你可以简单地使用
rawurlencode($lastName);