Tomasz Serwański

Tomasz Serwański Microsoft Dynamics
CRM - konsultant
biznesowy

Temat: php, select, drop-down i select *

mam formularz w ktorym jest drop-down; w drop-down mam 'czerwony', 'niebieski' i 'dowolny'; kiedy dane z formularza sa przekazywane do skryptu (send), to sql select w skrypcie dziala perfekcyjnie dla wybranego 'czerwony' lub 'niebieski', ale dla wybranego 'dowolny' nie zwraca nic - co w sumie nie dziwi, bo sql ma postac:

select... where color=$color (gdzie 'color' przyjmuje wartosci 'czerwony', niebieski' lub.. i wlasnie o to lub mi chodzi; probowalem dla wartosci 'dowonly' w formularzu zostawin pusete pole - nie dziala, probowalem wystawic * - tez nie.. jak przekazac do zapytania sql informacje zby w razie wybrania w formularzu 'dowolny' wybieral kazdy kolor?

konto usunięte

Temat: php, select, drop-down i select *

dla dowlonego nie
select color='*'
tylko
select color like '%'
Janusz Skudrzyk

Janusz Skudrzyk Członek zarządu,
weblabs.pl

Temat: php, select, drop-down i select *

Można jeszcze zrobić trochę inaczej:

$where = array() ;

if( $_POST['aaa'] == 'bbb' )
$where[] = 'xxx=yyy' ;

if( $_POST['ccc'] == 'ddd' )
$where[] = 'www like \'zzz%\'' ;

if( !empty( $where ))
$where_str = ' where '.implode( ' and ', $where ) ;

$query = "select kolumny from tabela $where_str" ;


Nie ma warunków, nie ma where w zapytaniu (w końcu jak wszystkie, to wszystkie, nie potrzeba do tego porównań). Przy rozbudowie wyszukiwarki będzie łatwiej dorzucić kolejne warunki (pod warunkiem, że wszystkie parametry wyszukiwania mają być objęte AND lub OR).
Tomasz Serwański

Tomasz Serwański Microsoft Dynamics
CRM - konsultant
biznesowy

Temat: php, select, drop-down i select *

a.. to jednak moze z przykladem:

- w formularzu mam:
<select name="color"..>
<option value="czerwony">czerwony
<option value="zielony">zielowny
<option value="dowolny>dowolny
</select>

- z kolei z skrypcie jest:
$color="$_POST['color'];
[..]
..where color = '".$color."'..

czyli do skryptu przekazuje wartosc ktora jest wklejana do sql jako tekst - i swietnie dziala przy podstawieniu 'where color = niebieski' lub 'where color = czerwony', ale:
- 'where color = *' nie dziala
- 'where color = like %' tez nie

czy jest jakas maska/magiczny znak ktory pozwoli na uzycie go w miejscu 'dowolny' w formularzu tak, zeby skrypt selektowal wszystko, ale.. bez doglebnego dewastowania istniejacego kodu?..

konto usunięte

Temat: php, select, drop-down i select *

jak pisałem
nie - 'where color = like %'
tylko - 'where color like "%"'

całość zapytania możesz zbudować na LIKE
wtedy ominą cię warunki if itd.

będziesz miał coś takiego
where color like $color

a kolor dowolny możesz obsłużyć warunkiem
if($_POST['color']=='dowolny') $color="%";Mariusz M. edytował(a) ten post dnia 24.12.10 o godzinie 00:50
Tomasz Serwański

Tomasz Serwański Microsoft Dynamics
CRM - konsultant
biznesowy

Temat: php, select, drop-down i select *

Mariusz M.:
jak pisałem
nie - 'where color = like %'
tylko - 'where color like "%"'
no nie.. do skryptu jest passowane tylko jedno slowo, obecnie 'niebieski', 'zielony' lub 'dowolny'; w skrypcie mam 'where =', a 'like' nie zadziala z '='..

konto usunięte

Temat: php, select, drop-down i select *

Poczytaj manuala

dajesz albo = albo LIKE

Do wyszukiwania rekordów przez dopasowanie sluży LIKE
= używasz do wyszukiwania konkretnych danych.Mariusz M. edytował(a) ten post dnia 24.12.10 o godzinie 00:54
Tomasz Serwański

Tomasz Serwański Microsoft Dynamics
CRM - konsultant
biznesowy

Temat: php, select, drop-down i select *

Mariusz M.:
jak pisałem
nie - 'where color = like %'
tylko - 'where color like "%"'

całość zapytania możesz zbudować na LIKE
wtedy ominą cię warunki if itd.

będziesz miał coś takiego
where color like $color

a kolor dowolny możesz obsłużyć warunkiem
if($_POST['color']=='dowolny') $color="%";Mariusz M. edytował(a) ten post dnia 24.12.10 o godzinie 00:50
juz.. pojalem; to jest to, dzieki :)

konto usunięte

Temat: php, select, drop-down i select *


switch($_POST['color']) {
case 'Dowolny':
$color = "%";
break;
default:
$color = $_POST['color'];
break;
}
mysql_query('SELECT * FROM `table` WHERE `color` LIKE "'.$color.'";');
Tomasz Zadora

Tomasz Zadora programuję

Temat: php, select, drop-down i select *



$allowedValues = array('czerwony', 'niebieski', 'dowolny');

if (isset($_POST['color']) && in_array($_POST['color'], allowedValues))
{
$sql = "SELECT * FROM `table` WHERE `color`";
if ($_POST['color'] == 'dowolny') $sql .= " IS NOT NULL";
else $sql .= " = '".$_POST['color']."'";

} // end of // if (isset($_POST['color']) && in_array($_POST['color'], allowedValues))

konto usunięte

Temat: php, select, drop-down i select *

Jeszcze brakuje rozwiązania z MVC z Doctrine aby obsłużyć zapytanie które można zrobić używając 2 linijek kodu.
Jakub L.

Jakub L. Programista

Temat: php, select, drop-down i select *

Ja się zastanawiam dlaczego ci co pokazują kod nie mają nawyku walidacji sqla nawet w przykładach.

Drugie jest nieco lepsze, bo nie da sięgo zepsuć bawiąc się formularzem po stronie klienta i postując coś głupiego.
Tomasz Zadora

Tomasz Zadora programuję

Temat: php, select, drop-down i select *

@Jakub: "Walidacja SQL-a" - masz na myśli "prepared statement" albo inne rozwiązanie broniące przed SQLInjection ? Jeżeli o to chodzi, to celowo to pominąłem :)
Bartosz Ratajczyk

Bartosz Ratajczyk MS SQL Developer

Temat: php, select, drop-down i select *

A nie lepiej dla koloru 'dowolny' zrezygnować z WHERE?
Skoro ma być dowolny, to nie ma co komplikować warunkiem.
Tomasz Zadora

Tomasz Zadora programuję

Temat: php, select, drop-down i select *

To zależy - nie wiemy czy kolumna kolor może być NULL czy nie. Jeżeli może być NULL wtedy dowolny kolor oznacza każdy określony czyli wartość NOT NULL.



Wyślij zaproszenie do