Не работает поиск по БД MySQL

468
27 октября 2017, 14:13

Есть база и скрипт для поиска по БД созданной в phpMyAdmin. Поиск не реботает. При нажатии btnSearch которая отвечает за выполнение кода поиска данные таблицы просто исчезают и нет никаких результатов поиска. Первый файл - app_config.php подключение к MySQL, а второй файл с БД - index_ships.php. Извините что слишком много кода, старался сократить как можно больше и оставил самое важное. Возможно кто-то увидит, то чего не вижу я.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
        <?php
        $database_host = "localhost";
        $username = "root";
        $password = "root";
        $database_name = "shipping_company";
        mysql_connect($database_host, $username, $password, $database_name)
        or die("<p>Ошибка подключения к базе данных: " . mysql_error() . "</p>");
        mysql_select_db($database_name)
        or die("<p>Ошибка при выборе базы данных {$database_name}: " . mysql_error() . "</p>");
        ?>
    </body>
</html>
<?php
require "app_config.php";
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Ships</title>
        <link href="css/style.css" rel="stylesheet">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <link rel="stylesheet" href="css/bootstrap.css" crossorigin="anonymous">
    </head>
    <body>
        <div class="full">
            <div class="middle">
                <p class="title">Ships data</p>
                <form method="GET">
                    <input type="search" name="strSearch">
                    <select name="check">
                        <option value="ShipName">Ship name</option>
                        <option value="CaptainName">Captain name</option>
                        <option value="ShipType">Ship type</option>
                    </select>
                    <input name="btnSearch" type="submit" value="Search">
                </form>
                <br>
                <?php
                if (!$_GET['btnSearch'])
                {
                $sql_select = "SELECT * FROM Ships";
                $result = mysql_query($sql_selectq);
                }
                else {
                $result = mysql_query("SELECT * FROM Ships WHERE {$_GET['check']} LIKE '%{$_GET['strSearch']}%'");
                }
                // $sql_select = "SELECT * FROM Ships";
                $result = mysql_query($sql_select);
                echo '<table class="table table-sm">';
                    echo '<tr><td><b>Ship</b></td><td><b>Name</b></td><td><b>Captain</b></td><td><b>Type</b></td><td><b>Cargo</b></td><td><b>Build</b></td><td><b>Photo</b></td><td>Delete</td></tr>';
                    while($row = mysql_fetch_assoc($result))
                    {
                    echo '<tr><td>'.$row['ship_id'].'</td><td>'.$row['ShipName'].'</td><td>'.$row['CaptainName'].'</td><td>'.$row['ShipType'].'</td><td>'.$row['Cargo'].'</td><td>'.$row['BuildYear'].'</td><td>'.$row['Photo'].'</td></tr>';
                    }
                echo '</table>';
                ?>
            </div>
            <div class="right">
                <?php
                $ship_name = $_POST['ShipName'];
                $captain_name = $_POST['CaptainName'];
                $ship_type = $_POST['ShipType'];
                $cargo = $_POST['Cargo'];
                $build_year = $_POST['BuildYear'];
                $photo = $_POST['Photo'];
                $flag = true;
                if (isset($_POST['add']))
                {
                if (!preg_match("/^\s*[A-Za-zА-Яа-яЁё_\s]*$/u", $ship_name)){
                echo "Invalid characters in Name!<br><br>";
                $flag = false;
                }
                if (!preg_match("/^\s*[A-Za-zА-Яа-яЁё_\s]*$/u", $captain_name)){
                echo "Invalid characters in Captain name!<br>";
                $flag = false;
                }
                if ($flag)
                {
                $insert_sql = "INSERT INTO Ships (ship_id, ShipName, CaptainName, ShipType, Cargo, BuildYear, Photo) VALUES ('$ship_id', '$ship_name', '$captain_name', '$ship_type', '$cargo', '$build_year', '$photo')";
                $res=mysql_query($insert_sql);
                if ($res)
                {
                // echo "<p>Данные успешно добавлены в таблицу.</p>";
                } else
                {
                echo "<p>Произошла ошибка.</p>";
                }
                echo '<meta http-equiv="refresh" content="0; URL=index_ships.php">';
                }
Answer 1

Данный мой код работает.

Основная проблема была в секции if (!isset($_GET['btnSearch'])){}else{}, у вас формируется в первой части секции $sql_select, а во второй части нет. После условной конструкции выполняется $result = mysql_query($sql_select) при условии что $sql_select не существует.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
<?php
$database_host = "localhost";
$username = "root";
$password = "";
$database_name = "ship";
$link = mysqli_connect($database_host, $username, $password, $database_name);
//mysqli_select_db($link, $database_name) or die("<p>Ошибка при выборе базы данных {$database_name}: " . mysqli_error() . "</p>");
?>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ships</title>
    <link href="css/style.css" rel="stylesheet">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="css/bootstrap.css" crossorigin="anonymous">
</head>
<body>
<div class="full">
    <div class="middle">
        <p class="title">Ships data</p>
        <form method="GET">
            <input type="search" name="strSearch">
            <select name="check">
                <option value="ShipName">Ship name</option>
                <option value="CaptainName">Captain name</option>
                <option value="ShipType">Ship type</option>
            </select>
            <input name="btnSearch" type="submit" value="Search">
        </form>
        <br>
        <?php
        if (!isset($_GET['btnSearch'])) {
            $sql_select = "SELECT * FROM Ships";
            $result = mysqli_query($link, $sql_select);
        } else {
            $result = mysqli_query($link, "SELECT * FROM Ships WHERE {$_GET['check']} LIKE '%{$_GET['strSearch']}%'");
            //            $sql_select = "SELECT * FROM Ships";
            //            $result = mysqli_query($link, $sql_select);
        }

        echo '<table class="table table-sm">';
        echo '<tr><td><b>Ship</b></td><td><b>Name</b></td><td><b>Captain</b></td><td><b>Type</b></td><td><b>Cargo</b></td><td><b>Build</b></td><td><b>Photo</b></td><td>Delete</td></tr>';
        while ($row = mysqli_fetch_assoc($result)) {
            echo '<tr><td>' . $row['id'] . '</td><td>' . $row['ShipName'] . '</td><td>' . $row['CaptainName'] . '</td><td>' . $row['ShipType'] . '</td></tr>';
        }
        echo '</table>';
        ?>
    </div>
</div>
</body>
</html>

Старый код:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
<?php
var_dump($_REQUEST);
$database_host = "localhost";
$username = "root";
$password = "";
$database_name = "ship";
$link = mysql_connect($database_host, $username, $password);
mysql_select_db($database_name, $link);
?>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ships</title>
    <link href="css/style.css" rel="stylesheet">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="css/bootstrap.css" crossorigin="anonymous">
</head>
<body>
<div class="full">
    <div class="middle">
        <p class="title">Ships data</p>
        <form method="GET">
            <input type="search" name="strSearch">
            <select name="check">
                <option value="ShipName">Ship name</option>
                <option value="CaptainName">Captain name</option>
                <option value="ShipType">Ship type</option>
            </select>
            <input name="btnSearch" type="submit" value="Search">
        </form>
        <br>
        <?php
        if (!isset($_GET['btnSearch'])) {
            $sql_select = "SELECT * FROM Ships";
            $result = mysql_query($sql_select);
        } else {
            $result = mysql_query("SELECT * FROM Ships WHERE {$_GET['check']} LIKE '%{$_GET['strSearch']}%'");
            //            $sql_select = "SELECT * FROM Ships";
            //            $result = mysqli_query($link, $sql_select);
        }
        //        $num=mysql_num_rows($result);
        //        if(0==$num) {
        //            echo "No record";
        //        }
        echo '<table class="table table-sm">';
        echo '<tr><td><b>Ship</b></td><td><b>Name</b></td><td><b>Captain</b></td><td><b>Type</b></td><td><b>Cargo</b></td><td><b>Build</b></td><td><b>Photo</b></td><td>Delete</td></tr>';
        while ($row = mysql_fetch_assoc($result)) {
            echo '<tr><td>' . $row['id'] . '</td><td>' . $row['ShipName'] . '</td><td>' . $row['CaptainName'] . '</td><td>' . $row['ShipType'] . '</td></tr>';
        }
        echo '</table>';
        ?>
    </div>
</div>
</body>
</html>
READ ALSO
Создание своих BB кодов

Создание своих BB кодов

1) способ: Как сделать всё одним регулярным выражением, а не создавать кучу переменных?

264
Извлечь фрагмент из строки

Извлечь фрагмент из строки

Здравствуйте, есть такие строки такого формата;

275
Как привязать InterKassa к самописному движку?

Как привязать InterKassa к самописному движку?

Из названия понятно что нужно сделать, в гугле не нашёл ничего

271
Получение информации по внешним ключам

Получение информации по внешним ключам

Имеются две сущности: User, RoleКаждый инстанс сущности User содержит в себе внешний ключ roleID ссылающийся на поле id сущности Role

251