【问题标题】:Using select for GET variables对 GET 变量使用 select
【发布时间】:2013-11-25 17:04:06
【问题描述】:

我已将变量值转移到另一个页面,但现在我正在尝试显示与该值相关的数据库内容。

工作流程:

  1. 有一个表格,我输入了一个新公司。我进入了Company1。它在公司数据库中。
  2. 还有另一种形式,我在选项标签中列出了所有记录的公司。在这个表格中,我记录了公司的员工信息,包括选择的公司选项。
  3. 有一个页面列出了所有记录的公司。每一个都有一个链接(company.php?name=$companyName)。
  4. 公司名称通过 GET 传递到另一个页面。
  5. 这个其他页面名为“company.php”,需要显示公司信息(数据库中的其他字段)。
  6. 它还必须显示其他表记录,例如“员工”。它必须列出所有具有相同公司名称、通过 GET 传递的员工。

问题是:如何进行第 5 步和第 6 步?我尝试使用此选择,但没有用:

$query = mysql_query("SELECT employeeName FROM employeeForm  WHERE companyName='$employeeName'") or die(mysql_error());

对此我真的很难说清楚,如果不能理解,我很抱歉。 '已经解决这个问题几个小时了。

感谢您的帮助!

编辑:使用的方法:

include("connect.php");
$companyName=$_GET['companyName'];
$result = mysql_query("SELECT * FROM employeeList WHERE company = '$companyName'");

while($result = mysql_fetch_array($query))
{
echo    '<div class="form">'.$result['employeeName'].'</div>';
}

【问题讨论】:

  • 鉴于您命名事物的方式,您真的认为您的数据库中有companyName = 'Fred Smith' 吗?不应该更像companyName = 'Acme Inc.'
  • 为什么不用companyName = '$employeeName'而不是companyName = '$comopanyName'
  • 小心!这段代码可以进行 SQL 注入了。
  • 我不明白这有什么帮助。这不是它在主代码中的命名方式,它是为了简化。 @ExplosionPills 根据公司名称显示员工姓名。但它显然很乱......
  • @EdMarty 是的,我知道这一点!我只是试图简化这些行,我正在按照其他一些用户的建议使用 mysqli。谢谢!

标签: php mysql sql variables get


【解决方案1】:

回答:

你的代码:

         while($result = mysql_fetch_array($query))
         {
      echo    '<div class="form">'.$result['employeeName'].'</div>';
        }

应该是:

        while($res = mysql_fetch_array($result)) //changed to the name of the variable that stores the query  (can't store the array in a variable named after the query so i've changed it to $res...)
     {
       echo    '<div class="form">'.$res['employeeName'].'</div>';
       }

旧: 您是否正在检索查询结果?要只返回一个结果,请使用 mysql_fetch_assoc() 函数,而要返回一整行(或更多变量),请使用 mysql_fetch_array()。

例子:

     $test = mysql_fetch_assoc($query);

     $array = mysql_fetch_array($query); 

附言。要选择一个数组,请使用类似于以下的语法:

    "SELECT * FROM table WHERE var = condition"

PP。这是从 php.net 获取的:

 This extension is deprecated as of PHP 5.5.0, and is not recommended for writing new code as it will be removed in the future. Instead, either the mysqli or PDO_MySQL extension should be used. See also the MySQL API Overview for further help while choosing a MySQL API. 

编辑:

你的代码:

   $query = mysql_query("SELECT employeeName FROM employeeForm  WHERE companyName='$employeeName'") or die(mysql_error());

您将变量视为文本(变量名而不是内容:))...使用:

       WHERE '".$employeeName."' 

将变量解析为查询...(注意双引号)

另外...要访问查询结果,请使用以下内容:

    $array['COLUMN NAME'];

..假设您使用: $array = mysql_fetch_array($query);

【讨论】:

  • 是的,我正在使用类似的东西:while($array = mysql_fetch_array($query)) 循环行内容。但我无法让它工作。
  • 您是否收到任何错误或问题是内容未写在页面上?
  • 能否请您发布有关整个周期的代码部分?
  • 喜欢这个? $result = mysql_query("SELECT * FROM employeeList WHERE companyName = '".$employeeName" ' ");
  • 这是一回事...查看前 3 行(在 ANSWER 标题下)
【解决方案2】:

我强烈建议您使用 PDO,这是使用 PDO 的示例。

<?php

$dsn      = 'mysql:dbname=so;host=localhost';
$user     = 'root';
$password = '';


// try to connect.
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
    exit(1);
}

// the sql which gets all employees for this company.
$getEmployeesSQL = '';
$getEmployeesSQL .= ' SELECT c.name AS company_name, e.name AS employee_name, e.salary, c.location ';
$getEmployeesSQL .= ' FROM company c';
$getEmployeesSQL .= ' LEFT JOIN employee e';
$getEmployeesSQL .= ' ON c.id = e.company_id';
$getEmployeesSQL .= ' WHERE c.name = :cname';

// sql to get company data.
$companyDataSQL = "SELECT * FROM company WHERE name = :cname";

// prepare the sql.
$stmtOne = $dbh->prepare($getEmployeesSQL);
$stmtTwo = $dbh->prepare($companyDataSQL);

// execute
$stmtOne->execute(array(':cname' => $_GET['company']));
$stmtTwo->execute(array(':cname' => $_GET['company']));

// print results.
$employees   = $stmtOne->fetchAll(PDO::FETCH_ASSOC);
$companyData = $stmtTwo->fetchAll(PDO::FETCH_ASSOC);

/* * ****************************************** */
/*       Iterate and print HTML table.          */
/* * ****************************************** */


$html = '<table border="1">';
foreach ($companyData as $company) {
    foreach ($company as $field => $value) {
        $html.= "<tr><td>$field</td><td>$value</td></tr>";
    }
}
$html . '</table>';
echo $html;

$html = '<table border="1">';
foreach ($employees as $row) {
    $html.= '<tr><td>' . implode('</td><td>', array_values($row)) . '</td></tr>';
}
$html . '</table>';
echo $html;

这个 sn-p 的作用是将公司数据打印到一个表中,然后使用公司名称获取员工数据。

我使用的表结构如下:

CREATE TABLE `company` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `location` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE `employee` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `salary` bigint(12) DEFAULT NULL,
  `company_id` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_company` (`company_id`),
  CONSTRAINT `fk_company` FOREIGN KEY (`company_id`) REFERENCES `company` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

这将返回数据如下:(不漂亮,但现在必须这样做。)

【讨论】:

  • 我现在就试试。感谢您的关注。
  • 不客气,如果你刚开始接触PHP,请花点时间阅读phptherightway.com,它会对你有很大帮助。
【解决方案3】:

据我了解,您有两张表 - 一张用于公司,一张用于员工,显然每个公司都有多名员工。如果您要做的是为给定公司生成员工列表,则需要在 SQL 查询中使用公司名称(假设它是唯一的)。

$companyName = $_GET('companyName');
$result = mysql_query("SELECT * FROM employeeList WHERE company = '$companyName'");

这将为您提供与该特定公司相关的员工列表(及其所有信息)。

编辑:

要遍历查询并打印出结果,您可以使用以下内容(以及上面已经介绍的内容):

echo "<table><tbody>";
while ($row = mysql_fetch_assoc($result)) {
echo "<tr><td>" . $row['employee_first_name'] . "&nbsp;" . $row['employee_last_name'] .  "</td></tr>";
}
echo "</tbody></table>

【讨论】:

  • 这正是我所需要的,但我无法让它发挥作用。如何循环结果?我使用了类似“while($result = mysql_fetch_array($result))”但返回错误。
  • "while($result = mysql_fetch_array($result))"- Anna 你需要获取查询的结果而不是变量名。使用:while($result = mysql_fetch_array($query))
  • 警告:mysql_fetch_array() 期望参数 1 是资源,在第 52 行的 **company.php 中给出 null 我用代码编辑了帖子。
  • 我刚刚更新了我的答案以包含打印结果的代码。我没有意识到这就是你被卡住的地方。
  • @jackel414,非常感谢您的关注!谢谢你的时间,我终于解决了这个问题。
猜你喜欢
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多