我正在构建一个包含3个简单表单的员工目录。第一个添加记录,第二个搜索记录,第三个搜索然后删除记录。我想在同一页面上显示所有记录,然后在搜索完成后,只显示那些符合搜索关键字的记录。
我已正确构建了数据库和表。第一个表单成功地将记录添加到DB。在我使搜索和删除表单正常工作之前,我正在尝试显示记录。他们没有展示。有时我可以显示我的html表,但没有任何记录出现。但是,我知道记录存在是因为我可以在MyAdmin中看到它们。
我现在收到此错误,但是当我尝试新事物时,我的错误正在改变:警告:mysql_fetch_array()期望参数1是资源,在C:\ xampp \ htdocs \ Employees.php中给出null第84行
我希望得到以下帮助: 1.帮助我理解为什么我收到此错误。 2.帮助我了解如何显示我的记录(我以前成功完成了这项工作,但任务更简单。)
我知道这段代码未完成。我正在逐件构建它并试图让每个单独的部分在我添加下一个之前起作用。谢谢!
<html>
<body>
<?php error_reporting (E_ALL ^ E_NOTICE);
$keyword = $_GET['keyword']; ?>
<?php
$con = mysql_connect("localhost", "employees", "employeepw");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("employees", $con);
mysql_query("INSERT INTO employeeinfo (firstname, lastname, phone, email, department, position)
VALUES ('$_POST[firstname]', '$_POST[lastname]', '$_POST[phone]', '$_POST[email]', '$_POST[department]', '$_POST[position]')");
mysql_query($sql,$con);
function buildQuery() {
$keyword = $_GET['keyword'];
$sql = "SELECT * from employeeinfo WHERE
(
firstname LIKE '%$keyword%'
OR
lastname LIKE '%$keyword%'
OR
phone LIKE '%$keyword%'
OR
email LIKE '%$keyword%'
OR
department LIKE '%$keyword%'
OR
position LIKE '%$keyword%'
)";
return $sql;
} ?>
<form action="Employees.php" method="post">
<fieldset>
<legend>Submit Employee Info</legend>
Firstname: <input type="text" name="firstname" />
Lastname: <input type="text" name="lastname" />
Phone: <input type="text" name="phone" />
Email: <input type="text" name="email" />
Department: <input type="text" name="department" />
Position: <input type="text" name="position" />
<input type=submit name=submit value=Submit />
</fieldset>
</form>
<form action="Employees.php" method=get>
<fieldset>
<legend>Search Employee Info</legend>
<label for="keyword">Enter Keyword</label>
<input id="keyword" name="keyword" value="<?php echo "$keyword"; ?>" />
<input type=submit name=submit value=Search />
</fieldset>
</form>
<form action="Employees.php" method=get>
<fieldset>
<legend>Delete Employee Info</legend>
<label for="keyword">Enter Keyword</label>
<input id="keyword" name="keyword" value="<?php echo "$keyword"; ?>" />
<input type=submit name=submit value=Delete />
</fieldset>
</form>
<?
function getRecords()
{
$sql = buildQuery();
$resource = mysql_query($sql);
}
while($row = mysql_fetch_array($resource)) { // The error is for this row
$results[] = $row;
}
return $results;
$records = getRecords(); {
foreach ($records as $record) {
}?>
<table>
<tbody>
<table border='1'>
<tr>
<td><?= $row['firstname']; ?></td>
<td><?= $row['lastname']; ?></td>
<td><?= $row['phone']; ?></td>
<td><?= $row['email']; ?></td>
<td><?= $row['department']; ?></td>
<td><?= $row['position']; ?></td>
<td><a href="Employees.php">Return to Search</a></td>
</tr>
<? } ?>
</tbody>
</table>
</body>
</html>
答案 0 :(得分:0)
您的mysql查询未通过,或者它正在重新调整0行 试着把这个
if(!$resource){
echo mysql_error();
echo ' <br>Query: .$sql;
}
直接在$ resource = mysql_query($ sql); 之后的语句
看看它输出了什么。此外,请确保已启用错误报告。
我昨天在你的帖子上编辑了我的答案,你可能想看一下;它可能会为您提供一些不同方法的想法。
链接在这里: Fatal error: Call to undefined function getRecords() in C:\xampp\htdocs\Employees.php on line 101
答案 1 :(得分:0)
您没有收到任何行。尝试更改此
function getRecords()
{
$sql = buildQuery();
$resource = mysql_query($sql);
}
到
function getRecords()
{
$sql = buildQuery();
echo $sql;
exit();
$resource = mysql_query($sql);
}
这将输出您正在查询数据库的SQL。如果不是立即显现,请对您的数据库复制并运行此查询。查看是否有任何行返回。如果不是那就是你的问题!
你也可以使用“echo mysql_error();”获取最后一个错误mysql的文本。
实施例
// Perform Query
$result = mysql_query($query);
// Check result
// This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
答案 2 :(得分:0)
请不要这样做:
mysql_query(“INSERT INTO employeeinfo(名字,姓氏,电话,电子邮件,部门,职位)VALUES('$ _POST [firstname]','$ _POST [lastname]','$ _POST [phone]','$ _POST [email]','$ _POST [department]','$ _POST [position]')“);
这将在您的站点安全性中产生一个名为sql-injection的巨大漏洞。 您应该始终检查从用户获得的任何数据。
它应该如何的简单例子:
$ firstname = mysql_real_escape_string($ _ POST ['firstname']);
$ lastname = mysql_real_escape_string($ _ POST ['lastname']);
$ phone = mysql_real_escape_string($ _ POST ['phone']);
$ email = mysql_real_escape_string($ _ POST ['email']);
$ department = mysql_real_escape_string($ _ POST ['department']);
$ position = mysql_real_escape_string($ _ POST ['position']);mysql_query(“INSERT INTO employeeinfo(名字,姓氏,电话,电子邮件,部门,职位)
VALUES('{$ firstname}','{$ lastname}','{$ phone}','{$ email}','{$ department}','{$ position}')“);
欲了解更多信息,请阅读:http://php.net/manual/en/mysqli.real-escape-string.php
我认为你应该在PHP中为新手找到一本好书并且至少不时阅读它。 它将帮助您了解您所写的内容以及如何使其更好。
我为此目的搜索的第一本书 - http://www.amazon.com/Learning-MySQL-JavaScript-Step-Step/dp/0596157134/
答案 3 :(得分:0)
也许..或许你的代码可能存在问题..
function getRecords()
{
$sql = buildQuery();
$resource = mysql_query($sql);
}
while($row = mysql_fetch_array($resource)) { // The error is for this row
$results[] = $row;
}
return $results;
我的猜测是你上面的代码应该是这样的
function getRecords()
{
$sql = buildQuery();
$resource = mysql_query($sql);
$results = array();
if($resource != null)
{
while($row = mysql_fetch_array($resource))
{
$results[] = $row;
}
}
return $results;
}
希望有所帮助:)