Помогите с тегами <select> и <option> на PHP ?

anton000
На сайте с 10.05.2013
Offline
32
1244

Собственно, такая проблема. Что в списках выбора присутствуют пустые поля. Они содержаться в базе данных. Нужно как-то правильно составить mysql запрос на убирание всех пустых строк.

Предположим таблица menu в неё -> id, title, title_url, parent. Нужно, если поле title или title_url не заполнены, то нужно всю эту строчку не выводить?

Благодарю за ответы!

vadoru
На сайте с 06.01.2009
Offline
38
#1

$count перед циклом инициализируйте в 0

Учебный центр design-class.com.ua (http://design-class.com.ua)
anton000
На сайте с 10.05.2013
Offline
32
#2
vadoru:
$count перед циклом инициализируйте в 0

Спасибо, большое с этой проблемой разобрался. Оказалось написал opiton вместо option.

Сейчас стала другая проблема, я переделал тему. Ответьте пожалуйста?

siv1987
На сайте с 02.04.2009
Offline
427
#3

anton000, начнем с того, почему в базе содержатся опции с пустым тайтлом.

anton000
На сайте с 10.05.2013
Offline
32
#4
siv1987:
anton000, начнем с того, почему в базе содержатся опции с пустым тайтлом.

А, в этом ещё одна проблема замешана.

Я создал скрипт который добавляет те самые категории в базу данных. Работает мой скрипт через раз. То есть вчера вечером добавлял категории, сегодня утром тоже не добавлял, потом 2 часа добавлял, и сейчас уже не добавляет. Сам не пойму почему.

Вот сам скрипт:


<center width=100%>
<form width=60% action="category.php" method="post">
Введите новую категорию: <input type="text" name="FirstName" />
<br>
<br>
Введите ЧПУ категории: <input type="text" name="chpy" />
<br>
<?
include "bd.php";

$row = "SELECT * FROM menu";

$array = mysql_query($row);

echo "<p>Выберите категорию:
<select name=id size=1>";

while($row = mysql_fetch_array($array)) {

echo "<option value='".$row[title]."'>".$row[title]."</opiton>";

}

?>
<br>
<input type="submit" value="Сохранить" />
</form>
</select>
</center>
<?


//Отправка запроса полностью.

$row = "INSERT INTO menu(title, title_url, parent) values('" . $_POST['FirstName'] . "', '" . $_POST["chpy"] . "', '" . $_POST["id"] . "')";

mysql_query($row);

?>

Мало, того, когда он всё таки начинает работать ( добавлять категории), то если перезагрузить файл ( нажать F5 ), он создаст поле пустое в таблице. Вот откуда в таблице пустые поля.

siv1987
На сайте с 02.04.2009
Offline
427
#5
anton000:
Мало, того, когда он всё таки начинает работать ( добавлять категории), то если перезагрузить файл ( нажать F5 ), он создаст поле пустое в таблице. Вот откуда в таблице пустые поля.

Естественно будет добавлять, где у вас условие что-бы этот запрос выполнялся только при отправке формы? Мало того, в таком виде это явная дыра в безопасности (повезет если работают "волшебные кавычки" на сервере).


if(isset($_POST['submit']))
{
$title = htmlspecialchars($_POST['FirstName']);
$title_url = htmlspecialchars($_POST["chpy"]);
$parent = intval($_POST["id"]);

if(! $title OR ! $title_url OR ! $parent)
die('Error');

mysql_query("INSERT INTO menu(title, title_url, parent) values('" . mysql_real_escape_string($title) . "', '" . mysql_real_escape_string($title_url) . "', '" . $parent . "')");
}
R
На сайте с 18.12.2009
Offline
92
#6

Зачем Вы в option title передаете? Обычно передается id для поддержки связанности через первичные ключи.

По теме - сейчас Вы выбираете все поля. Вам же необходимо выбирать только те, в которых есть значение.

Для этого, если проверку осуществлять средствами базы данных, Вам в помощь, например, оператор LIKE.

Еще проще, но такой метод не правильный изначально, делать проверку на php:


while($row = mysql_fetch_array($array)) {
if($row[title]) { // или ($row[title] != '')
echo "<option value='".$row[title]."'>".$row[title]."</opiton>";
}
}
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#7

УГ в центилионной степени, да еще и в квадрате:D

Подпись))
anton000
На сайте с 10.05.2013
Offline
32
#8
siv1987:
Естественно будет добавлять, где у вас условие что-бы этот запрос выполнялся только при отправке формы? Мало того, в таком виде это явная дыра в безопасности (повезет если работают "волшебные кавычки" на сервере).

