За последние 24 часа нас посетили 25787 программистов и 1728 роботов. Сейчас ищут 918 программистов ...

Работа с БД MySQL

Тема в разделе "PHP и базы данных", создана пользователем kolhoz, 7 ноя 2016.

  1. kolhoz

    kolhoz Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    31
    Симпатии:
    0
    Добрый день. Хочу реализовать следующее приложение (сайт) словарь национального языка. БД Буду использовать MySQL с одной table и колонками word и translation. Так вот хотелось бы узнать, реально ли вообще сделать такое на PHP и в какую сторону копать? сайт планирую реализовывать не на движках или фреймворках, а простой index.php, поэтому хотелось бы знать еще как защитить данный файл от злоумышленников, ну чтобы нельзя было тупо скачать этот файл с хостинга. Спасибо
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Почитай книгу, например http://www.ozon.ru/context/detail/id/137538198/ там про безопасность должно быть.
    Если коротко http://phpfaq.ru/tech/safety

    Они упрощают и ускоряют процесс.
    --- Добавлено ---
    ещё бы поле идентификатор с auto increment и именем id можно было добавить

    Прочитай раз 10 и вникни https://ru.wikipedia.org/wiki/Нормальная_форма
     
  3. kolhoz

    kolhoz Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    31
    Симпатии:
    0
    колонку ID по умолчанию и так добавляю). Посмотрите пожалуйста, я тут набросал, но что-то не выводится ничего. Где накосячил?


    Код (Text):
    1. <body>
    2.    
    3.     <?php
    4.     $host="localhost";
    5.     $user="user_name";
    6.     $pass="pass";
    7.     $db_name="db_name";
    8.     $db_path=mysql_connect($host,$user,$pass);
    9.     mysql_select_db($db_name,$db_path);
    10.     ?>
    11.    
    12.     <?php
    13.         if (isset($_POST["word"])) {
    14.             $form_word=htmlspecialchars(trim($_POST['word']));
    15.             if ($form_word=="") {
    16.                 echo "Введите слово";
    17.             } else {
    18.                 $query="SELECT `translation` FROM `ruslak` where ruslak.word=form_word";
    19.                 $sql=mysql_query($query);
    20.                 echo $sql;
    21.             }
    22.         }
    23.     ?>
    24.    
    25.     <form action="" method="post">
    26.         <input type="text" name="word"/>
    27.     </form>
    28.    
    29. </body>
     
  4. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    1)
    Код (Text):
    1.  $query="SELECT `translation` FROM `ruslak` where ruslak.word=form_word";
    че такое form_word в этой строчке, если переменная то где знак доллара?


    2)Зачем так усложнять?
    Код (Text):
    1.  
    2. <?php
    3.         if (isset($_POST["word"])) {
    4.             $form_word=htmlspecialchars(trim($_POST['word']));
    5.             if ($form_word=="") {
    6.                 echo "Введите слово";
    7.             } else {
    8.                 $query="SELECT `translation` FROM `ruslak` where ruslak.word=form_word";
    9.                 $sql=mysql_query($query);
    10.                 echo $sql;
    11.             }
    12.         }
    13.     ?>
    можно тоже самое написать так:
    Код (Text):
    1.  
    2.     <?php
    3.         if ( $form_word=htmlspecialchars(trim($_POST['word'])) ) {
    4.  
    5.              $query="SELECT `translation` FROM `ruslak` where ruslak.word=form_word";
    6.              $sql=mysql_query($query);
    7.              echo $sql;
    8.        }else{
    9.             echo "Введите слово";  
    10.        }
    11.     ?>
    3)
    Код (Text):
    1.  
    2. $sql=mysql_query($query);
    3.   echo $sql;
    в переменной $sql у тебя массив , а echo для вывода строковых данных.

    почитай про функцию mysql-fetch-assoc и ей подобные https://php.ru/manual/function.mysql-fetch-assoc.html

    4) Функции с mysql_ устарели используй функции с mysqli_
     
    #4 zahermaher, 7 ноя 2016
    Последнее редактирование: 7 ноя 2016
    denis01 нравится это.
  5. kolhoz

    kolhoz Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    31
    Симпатии:
    0
    PHP:
    1. <body>
    2.    
    3.     <?php
    4.         if ($form_word=htmlspecialchars(trim($_POST['word'])) ) {
    5.             echo $form_word;
    6.             $query="SELECT * FROM `ruslak` where `word` =" . $form_word;
    7.             $sql=mysql_query($query);
    8.             while($data = mysql_fetch_assoc($sql)){
    9.                 echo $data["translation"];
    10.             }
    11.             mysql_free_result($data);
    12.         }else{
    13.             echo "Введите слово";
    14.         }
    15.     ?>
    16.    
    17.     <form action="" method="post">
    18.         <input type="text" name="word"/>
    19.     </form>
    20.    
    21. </body>
    Переделал вот так: Но что-то не работает. Может я что-то не так сделал? И еще вопрос, где именно переделать функции mysqli_
     
  6. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    а ты подключение к базе банных убрал чтоли?
    Ты походу форму не отправляешь, как ты ее отправишь если у тебя ни кнопки нет, ни js чтобы считать значение автоматом.
    Где у тебя в форме кнопка отправить?

    сделай хотя бы так:
    Код (Text):
    1.  
    2. <form action="" method="post">
    3.         <input type="text" name="word" value=""/>
    4.         <input type="submit"  value="Послать"/>
    5.    </form>
    Заменяй mysql_query на mysqli_query, mysql_connect на mysqli_connect и во всех функциях начинающихся на mysql_ заменять на mysqli_ .
    Еще нужно передавать идентификатор подключения к базе данных.
    Читай здесь: http://phpforum.su/index.php?showtopic=72636
     
    #6 zahermaher, 7 ноя 2016
    Последнее редактирование: 7 ноя 2016
    denis01 нравится это.
  7. kolhoz

    kolhoz Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    31
    Симпатии:
    0
    Подключение есть, просто тут не выложил чтобы много кода не было . Спасибо , сейчас попробую
     
  8. kolhoz

    kolhoz Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    31
    Симпатии:
    0
    PHP:
    1.     <?php
    2.         $link = mysqli_connect('localhost', 'slovar', '123456', 'slovar');
    3.         if ($form_word=htmlspecialchars(trim($_POST['word'])) ) {
    4.             $query="SELECT * FROM `ruslak` where `word` =" . $form_word;
    5.             $sql=mysqli_query($link, $query);
    6.             while($data = mysqli_fetch_assoc($sql)){
    7.                 echo $data["translation"];
    8.             }
    9.             mysqli_free_result($data);
    10.         }else{
    11.             echo "Введите слово";  
    12.         }
    13.     ?>
    14.    
    15.     <form action="" method="post">
    16.         <input type="text" name="word" value=""/>
    17.         <input type="submit" value="Послать"/>
    18.     </form>
    не работает( Где еще косяк?
     
  9. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    какие ошибки выходят на экран?

    проверь подключаешься ли к базе данных, например после строки с mysqli_connect встать этот код:

    Код (Text):
    1.  
    2. if (mysqli_connect_errno()) {
    3.     printf("Connect failed: %s\n", mysqli_connect_error());
    4.     exit();
    5. }
    Если будут ошибки в подключении в базе, то они выведется на экран.

    Если норм проверь sql запрос, выполнив его в phpmyadmin.

    Почитай здесь, как искать ошибки в коде: http://phpfaq.ru/debug
     
    denis01 нравится это.
  10. kolhoz

    kolhoz Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    31
    Симпатии:
    0
    Ошибок нет, в PhpmeAdmin запрос выполняется. Я думаю что у меня в строен, где формируется запрос нужно добавить кавычки, так чтобы они обрамляли переменную $form_word. Но что-то не то получается, если пишу так:

    PHP:
    1. $query="SELECT * FROM `ruslak` where `word` =" . \" . $form_word . \";
    как правильно экранировать кавычки в этой строке?
     
  11. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    Используй одинарные кавычки например.
    Попробуй так, должно работать:

    $query="SELECT * FROM `ruslak` where `word` ='" . $form_word. "' ";
     
    denis01 нравится это.
  12. kolhoz

    kolhoz Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    31
    Симпатии:
    0
    заработало. Спасибо, большое.
     
  13. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    вот и хорошо :)
     
    denis01 нравится это.
  14. kolhoz

    kolhoz Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    31
    Симпатии:
    0
    Интересен такой момент. в таблице из БД будут около 50 тыс. записей и хотелось бы узнать мой пример с БД MySQL или скажем на чистом JS если попробовать написать (без БД) какой способ будет лучше в плане скорости? будет ли сильно заметна скорость обработки запросов по сравнению с js
     
  15. kolhoz

    kolhoz Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    31
    Симпатии:
    0
    Я извиняюсь. Не могу сделать следующее. Вот получился в итоге такой код

    PHP:
    1. <body>
    2.    
    3.     <?php
    4.         $link = mysqli_connect('localhost', 'slovar', '123456', 'slovar');
    5.             if (mysqli_connect_errno()) {
    6.                 printf("Connect failed: %s\n", mysqli_connect_error());
    7.                 exit();
    8.             }
    9.         $form_word=htmlspecialchars(trim($_POST['word']));  
    10.     ?>
    11.    
    12.     <div class="word">
    13.         <span>
    14.             <?php echo $form_word; ?>
    15.         </span>
    16.     </div>
    17.    
    18.     <div class="translation">
    19.         <span>
    20.             <?php
    21.                 if ($form_word) {
    22.                     $query="SELECT * FROM `ruslak` where `word` ='" . $form_word. "' ";
    23.                     $sql=mysqli_query($link, $query);
    24.                     while($data = mysqli_fetch_assoc($sql)){
    25.                         echo "Найдено: " . $data["translation"] . "<br/>";
    26.                     }
    27.                     mysqli_free_result($data);
    28.                 }else if (empty($form_word)) {
    29.                     echo "Словарь";
    30.                 } else {
    31.                     echo "Не найдено";
    32.                 }
    33.             ?>
    34.         </span>
    35.     </div>
    36.    
    37.     <form action="" method="post">
    38.         <input type="text" name="word" value=""/>
    39.         <button><img src="search.svg" alt="Найти" style="width: 20px;"/></button>
    40.     </form>
    41.    
    42. </body>
    Мне нужно сделать следующее:
    1. При открытии страницы Чтобы в блок word > span записывалось слово Словарь
    HTML:
    1. <div class="word"> <span> СЛОВАРЬ </span></div>
    2. Если ввели в поле слово, которого нет в БД, то туда выводилось бы НЕ НАЙДЕНО
    3. А если ввели слово, которое есть в БД, туда выводилось бы слово которое ввели в поле input
     
  16. kolhoz

    kolhoz Активный пользователь

    С нами с:
    7 ноя 2016
    Сообщения:
    31
    Симпатии:
    0
    Передал, получилось. Но почему-то условие не срабатывает.

    PHP:
    1. <body>
    2.    
    3.     <?php
    4.         $link=mysqli_connect('localhost','slovar','123456','slovar');
    5.             if (mysqli_connect_errno()) {
    6.                 printf("Connect failed: %s\n", mysqli_connect_error());
    7.                 exit();
    8.             }
    9.         $form_word=htmlspecialchars(trim($_POST['word']));  
    10.         $arrayTanslation = array();
    11.         if ($form_word) {
    12.             $query="SELECT * FROM `ruslak` where `word` ='" . $form_word. "' ";
    13.             $sql=mysqli_query($link, $query);
    14.             while($data = mysqli_fetch_assoc($sql)){
    15.                 array_push($arrayTanslation, $data["translation"]);
    16.             }
    17.             mysqli_free_result($data);
    18.         }
    19.     ?>
    20.    
    21.     <div class="word">
    22.         <span>
    23.             <?php
    24.                 if (empty($form_word)) {
    25.                     echo "СЛОВАРЬ";
    26.                 } else if (count($arrayTanslation) == 0) {
    27.                     echo "Не найдено";
    28.                 } else {
    29.                     echo $form_word;
    30.                 }
    31.             ?>
    32.         </span>
    33.     </div>
    34.    
    35.     <div class="translation">
    36.         <span>
    37.             <?php
    38.                 foreach($arrayTanslation as $value) {
    39.                     if (mb_strlen($value) == 0) {
    40.                         echo "Не найдено";
    41.                     } else {
    42.                         echo "Найдено " . $value . "<br/>";
    43.                     }
    44.                 }
    45.             ?>
    46.         </span>
    47.     </div>
    48.    
    49.     <form action="" method="post">
    50.         <input type="text" name="word" value=""/>
    51.         <button><img src="search.svg" alt="Найти" style="width: 20px;"/></button>
    52.     </form>
    53.    
    54. </body>
    В коде ниже пытаюсь реализовать следующую проверку. Если длина каждой строки, которая выбирается из массива $arrayTanslation (в нее предварительно записываю результат выборки из БД) равна 0 т.е. получается что для слова введенного в поле нет перевода, то нужно выводить Не найдено, но что-то не работает. А если перевод найден, то все работает. В чем причина?

    PHP:
    1.             <?php
    2.                 foreach($arrayTanslation as $value) {
    3.                     if (mb_strlen($value) == 0) {
    4.                         echo "Не найдено";
    5.                     } else {
    6.                         echo "Найдено " . $value . "<br/>";
    7.                     }
    8.                 }
    9.             ?>