Добрый день. Хочу реализовать следующее приложение (сайт) словарь национального языка. БД Буду использовать MySQL с одной table и колонками word и translation. Так вот хотелось бы узнать, реально ли вообще сделать такое на PHP и в какую сторону копать? сайт планирую реализовывать не на движках или фреймворках, а простой index.php, поэтому хотелось бы знать еще как защитить данный файл от злоумышленников, ну чтобы нельзя было тупо скачать этот файл с хостинга. Спасибо
Почитай книгу, например http://www.ozon.ru/context/detail/id/137538198/ там про безопасность должно быть. Если коротко http://phpfaq.ru/tech/safety Они упрощают и ускоряют процесс. --- Добавлено --- ещё бы поле идентификатор с auto increment и именем id можно было добавить Прочитай раз 10 и вникни https://ru.wikipedia.org/wiki/Нормальная_форма
колонку ID по умолчанию и так добавляю). Посмотрите пожалуйста, я тут набросал, но что-то не выводится ничего. Где накосячил? Код (Text): <body> <?php $host="localhost"; $user="user_name"; $pass="pass"; $db_name="db_name"; $db_path=mysql_connect($host,$user,$pass); mysql_select_db($db_name,$db_path); ?> <?php if (isset($_POST["word"])) { $form_word=htmlspecialchars(trim($_POST['word'])); if ($form_word=="") { echo "Введите слово"; } else { $query="SELECT `translation` FROM `ruslak` where ruslak.word=form_word"; $sql=mysql_query($query); echo $sql; } } ?> <form action="" method="post"> <input type="text" name="word"/> </form> </body>
1) Код (Text): $query="SELECT `translation` FROM `ruslak` where ruslak.word=form_word"; че такое form_word в этой строчке, если переменная то где знак доллара? 2)Зачем так усложнять? Код (Text): <?php if (isset($_POST["word"])) { $form_word=htmlspecialchars(trim($_POST['word'])); if ($form_word=="") { echo "Введите слово"; } else { $query="SELECT `translation` FROM `ruslak` where ruslak.word=form_word"; $sql=mysql_query($query); echo $sql; } } ?> можно тоже самое написать так: Код (Text): <?php if ( $form_word=htmlspecialchars(trim($_POST['word'])) ) { $query="SELECT `translation` FROM `ruslak` where ruslak.word=form_word"; $sql=mysql_query($query); echo $sql; }else{ echo "Введите слово"; } ?> 3) Код (Text): $sql=mysql_query($query); echo $sql; в переменной $sql у тебя массив , а echo для вывода строковых данных. почитай про функцию mysql-fetch-assoc и ей подобные https://php.ru/manual/function.mysql-fetch-assoc.html 4) Функции с mysql_ устарели используй функции с mysqli_
PHP: <body> <?php if ($form_word=htmlspecialchars(trim($_POST['word'])) ) { echo $form_word; $query="SELECT * FROM `ruslak` where `word` =" . $form_word; $sql=mysql_query($query); while($data = mysql_fetch_assoc($sql)){ echo $data["translation"]; } mysql_free_result($data); }else{ echo "Введите слово"; } ?> <form action="" method="post"> <input type="text" name="word"/> </form> </body> Переделал вот так: Но что-то не работает. Может я что-то не так сделал? И еще вопрос, где именно переделать функции mysqli_
а ты подключение к базе банных убрал чтоли? Ты походу форму не отправляешь, как ты ее отправишь если у тебя ни кнопки нет, ни js чтобы считать значение автоматом. Где у тебя в форме кнопка отправить? сделай хотя бы так: Код (Text): <form action="" method="post"> <input type="text" name="word" value=""/> <input type="submit" value="Послать"/> </form> Заменяй mysql_query на mysqli_query, mysql_connect на mysqli_connect и во всех функциях начинающихся на mysql_ заменять на mysqli_ . Еще нужно передавать идентификатор подключения к базе данных. Читай здесь: http://phpforum.su/index.php?showtopic=72636
PHP: <?php $link = mysqli_connect('localhost', 'slovar', '123456', 'slovar'); if ($form_word=htmlspecialchars(trim($_POST['word'])) ) { $query="SELECT * FROM `ruslak` where `word` =" . $form_word; $sql=mysqli_query($link, $query); while($data = mysqli_fetch_assoc($sql)){ echo $data["translation"]; } mysqli_free_result($data); }else{ echo "Введите слово"; } ?> <form action="" method="post"> <input type="text" name="word" value=""/> <input type="submit" value="Послать"/> </form> не работает( Где еще косяк?
какие ошибки выходят на экран? проверь подключаешься ли к базе данных, например после строки с mysqli_connect встать этот код: Код (Text): if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } Если будут ошибки в подключении в базе, то они выведется на экран. Если норм проверь sql запрос, выполнив его в phpmyadmin. Почитай здесь, как искать ошибки в коде: http://phpfaq.ru/debug
Ошибок нет, в PhpmeAdmin запрос выполняется. Я думаю что у меня в строен, где формируется запрос нужно добавить кавычки, так чтобы они обрамляли переменную $form_word. Но что-то не то получается, если пишу так: PHP: $query="SELECT * FROM `ruslak` where `word` =" . \" . $form_word . \"; как правильно экранировать кавычки в этой строке?
Используй одинарные кавычки например. Попробуй так, должно работать: $query="SELECT * FROM `ruslak` where `word` ='" . $form_word. "' ";
Интересен такой момент. в таблице из БД будут около 50 тыс. записей и хотелось бы узнать мой пример с БД MySQL или скажем на чистом JS если попробовать написать (без БД) какой способ будет лучше в плане скорости? будет ли сильно заметна скорость обработки запросов по сравнению с js
Я извиняюсь. Не могу сделать следующее. Вот получился в итоге такой код PHP: <body> <?php $link = mysqli_connect('localhost', 'slovar', '123456', 'slovar'); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $form_word=htmlspecialchars(trim($_POST['word'])); ?> <div class="word"> <span> <?php echo $form_word; ?> </span> </div> <div class="translation"> <span> <?php if ($form_word) { $query="SELECT * FROM `ruslak` where `word` ='" . $form_word. "' "; $sql=mysqli_query($link, $query); while($data = mysqli_fetch_assoc($sql)){ echo "Найдено: " . $data["translation"] . "<br/>"; } mysqli_free_result($data); }else if (empty($form_word)) { echo "Словарь"; } else { echo "Не найдено"; } ?> </span> </div> <form action="" method="post"> <input type="text" name="word" value=""/> <button><img src="search.svg" alt="Найти" style="width: 20px;"/></button> </form> </body> Мне нужно сделать следующее: 1. При открытии страницы Чтобы в блок word > span записывалось слово Словарь HTML: <div class="word"> <span> СЛОВАРЬ </span></div> 2. Если ввели в поле слово, которого нет в БД, то туда выводилось бы НЕ НАЙДЕНО 3. А если ввели слово, которое есть в БД, туда выводилось бы слово которое ввели в поле input
Передал, получилось. Но почему-то условие не срабатывает. PHP: <body> <?php $link=mysqli_connect('localhost','slovar','123456','slovar'); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $form_word=htmlspecialchars(trim($_POST['word'])); $arrayTanslation = array(); if ($form_word) { $query="SELECT * FROM `ruslak` where `word` ='" . $form_word. "' "; $sql=mysqli_query($link, $query); while($data = mysqli_fetch_assoc($sql)){ array_push($arrayTanslation, $data["translation"]); } mysqli_free_result($data); } ?> <div class="word"> <span> <?php if (empty($form_word)) { echo "СЛОВАРЬ"; } else if (count($arrayTanslation) == 0) { echo "Не найдено"; } else { echo $form_word; } ?> </span> </div> <div class="translation"> <span> <?php foreach($arrayTanslation as $value) { if (mb_strlen($value) == 0) { echo "Не найдено"; } else { echo "Найдено " . $value . "<br/>"; } } ?> </span> </div> <form action="" method="post"> <input type="text" name="word" value=""/> <button><img src="search.svg" alt="Найти" style="width: 20px;"/></button> </form> </body> В коде ниже пытаюсь реализовать следующую проверку. Если длина каждой строки, которая выбирается из массива $arrayTanslation (в нее предварительно записываю результат выборки из БД) равна 0 т.е. получается что для слова введенного в поле нет перевода, то нужно выводить Не найдено, но что-то не работает. А если перевод найден, то все работает. В чем причина? PHP: <?php foreach($arrayTanslation as $value) { if (mb_strlen($value) == 0) { echo "Не найдено"; } else { echo "Найдено " . $value . "<br/>"; } } ?>