if(isset($_POST['submit']))
{
$title = htmlspecialchars($_POST['FirstName']);
$title_url = htmlspecialchars($_POST["chpy"]);
$parent = intval($_POST["id"]);

if(! $title OR ! $title_url OR ! $parent)
die('Error');

mysql_query("INSERT INTO menu(title, title_url, parent) values('" . mysql_real_escape_string($title) . "', '" . mysql_real_escape_string($title_url) . "', '" . $parent . "')");
}

Я так понял, нужно


<?


//Отправка запроса полностью.

$row = "INSERT INTO menu(title, title_url, parent) values('" . $_POST['FirstName'] . "', '" . $_POST["chpy"] . "', '" . $_POST["id"] . "')";

mysql_query($row);
?>

Перенести, просто в другой файл, и передавать параметры в тот самый файл?

Я так сделал, но выскальзывают две ошибки:

Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) in C:\open\OpenServer\domains\lip.ru\test.php on line 8

Warning: mysql_query(): A link to the server could not be established in C:\open\OpenServer\domains\lip.ru\test.php on line 8

И всё это с функцией. Порылся, нашёл, что эти ошибки возникают в следствии неправильного подключения к базе данных. Но у меня другие скрипты, работают очень хорошо, и подключаются к базе без проблем. А конфигурационный файл 1 на всех.

---------- Добавлено 27.06.2013 в 12:21 ----------

rerighter:
Зачем Вы в option title передаете? Обычно передается id для поддержки связанности через первичные ключи.
По теме - сейчас Вы выбираете все поля. Вам же необходимо выбирать только те, в которых есть значение.
Для этого, если проверку осуществлять средствами базы данных, Вам в помощь, например, оператор LIKE.
Еще проще, но такой метод не правильный изначально, делать проверку на php:


while($row = mysql_fetch_array($array)) {
if($row[title]) { // или ($row[title] != '')
echo "<option value='".$row[title]."'>".$row[title]."</opiton>";
}
}

Спасибо, большое! Теперь нету простых строчек.

M2
На сайте с 11.01.2011
Offline
341
#9

У вас строковые данные? Лучше так:


<?
//Отправка запроса полностью.

$row = "INSERT INTO menu(title, title_url, parent) values('" . mysql_real_escape_string($_POST['FirstName'] ). "', '" .mysql_real_escape_string( $_POST["chpy"] ). "', '" . $_POST["id"] . "')";

mysql_query($row);
?>
------------------- Крутые VPS и дедики. Качество по разумной цене ( http://cp.inferno.name/view.php?product=1212&gid=1 ) VPS25OFF - скидка 25% на первый платеж по ссылке выше
siv1987
На сайте с 02.04.2009
Offline
427
#10
anton000:

Я так понял, нужно
Перенести, просто в другой файл, и передавать параметры в тот самый файл?

Хреново вы поняли. Хотя могли и догадаться.

Разве не понятно что инсерт нужно ставить на определенное событие, тогда когда была отправлена форма? При этом еще проверять и хоть как-то фильтровать входящие данные.

anton000:
Спасибо, большое! Теперь нету простых строчек.

Ага, нету...

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий