поиск данных из html-ввода в mysql

#javascript #php #mysql

Вопрос:

Я хочу получить данные из своей базы данных (mysql) и показать их на веб-сайте, скрипт должен быть сохранен.

Это структура файлов, которые у меня уже есть:

 /includes
    db_connect.php
    functions.php
    getdata.php
    logout.php
    process_login.php
    psl-config.php
    register.inc.php
/js
    forms.js
    sha512.js
login.php
protected_page.php
register.php
register_success.php
seach.php
 

Теперь следите за важными файлами:
psl-config.php

 <?php
/**
 * Das sind die Login-Angaben für die Datenbank
 */  
define("HOST", "localhost");     // Der Host mit dem du dich verbinden willst.
define("USER", "sec_user");    // Der Datenbank-Benutzername. 
define("PASSWORD", "eKcGZr59zAa2BEWU");    // Das Datenbank-Passwort. 
define("DATABASE", "secure_login");    // Der Datenbankname.

define("CAN_REGISTER", "any");
define("DEFAULT_ROLE", "member");

define("SECURE", FALSE);    // NUR FÜR DIE ENTWICKLUNG!!!!
?>
 

В db_connect.php

 <?php
include_once 'psl-config.php';   // Da functions.php nicht included ist
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
?>
 

Это моя search.php

 <?php
include_once 'includes/db_connect.php';
include_once 'includes/functions.php';

sec_session_start();
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Secure Login: Protected Page</title>
        <link rel="stylesheet" href="styles/main.css" />
    </head>
    <body>
        <?php if (login_check($mysqli) == true) : ?>
            <p>Welcome <?php echo htmlentities($_SESSION['username']); ?>!</p>

            <h3>Search  Contacts Details</h3> 
            <p>You  may search either by first or last name</p> 
            <form  method="post" action="search.php?go"  id="searchform"> 
                <input  type="text" name="name"> 
                <input  type="submit" name="submit" value="Search"> 
            </form>
        <?php else : ?>
            <p>
                <span class="error">You are not authorized to access this page.</span> Please <a href="login.php">login</a>.
            </p>
        <?php endif; ?>
    </body>
</html>
 

Где я должен разместить запись в текстовом поле, чтобы обеспечить безопасный поиск моего веб-сайта?
Безопасен ли мой код в использовании?

Это моя команда sql: SELECT * FROM produckte WHERE beschreibung = $search LIMIT 100;

Я хочу распечатать результат на поисковом сайте.

Комментарии:

1. Это совершенно безопасно, если вы правильно подготовите информацию для базы данных. Поскольку вы используете mysqli, вы можете использовать подготовленные инструкции. подготовленные инструкции mysqli или вы можете использовать php для очистки строки, прежде чем использовать ее в прямом sql. И все же первый вариант-лучший.

Ответ №1:

во-первых, измените имя вашего ввода-поиска на «поиск».:

 <input  type="text" name="search">
 

Вы отправляете свою форму в тот же файл .php, используя метод «POST».
Это означает, что вы можете получить доступ к любой информации, отправляемой на страницу, обратившись к переменной $_POST.

Добавьте это в верхнюю часть вашего search.php файла, внутри <?php ?> тегов:

 if (isset($_POST['search']) {
  echo $_POST['search'];
}
 

это даст вам представление о том, как обрабатывать данные, отправляемые из a <form> .

Взгляните на этот документ PHP, касающийся работы с формами.

mysqli позволяет использовать подготовленные инструкции, что является безопасным способом передачи пользовательских данных в запросы к базе данных.

Пример того, как запросить базу данных с подготовленными статментами:

 if (isset($_POST['search']) {
  $stmt = $mysqli->prepare("SELECT * FROM produckte WHERE beschreibung = ? LIMIT 100;")
  $stmt->bind_param("s", $_POST['search']);
  $stmt->execute();

  $result = $stmt->get_result();
  while ($row = $result->fetch_array(MYSQLI_NUM))
  {
    .....handle your data here....
  }
  $stmt->close();
}
 

Ответ №2:

Я бы рекомендовал использовать что-то подобное:

SELECT * FROM produckte WHERE beschreibung LIKE '%".$search."%'; Этот запрос безопасен, если у вас есть подготовленное заявление

% заставляет ваш запрос возвращать все, что содержит ключевое слово поиска, например, если вы ищете: «привет», А в вашей базе данных есть «1hello», «hello2382», ваш результат будет «1hello» и «hello2382», если вы использовали свой запрос без%, у вас будет 0 результатов. Подробная информация

Это должно сработать:

 $query = "SELECT * FROM produckte WHERE beschreibung LIKE '%".$search."%';";

if ($result = $mysqli->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
        printf ("%s (%s)n", $row["Name"], $row["column name"]);
        //You could echo a div in here with the data you want to be displayed
    }

    /* free result set */
    $result->free();
}
 

В вашем search.php

Вы должны это сделать:

 //your form submit button name
if(isset($_POST['submit'])){
    //your form textfield name
    $search = $_POST['name'];

    //execute the while query here.

}
 

Комментарии:

1. эту часть я понял, но как мне получить $search? с данными из текстового поля не могли бы вы показать их мне?