Новичок: создание каталога сотрудников со скриптами для добавления / редактирования / поиска / удаления.ошибки - PullRequest
1 голос
/ 26 октября 2011

Я создаю каталог сотрудников, который имеет 3 простые формы. Первый добавляет записи, второй ищет записи, третий ищет, затем удаляет записи. Я хочу отобразить все записи на той же странице, а затем, когда поиск будет завершен, просто отобразить те записи, которые соответствуют ключевому слову поиска.

Я правильно построил БД и Таблицу. Первая форма успешно добавляет записи в БД. Перед тем, как правильно настроить поиск и удаление форм, я пытаюсь отобразить записи. Они не отображаются. Иногда я могу отобразить свою HTML-таблицу, но ни одна из записей не появляется. Однако я знаю, что записи существуют, потому что я вижу их в MyAdmin.

Я получаю эту ошибку прямо сейчас, но мои ошибки на данный момент меняются, когда я пробую новые вещи: Предупреждение: mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, значение NULL в C: \ xampp \ htdocs \ Employees.php по линии 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>

Ответы [ 4 ]

0 голосов
/ 26 октября 2011

Может быть .. просто возможно есть проблема с вашим кодом ..

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;
}

Надеюсь, это поможет:)

0 голосов
/ 26 октября 2011

Вы не получаете никаких строк назад.Попробуйте изменить это

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);
}
0 голосов
/ 26 октября 2011

Пожалуйста, никогда не делайте такую ​​вещь:

mysql_query ("INSERT INTO employeeinfo (имя, фамилия, телефон, электронная почта, отдел, должность) ЗНАЧЕНИЯ ('$ _POST [firstname]', '$ _POST [lastname]', '$ _POST [phone]', '$ _POST [электронная почта] ',' $ _POST [отдел] ',' $ _POST [позиция] ') ");

Это создаст ОГРОМНУЮ дыру в безопасности вашего сайта, которая называется sql-инъекцией. Вы всегда должны проверять любые данные, полученные от пользователя.

Простой пример того, как это должно быть:

$ firstname = mysql_real_escape_string ($ _ POST ['firstname']);
$ lastname = mysql_real_escape_string ($ _ POST ['фамилия']);
$ phone = mysql_real_escape_string ($ _ POST ['phone']);
$ email = mysql_real_escape_string ($ _ POST ['email']);
$ отдела = mysql_real_escape_string ($ _ POST ['отдел']);
$ 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/

0 голосов
/ 26 октября 2011

Ваш запрос mysql не выполняется или он перенастраивает 0 строк.
Попробуйте поместить этот оператор

if(!$resource){
echo mysql_error();   
echo ' <br>Query: .$sql;
}

сразу после $ resource = mysql_query ($ sql);

и посмотри, что он выводит.Также убедитесь, что отчеты об ошибках включены.

Я вчера отредактировал свой ответ на вашем посте, возможно, вы захотите посмотреть его;это может дать вам некоторые идеи для другого подхода.

Ссылка здесь: Неустранимая ошибка: вызов неопределенной функции getRecords () в C: \ xampp \ htdocs \ Employees.php в строке 101

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...