从SQL中获取变量Select语句where子句来自PHP下拉选择框
我在这里有点困惑。出于某种原因,我的结果再次变得空白。我试图让用户通过输入他们的名字和姓氏来填写表格,然后从下拉列表中选择5个职位。然后,当他们提交表单时,动作PHP将从数据库中提取特定作业的信息(使用SQL select语句)并显示用户的一些结果。我遇到的问题是,对于我的拉动变量,我的结果已经空白。我已经尝试过六种不同的方式来使这个选择语句正常工作,但它不会让步。我有一个处理displayasselect函数并连接到服务器和所有的PHP(因为某些原因,我在那里粘贴代码的时候给了我麻烦)......但是,毫无疑问,无论如何都证明了所有这一切都很好。和PHP后这里是我的形式:从SQL中获取变量Select语句where子句来自PHP下拉选择框
<form class="form-inline" method="get" action="jobTitlePull.php"> <div class="form-group">
<label for="firstName">First Name: </label>
<input type="text" name = "fname" id="firstName"/>
</div>
<div class="form-group">
<label for="lastName">Last Name: </label>
<input type="text" name = "lname" id="lastName">
</div>
<div class="form-group">
<label for="jobTitle">Job Title: </label>
<?php
displayAsSelect($list);
?>
</div>
<input type="submit" class="btn btn-default"></button>
</form>
每一件事情都显得很好的形式。
我遇到的麻烦来自我的动作PHP,这里我称之为jobTitlePull.php。这里是我的代码:
<?php $serverName = "xxxxxx";
$userName = "xxxxxx";
$passWord = "xxxxxx";
$database = "xxxxxx"; // last 4 fields purposefully masked.
$firstName = $_GET["fname"];
$lastName = $_GET["lname"];
$jobTitle = $_GET["jobName"];
$conn = mysqli_connect($serverName, $userName, $passWord, $database);
if (!$conn){
die ("<p>Connection failed: ".mysqli_connect_error()."</p>");
}
$queryString = "SELECT jobName, description, posType, basePay FROM Titles WHERE jobName = '$jobTitle'";
$result = $conn->query($queryString);
if(!$result){
die ("<p>Query failed</p>");
}
$record = mysqli_fetch_assoc($result); //I think my problem MAY lie here??
$desc = $record['description']; //or maybe I'm declaring variables wrong?
$pos = $record['posType'];
$base = $record['basePay'];
echo "<h4>Hello $firstName $lastName Job Title: $jobTitle Job Description: $desc Position Type: $pos Base Pay: $base</h4>";
mysqli_close($conn);
?>
select语句中的字段都是正确的。我知道这一点,因为如果我将WHERE jobName = '$jobTitle'
更改为WHERE jobName = jobName
,它将允许我使用while语句并循环并输出数据库标题部分中所有字段的所有数据。但我只需要下拉数据。但是,当我将$jobName
与$jobTitle
(和$jobTitle
IS拉动正确的信息)相等时,它给出了回显语句中$desc
,$pos
和$ base变量的部分的空白结果。
请帮忙。
感谢
回答:
我建议你采取一些不同的方法到当前的查询,也可以考虑一些你的安全方法来你是如何处理的代码。
首先everyrhing几乎保持不变:
$serverName = "xxxxxx"; $userName = "xxxxxx";
$passWord = "xxxxxx";
$database = "xxxxxx"; // last 4 fields purposefully masked.
更改为面向对象方法的连接,当你正在处理准备Statemtns它会更容易
$conn = new mysqli($serverName, $userName, $passWord, $database); if (!$mysqli->connect_error){
die ("<p>Connection failed: ". $mysqli->connect_error() ."</p>");
}
添加一些过滤器,以您的变量
- 对网址进行解码,因为您正在使用
$_GET
,这很重要以防您的浏览器在发布变量时对其进行编码。 htmlentities
将确保没有html标签并防止代码被运行。
这将是这样的:
$firstName = urldecode(htmlentities($_GET["fname"])); $lastName = urldecode(htmlentities($_GET["lname"]));
$jobTitle = urldecode(htmlentities($_GET["jobName"]));
现在让我们看看一些重要的变化:
// let's start changing your query here // use prepared statements
$queryString = "SELECT jobName, description, posType, basePay FROM Titles WHERE jobName = ?";
然后,你必须准备查询
if($stmt = $mysqli->prepare($queryString)) { //bind the parameter of `jobName`
$stmt->bind_param('s', $jobName);
// execute the query
$stmt->execute();
// get all of the results
$results = $stmt->get_result();
// fetch the results in an associative array
$row = $result->fetch_assoc();
// close stmt connection
$stmt->close();
} else {
$error = array(
'is_error' => true,
'error' => 'There was a problem preparing the SQL'
);
print_r($error);
}
现在你有所有的$row
数组中的记录都可以用它来做你需要的。您可以通过打印整个阵列确保数据在那里:
print_r($row);
干杯!
以上是 从SQL中获取变量Select语句where子句来自PHP下拉选择框 的全部内容, 来源链接: utcz.com/qa/259394.html