Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> в чем моя ошибка? 
V
    Опции темы
exe1389
Дата 20.7.2011, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 7.4.2011

Репутация: нет
Всего: нет



написал простейшее меню поиска по бд
выводит все варианты в таблице что бы я не забил
Код

<form action="?" method="POST">
   art: <input type="art" value="<?=$_POST['art']?>"> <br>
   factory: <input type="art" value="<?=$_POST['factory']?>"> <br>
    <input type="submit" name="search" value="search">
</form>
<?php
    if($_POST['search']){
        mysql_pconnect("host","root","password");
        mysql_select_db("dbname");
        $query= "SELECT * FROM table WHERE art like '%".$_POST['art']."%' and factory like '%".$_POST['factory']."%'";
        $res= mysql_query($query);
        echo "<table>";
        while($row= mysql_fetch_assoc($res)){
            echo "<tr>";
                echo "<td>".$row['art']."</td>";
                echo "<td>".$row['factory']."</td>";
                echo "<td>".$row['price']."</td>";
                echo "<td>".$row['location']."</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
?>




PM MAIL   Вверх
voral
Дата 20.7.2011, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

Репутация: нет
Всего: нет



у вас два безымянных input неизвестного типа art. Переменных с именами art и factory не существует

Добавлено через 56 секунд
Код

<form action="?" method="POST">
   art: <input type="text" name="art" value="<?=$_POST['art']?>"> <br>
   factory: <input type="text" name="factory" value="<?=$_POST['factory']?>"> <br>
    <input type="submit" name="search" value="search">
</form>


PM MAIL WWW   Вверх
Gold Dragon
Дата 20.7.2011, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



а что у тебя POST возвращает?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
CruorVult
Дата 20.7.2011, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 1
Всего: 28



Цитата(exe1389 @  20.7.2011,  10:44 Найти цитируемый пост)
input type="art"

Сильно!  smile 
PM MAIL Skype   Вверх
exe1389
Дата 20.7.2011, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 7.4.2011

Репутация: нет
Всего: нет



тогда каким способом мне нужно сделать, что бы все это заработало? 
и искало по колонкам "art" и "factory" ?

PM MAIL   Вверх
CruorVult
Дата 20.7.2011, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 1
Всего: 28



Цитата(exe1389 @  20.7.2011,  10:56 Найти цитируемый пост)
тогда каким способом мне нужно сделать, что бы все это заработало? 

способом изучения основ веба а именно HTML!
PM MAIL Skype   Вверх
voral
Дата 20.7.2011, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

Репутация: нет
Всего: нет



Я ж привел тебе html часть твоего файла. Копируй вместо своей и используй
PM MAIL WWW   Вверх
exe1389
Дата 20.7.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 7.4.2011

Репутация: нет
Всего: нет



voral, спасибо
PM MAIL   Вверх
voral
Дата 20.7.2011, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

Репутация: нет
Всего: нет



Совет. Используй для отладки
Код

print_r($_POST);

можешь много нового узнать smile
PM MAIL WWW   Вверх
exe1389
Дата 21.7.2011, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 7.4.2011

Репутация: нет
Всего: нет



ещё один вопрос по этому коду:
нужно ли устанавливать кодировку по умолчанию?
PM MAIL   Вверх
Gold Dragon
Дата 21.7.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



это как? Ты в какой кодировке делаешь сайт?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
exe1389
Дата 21.7.2011, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 7.4.2011

Репутация: нет
Всего: нет



это не сайт а просто страничка, вот
пока в браузер'е не поставишь кодировку не отображается нормально


Это сообщение отредактировал(а) exe1389 - 21.7.2011, 15:16
PM MAIL   Вверх
Gold Dragon
Дата 21.7.2011, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



я лично всегда прописываю кодировку в .htaccess и потом проблем не возникает.


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
voral
Дата 21.7.2011, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

Репутация: нет
Всего: нет



Цитата(exe1389 @  21.7.2011,  15:09 Найти цитируемый пост)
это не сайт а просто страничка, вот
пока в браузер'е не поставишь кодировку не отображается нормально

Браузеры очень демократично относятся к полноте кода страницы. Если чего то не хватает они ставят то, что считают необходимым. В принципе этим можно пользоваться, но до разу. Все просто: может в следующей версии одного из браузеров будет подставляться другое значние и ты получишь косяк. По этому нужно стараться придерживаться спецификаций html и сcs. И указывать не только кодировку, но и доктайп и теги html, head, title и body (и открывающие и закрывающие). Для FireFox есть плагин HTML Validator. Поставь его и в случе ошибок в HTML в статусбаре будет сигнальный значек - нажимаешь перечислены ошибки с коротким описанием. 
В общем с точки зрения браузеров это не обязательно, но сделай это обязательным для самого себя. Давать право "верстать" страницу браузерам - это плохо.
PM MAIL WWW   Вверх
Gold Dragon
Дата 21.7.2011, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



К примеру, если сайт написан в кодировке UTF-8, то не на всех серверах помогает указание кодировки только в head


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
voral
Дата 21.7.2011, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

Репутация: нет
Всего: нет



Цитата(Gold Dragon @  21.7.2011,  15:50 Найти цитируемый пост)
К примеру, если сайт написан в кодировке UTF-8, то не на всех серверах помогает указание кодировки только в head 

А тут дело не в html или UTF. Тут дело в кривой настройке сервера. И это не отменяет хорошего правила - следовать стандартам. 
Я по крайней мере последних лет 7 же и не встречал таких хостингов.

PM MAIL WWW   Вверх
Gold Dragon
Дата 21.7.2011, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Цитата(voral @  21.7.2011,  17:39 Найти цитируемый пост)
А тут дело не в html или UTF.
и в том и другом и в браузерах.. всего по чуть-чуть и будет проблема.. так что не только спецификации следовать, но ещё и не особо полагаться на сервер. smile Я сейчас вообще жёстко перешёл на HTML5 smile

В любом случае код изначально не верен, вернее очень и очень опасный. Мало того, что запрос не обрабатывается после получения, но он ещё и напрямую вставляется в запрос к базе. 
exe1389, я так понимаю ты только начинаешь экспериментировать с передачей данных на сервер. Запомни, всё что приходит от клиента всегда опасно(!) А значит всегда нужно проверять на соответствие и экранировать.

И насколько я понял по коду, если в базе данных нет то ты напечатаешь 
Код

<table></table>
я бы не сказал что это соответствует спецификации ;)

Добавлено через 7 минут и 51 секунду
кстати, а почему mysql_pconnect?

Это сообщение отредактировал(а) Gold Dragon - 21.7.2011, 19:03


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
exe1389
Дата 22.7.2011, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 7.4.2011

Репутация: нет
Всего: нет



Да я только начинаю...
т.е. мне нужно создать файл с "конфигом" для подключения к базе и использовать такую схему? 
config.php:
Код

<?php 
$link = mysql_connect('host', 'user', 'password') or die("Не могу соединиться"); 
mysql_select_db('dbname', $link); 
?>

и основной код:
Код

<?php
function show_form(){ 
        require 'config.php'; 
<form action="?" method="POST">
   art: <input type="text" name="art" value="<?=$_POST['art']?>"> <br>
   factory: <input type="text" name="factory" value="<?=$_POST['factory']?>"> <br>
    <input type="submit" name="search" value="search">
</form>
    if($_POST['search']){
        $query= "SELECT * FROM arts WHERE art like '%".$_POST['art']."%' and factory like '%".$_POST['factory']."%'";
        $res= mysql_query($query);
        echo "<table>";
        while($row= mysql_fetch_assoc($res)){
            echo "<tr>";
                echo "<td>".$row['art']."</td>";
                echo "<td>".$row['factory']."</td>";
                echo "<td>".$row['price']."</td>";
                echo "<td>".$row['location']."</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
?>
 




Это сообщение отредактировал(а) exe1389 - 22.7.2011, 10:59
PM MAIL   Вверх
voral
Дата 22.7.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.3.2008
Где: Иваново

Репутация: нет
Всего: нет



Цитата(exe1389 @  22.7.2011,  10:55 Найти цитируемый пост)
т.е. мне нужно создать файл с "конфигом" для подключения к базе и использовать такую схему? 

Это зависит от задачи. Если у вас всего один скрипт - то можно и не надо.
Плохое место не здесь. Простейшее и безобидное. Что будет если посетитель введет символ % в оба поля? Или просто энтер нажмет (по сути у вас это и было в начале). Заметье  это очень безобидное - все го лишь увидят все ваши записи. А ведь можно добавит ввести символ кавычки (т.е. закончить ваше выражение и доработать sql запрос до состояния когда он будет, например, показывать гораздо больше информации


PM MAIL WWW   Вверх
Gold Dragon
Дата 22.7.2011, 16:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



exe1389, если разобрать всё по пунктам (конечно всё зависит от проекта, но будем считать что он будет большим, то вот что нужно сделать, вернее что бы сделал я:

1. Разделил бы PHP и HTML.
т.е. одна функция выводит форму, другая обрабатывает, третья выводит результат. Плюс сюда же нужно вставить обработчик "что делать если ничего не введено" и обработчик при ошибки введённых данных

2. Для работы с базой воспользовался бы самостоятельным классом. Если не можешь или не хочешь писать свой, то их достаточное количество готовых. И в будущем если что-то будет меняться, то тебе достаточно просто внести изменения в класс, а не искать всё по всему коду. Да и не придётся обрабатывать всякое такое  while($row= mysql_fetch_assoc($res)), а просто отправить к примеру запрос и на выходе получить уже готовый массив

3. Однозначно ввёл проверку входящих данных. Хотя бы элементарное, удалить лишние провебы в начале и конце, удалить скрипты, удалить тэги, экранировать спецсимволы. А самый лучший вариант пользоваться регуляркой и оставлять нужное.. Например если это телефон то там не может быть букв, и наоборот, если это фамилия, то там только буквы..

4. Всё присваивал переменной и только в самом конце выводил бы на экран. Так тебе проще избежать ошибок.. например:
Код

$qqq = false;
    while($row= mysql_fetch_assoc($res)){
            $qqq .= "<tr>";
            $qqq .= "<td>".$row['art']."</td>";
            $qqq .= "<td>".$row['factory']."</td>";
            $qqq .= "<td>".$row['price']."</td>";
            $qqq .=  "<td>".$row['location']."</td>";
            $qqq .=  "</tr>";
        }
if($qqq){
     $qqq = "<table>".$qqq."</table>";
}
//**************
echo $qqq;


5. Хранил бы данные для подключения к базе в отдельном файле, например с правами 644. Так безопаснее. Да и всегда знаешь где у тебя данные по настройке.


Это сообщение отредактировал(а) Gold Dragon - 22.7.2011, 16:32


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
exe1389
Дата 26.7.2011, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 7.4.2011

Репутация: нет
Всего: нет



Gold Dragon, спасибо большое!
PM MAIL   Вверх
exe1389
Дата 19.8.2011, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 7.4.2011

Репутация: нет
Всего: нет



В общем получилось как то вот так:
Код

<?php

function find($name='', $nm_nabor='', $art='', $factory=''){
    $db = mysql_connect ("localhost","---","---");
    mysql_select_db("amdstudiru_bot",$db);
    mysql_query("SET NAMES 'cp1251'");
    $result = mysql_query("SELECT * FROM arts WHERE productName LIKE '%$name%' AND collection LIKE '%$nm_nabor%' AND art LIKE '%$art%' AND factory LIKE '%$factory%' ",$db);
        if (!$result){
            echo "Запрос на выборку данных из базы не прошел. Напишите об этом администратору [email protected]. <br> <strong>Код ошибки:</strong>";
            exit(mysql_error());    
        }
        if (mysql_num_rows($result)>0){
                echo '<table width="0" border="1" cellpadding="2" cellspacing="0">';
                echo '<tr><td>название</td><td>набор</td><td>артикул</td><td>фабрика</td><td>цена</td><td>ссылка на страницу откуда была взята информация</td></tr>';
            
            while($myrow = mysql_fetch_array($result)){
                echo '<tr><td>'.$myrow['productName'].'</td><td>'.$myrow['collection'].'</td><td>'.$myrow['art'].'</td><td>'.$myrow['factory'].'</td><td>'.$myrow['price'].'</td><td>'.$myrow['location'].'</td></tr>';
            }
            
                echo '<table>';
        } else {
            echo 'Поиск не принес результатов! Измините параметры поиска.';
        }
}

function create_select(){
    $db = mysql_connect ("localhost","---","---");
    mysql_select_db("---",$db);
    mysql_query("SET NAMES 'cp1251'");
    $result = mysql_query("SELECT DISTINCT factory FROM arts",$db);
        if (!$result){
            echo "Запрос на выборку данных из базы не прошел. Напишите об этом администратору [email protected]. <br> <strong>Код ошибки:</strong>";
            exit(mysql_error());    
        }
        if (mysql_num_rows($result)>0){
            while($myrow = mysql_fetch_array($result)){
                echo '<option value="'.$myrow['factory'].'">'.$myrow['factory'].'</option>';
            }
        }
}

if ($_POST['status']=="finding"){

    parse_str($_POST['param'], $output); 
    $productName = $output['name'];
    $collection = $output['name_nabor'];
    $art = $output['art'];
    $factory = $output['fabrica'];
    find($productName, $collection, $art, $factory);

}

if ($_POST['status']=="spisok"){
    create_select();
}

?>

только пока не знаю как реализовать в этом чтобы искал не по одной таблице, а по 2-м
поможете ?
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1195 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.