从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>");

}

添加一些过滤器,以您的变量

  1. 对网址进行解码,因为您正在使用$_GET,这很重要以防您的浏览器在发布变量时对其进行编码。
  2. 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

回到顶部