php
2013-11-15 6 views 0 likes 
0

Я пытаюсь создать строку, которую я могу использовать в инструкции select, которая содержит 3 многозначных значения сериализации с другой страницы. Например:Извлечение нескольких значений, выбранных в форме из базы данных

$FullName1 = implode("' OR FullName = '", $_POST['FullName']); 
$FullName2 = "FullName = '" . $FullName1; 
$FullName0 = $FullName2 . "' "; 

echo $FullName0; 

дает мне «FullName = 'Joe Dirt' ИЛИ ​​FullName = 'John Doe' , $ ProjectType1 = взрывать (" 'OR ProjectType ='", $ _POST [ 'ProjectType']) ; $ ProjectType2 = "ProjectType = '". $ ProjectType1; $ ProjectType0 = $ ProjectType2. «»;

echo $ProjectType0; 

дает мне «ProjectType = 'встречи с клиентами' OR ProjectType = 'ESN Изменить» и

$Company1 = implode("' OR Company = '", $_POST['Company']); 
$Company2 = "Company = '" . $Company1; 
$Company0 = $Company2 . "' "; 

echo $Company0; 

дает мне «Компания = 'Acme' ИЛИ ​​Компания =' Airgas»

то, что я хочу сделать, это организовать эти три в нечто вроде

“$string = 
Company = 'Acme' AND ProjectType = 'Customer Meetings' AND FullName = 'Joe Dirt' 
OR 
Company = 'Acme' AND ProjectType = 'Customer Meetings' AND FullName = 'John Doe' 
OR 
Company = 'Acme' AND ProjectType = 'ESN Change' AND FullName = 'Joe Dirt' 
OR 
Company = 'Acme' AND ProjectType = 'ESN Change' AND FullName = 'John Doe' 
OR 
Company = 'Airgas' AND ProjectType = 'Customer Meetings' AND FullName = 'Joe Dirt' 
OR 
Company = 'Airgas' AND ProjectType = 'Customer Meetings' AND FullName = 'John Doe' 
OR 
Company = 'Airgas' AND ProjectType = 'ESN Change' AND FullName = 'Joe Dirt' 
OR 
Company = 'Airgas' AND ProjectType = 'ESN Change' AND FullName = 'John Doe' 
OR 
" 

так что я ок n проведите так же, как

"SELECT * FROM Tracker WHERE ID > 0 AND $string ORDER BY Created DESC" 

Кроме того, если есть более простой способ сделать это, я за это! Благодарю.

+1

Прежде всего, никогда не используйте данные POST непосредственно в вашем запросе. Пользователь может манипулировать им и злоупотреблять вашей базой данных. он называется [SQL injection] (http://php.net/manual/en/security.database.sql-injection.php) – Ibu

+0

Я пробовал это; $ info3 = "SELECT * FROM Tracker ГДЕ ID> 0 И компания IN ('Acme', 'Airgas') И ProjectType IN (« Встречи с клиентами »,« Изменение ESA ») И FullName IN ('Joe Dirt', 'John Doe ")"; $ rs3 = odbc_exec ($ conn1, $ info3); while ($ row = odbc_fetch_array ($ rs3)) {... Он не вызывает ошибку, но ничего не извлекается. Я использую MS Access в качестве backend javascript для отправки данных со страницы формы на страницу, которая просматривает информацию и возвращает ее на страницу формы. – James

ответ

0

первую очередь, использовать входы, как это:

<input type="text" name="s[]" value="s1" /> 
<input type="text" name="s[]" value="s2" /> 
<input type="text" name="s[]" value="" /> 


Данные в $ _REQUEST/$ _ POST/$ _ GET будет выглядеть следующим образом:

$_REQUEST["s"] = array("s1","s2",""); // attention: order may vary 


, так что вы хотите сделать: полоса пустых значений и обрезка результатов:

$trimmed = array_map("trim",$_REQUEST["s"]); // all values are trimmed 
$cleaned = array_filter($trimmed); // all empty strings were left out 


так что теперь у вас есть массив с допустимыми значениями. Так вы пишете фильтр-нить вроде этого: используйте SQL «в» оператора (see docu)

// I assume you have an array of filters called $filters 
// I assume you have an SQL connection object called $db - @link http://www.php.net/manual/en/book.mysqli.php for details 
// I assume you are familiar with protection methods against SQL injections like mysqli::real_escape_string 
if (count($cleaned)) 
{ 
    $escaped = array_map(array($db, "real_escape_string"), $cleaned); 
    $filters[] = "FullName in ('". implode("','", $escaped) ."')"; 
} 


И если вы сделали со всеми фильтрами, вы пишете запрос, как это:

$qry = "select x from y". (count($filters) ? " where ". implode(" and ", $filters) : "") ." order by z desc" ; 


Вы могли бы повторить описанную технику, чтобы получить строку, как

select * from Tracker where Company in ('Acme','Airgas') and ProjectType in ('Customer Meetings','ESN Change') and FullName in ('John Doe','Joe Dirt') order by Created desc 


Другой подсказка: вы можете использовать технику для имен в также с ключами массива, а также в флажках или выбор нескольких полого

<input type="checkbox" name="x[1]" value="a"/> 
<input type="checkbox" name="x[2]" value="b"/> 
<input type="checkbox" name="x[3]" value="c"/> 

<select name="y[]" multiple> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="opel">Opel</option> 
    <option value="audi">Audi</option> 
</select> 


С этим знанием вы должны быть в состоянии адаптируйте код к вашим потребностям, напишите некоторые довольно маленькие функции, чтобы получить код в порядке и всегда помните: будьте осторожны с SQL-инъекцией.

Весь код не проверен. написал только для того, чтобы дать вам представление, что делать

Смежные вопросы