Вывод строки из mysql по форме.

помогите разобраться , пожалуйста .
Нужна форма поиска по 2м полям таблицы mysql .
Таблица называется otchet , поля по которым нужен поиск клиент и бирки с.
Уже неделю бьюсь с поиском хотя бы по одному полю , но ничего не выходит.
Не могли бы вы написать или исправить мой код, вот на такую простую таблицу (ниже напишу), как вывести ВСЮ информацию таблицы я знаю , а вот как через форму вывести только строки относящиеся к одному значению поля не могу ну никак сообразить.
Таблица


клиент:дата приемки:бирки с
———:——————:————-
первый:10марта 2013: 00034
———:——————:————-
второй:11марта 2013: 00037
———:——————:————-
третий:11марта 2013: 00045
———:——————:————-
второй:13марта 2013: 00056
———:——————:————-

**файл формы forma.php**

<form method="POST" action="vivod.php">
<input type="hidden" name="posted" value="true"> 
 Выберите критерий поиска:<br>
 <select name="posted">
     <option value="клиент">клиент</option> //**выбираем `клиент` **
     <option value="бирки с">бирки с</option> //**или выбираем `бирки с` **
 </SELECT><br>
 Введите строку:<br>
 <INPUT name="text" type="text"><br> //**если `клиент`, то пишем первый,второй или третий, 
`если `бирки      с` пишем 00034,00037,00045 или 00056** 
<INPUT type=submit value="Поиск">
</form>

**файл обработки (запроса)и вывод на экран vivod.php**

<?php
$db=mysql_connect("localhost","root","");//здесь данные вашей таблицы
mysql_select_db("mydatabasaaccess",$db);//здесь выбор базы данных

// **Здесь будет храниться значение выбранного в форме варианта**
$posted = $_POST['posted'];

// **Формируем текст запроса к базе**
$query_string = "SELECT * FROM `otchet` WHERE `клиент`='$posted'";
$db_result = mysql_query($query_string) or die(mysql_error());

//**формируем таблицу вывода** 
echo '<table border=1>';
echo '<tr align="center">
<td>'.'клиент'.'</td>
<td>'.'дата приемки'.'</td>
<td>'.'бирки с'.'</td>
</tr>
';

//**выводим результаты в таблицу**
while ($array = mysql_fetch_array($db_result))
{
echo '
<tr>
<td>'.$array['клиент'].'</td>
<td>'.$array['дата приемки'].'</td>
<td>'.$array['бирки с'].'</td>
</tr>
';
}
echo '</table>'
?>

// при набирании в форме «клиент» — второй ,
на странице должен выйти ответ в виде таблички со строчками


клиент:дата приемки:бирки с
———:——————:————-
второй:11марта 2013: 00037
———:——————:————-
второй:13марта 2013: 00056

// при набирании в форме «бирки с» — 00037
на странице должен выйти ответ в виде таблички со строчкой


клиент:дата приемки:бирки с
———:——————:————-
второй:11марта 2013: 00037
——————————————-
Чувствую , что нет связи с самой формой поиска , но во всех перечитанных примерах все пишут всё по разному , если не трудно наставьте на путь истинный ,
заранее спасибо.

Форма

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>MySQL query example</title>
    </head>
    <body>
        <form method="post" action="submit.php">
            <p><label for="id_posted">Выберите критерий поиска:</label>
             <select name="posted" id="id_posted">
                 <option value="client">Клиент</option>
                 <option value="birki_s">Бирки с</option>
             </select>

             <p><label for="id_text">Введите строку:</label>
             <input name="text" type="text" id="id_text">
             <button type="submit">Найти</button>
        </form>
    </body>
</html>

Обработка запроса

<?php


if (empty($_POST)) {
    // Если страницу открыли не POST-ом,
    // перенаправляем на страницу с формой
    header('HTTP/1.1 301 Moved Permamently');
    header('Location: form.php');
    exit();
}

$db = mysql_connect("localhost", "root", ""); //здесь данные вашей таблицы
#mysql_select_db("mydatabasaaccess", $db); // здесь выбор базы данных

$posted = null;
$text = null;

if (!empty($_POST['posted'])) {
    // Здесь будет храниться значение выбранного в форме варианта
    $posted = $_POST['posted'];
}

if (!empty($_POST['text'])) {
    $text = mysql_real_escape_string(trim($_POST['text']));
}

// Список вариантов для вывода
$rows = array();

if ($text) {
    // Формируем текст запроса к базе
    if ($posted === 'client') {
        $query_string = "SELECT * FROM otchet WHERE `client`='$text'";
    } else if ($posted === 'birki_s') {
        $query_string = "SELECT * FROM otchet WHERE `birki_s`='$text'";
    } else {
        echo 'Вы выбрали некорректное значение: ' . $posted;
        exit();
    }
    $db_result = mysql_query($query_string) or die(mysql_error());

    while ($row = mysql_fetch_assoc($db_result)) {
        $rows[] = $row;
    }
} else {
    echo "Введите текст поискового запроса";
    exit();
}


?><!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>MySQL query example</title>
        <style>
        </style>
    </head>
    <body>
        <table border="1" cellpadding="10">
            <tr align="center">
                <th>Клиент</th>
                <th>Дата приемки</th>
                <th>Бирки с</th>
            </tr>

            <?php foreach ($rows as $row): ?>

            <tr>
                <td><?php echo $row['client']?></td>
                <td><?php echo $row['datetime']?></td>
                <td><?php echo $row['birki_s']?></td>
            </tr>

            <?php endforeach ?>
        </table>
    </body>
</html>

Дамп базы

CREATE DATABASE IF NOT EXISTS mydatabasaaccess;

CREATE TABLE IF NOT EXISTS mydatabasaaccess.otchet (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    client VARCHAR(100),
    datetime DATE,
    birki_s VARCHAR(20)
);

INSERT INTO mydatabasaaccess.otchet (
    client, datetime, birki_s
) VALUES (
    'Первый', NOW(), '00034'
);
INSERT INTO mydatabasaaccess.otchet (
    client, datetime, birki_s
) VALUES (
    'Второй', NOW(), '00037'
);
INSERT INTO mydatabasaaccess.otchet (
    client, datetime, birki_s
)  VALUES (
    'Третий', NOW(), '00045'
);
INSERT INTO mydatabasaaccess.otchet (
    client, datetime, birki_s
) VALUES (
    'Второй', NOW(), '00056'
);

Спасибо !
После такого понимаешь , что проще заплатить , чтобы сделали , а не мучиться самому ;(

Если еще немного помучиться самому — т.е. надо поменять во всех таблицах имена столбцов с русских на англ ? в базе имеется ввиду.

Вообще изначально хотелось , чтобы каждая новая таблица из EXCEL или ACCESS , синхронизировалась в такую вот базу , а клиенты могли искать строчки касающиеся только их, естественно сначала зарегистрировавшись на сайте и вход в эту базу строго по email и паролю.
Вопрос , — сколько может стоить такая работа. Исходник , который в excel, могу предоставить.

Забыл написать , что поиск заработал , когда изменил русские на англ и убрал # ;)
Но сплошные траблы с кодировкой ...

сплошные траблы с кодировкой ...

Сохраняйте все файлы в UTF-8. И кодировку для базы выставите utf8_general_ci. Тогда никаких проблемы быть не должно.

Вопрос , — сколько может стоить такая работа. Исходник , который в excel, могу предоставить.

Да не платите вы никому. Экспортируете таблицу Excel в CSV. Берете библиотеку для парсинга CSV-файлов и вставляете все строки файла в базу:

require_once 'parsecsv/parsecsv.lib.php';

$filename = 'excel_dump.csv';

$csv = new parseCSV();
$csv->encoding('UTF-8', 'UTF-8');

$csv->auto($filename);
$rows = $csv->data;


// Сохраняем информацию из CSV файла в базу
foreach ($rows as $row) {
    $query_string = "INSERT INTO otchet (client, datetime, birki_s) VALUES ($row['client'], $row['datetime'], $row['birki_s'])";
    mysql_query($query_string) || die(mysql_error());
}

Столбцы в Excel-таблице называете соответственное названиям полей базы. То, что выше — всего лишь учебный пример. При импорте нужно делать кучу проверок и т.п.

При импорте нужно делать кучу проверок и т.п.

Опять же , как ее делать , потом еще куча вопросов повылезает ...

Может проще всё сделать через web , т.е. и заполняемость таблицы мной и поиск мной и клиентами тоже через web , заплатив кому-то за эту работу.
Другой вопрос в цене , т.к. в ехсел еще и формулы присутствуют.

Если честно , то это моя прихоть и желание упростить свою работу, так как сейчас я всё делаю в ехсел и по запросу рассылаю клиентам , а так они сами смотрели бы и всё.
Спасибо вам за понимание.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.