peklo
6.05.2014, 18:03:43
Witam
Mam problem ze zmianą warunku w wyszukiwarce. Nie wiem jak zmienić ten kod żeby do warunku WHERE dodać warunek IN. Mam problem z checkboxami o tej samej nazwie. Pomimo zaznaczenia kilku wyszukuje mi tylko po ostatnim.
Chodzi o zmienne id_prawo_jazdy.
Tabele połączone są ze sobą zmienną ID gdzie id-głównej=id-pomocniczej (dla id-głównego może być wiele id pomocniczych w tym przypadku id_prawo_jazdy). Wszystko w wyszukiwarce działa OK oprócz niestety tych checkbox o nazwie id_prawo_jazdy
<?php
':id_kategoria' => 1,
);
'id_kategoria = :id_kategoria'
);
if (!empty($_POST['szukaj'])) {
$_SESSION['form'] = array( 'miasto' => $_POST['miasto'],
'id_prawo_jazdy' => $_POST['id_prawo_jazdy'],
);
}
'miasto' => !isset($_SESSION['form']) ?
null : $_SESSION['form']['miasto'], 'id_prawo_jazdy' => !isset($_SESSION['form']) ?
null : $_SESSION['form']['id_prawo_jazdy'], );
if (!empty($formData['miasto'])) {
$where[] = "miasto LIKE :miasto";
$bind[':miasto'] = '%' . $formData['miasto'] . '%';
}
if (!empty($formData['id_prawo_jazdy'])) {
$where[] = 'id_prawo_jazdy = :id_prawo_jazdy';
$bind[':id_prawo_jazdy'] = $formData['id_prawo_jazdy'];
}
//Przykładowe pola wyszukiwarki
?>
<form action="" method="post" id="signupForm" style='display: inline'>
Miasto
<input type="text" id="miasto" name="miasto" value="
<?php echo $formData['miasto'];?>"/>
Prawo jazdy
<input name='id_prawo_jazdy[]' type='checkbox' value='1'
<?php if($formData['id_prawo_jazdy']==1
) {echo 'checked="checked"';} ?>> AM
<input name='id_prawo_jazdy[]' type='checkbox' value='2'
<?php if($formData['id_prawo_jazdy']==2
) {echo 'checked="checked"';} ?>> A1
</form>
<?php
try
{
$stmt = $pdo->prepare("SELECT o.miasto,o.id_kategoria,p.id_ogloszenia,p.id_prawo_jazdy FROM ogloszenia o LEFT OUTER JOIN pj p on o.id=p.id_ogloszenia WHERE ". implode( ' AND ', $where )." group by o.id order by o.id DESC"); $stmt->execute( $bind );
while($ogloszenia = $stmt -> fetch())
{
// WYSWIETLENIE TABELI Z DANYMI
}
$stmt -> closeCursor();
}
catch(PDOException $e)
{
print "Bład: " . $e->getMessage() . "<br/>";
}
?>
zmieniłem tu na IN to teraz mam błąd
if (!empty($formData['id_prawo_jazdy']))
{
$IN[] = 'id_prawo_jazdy = :id_prawo_jazdy';
$bind[':id_prawo_jazdy'] = $formData['id_prawo_jazdy'];
}
trueblue
6.05.2014, 18:12:54
peklo
6.05.2014, 18:28:56
czyli mam zrobić coś takiego?
if (!empty($formData['id_prawo_jazdy'])) {
$IN = [1,2];
$bind[':id_prawo_jazdy'] = $formData['id_prawo_jazdy'];
}
trueblue
6.05.2014, 18:45:40
Nie.
Spróbuj:
$zap=str_repeat('?,',count($ids)-1. '?';
$stmt = $pdo->prepare("SELECT o.miasto,o.id_kategoria,p.id_ogloszenia,p.id_prawo_jazdy FROM ogloszenia o LEFT OUTER JOIN pj p on o.id=p.id_ogloszenia WHERE ". implode( ' AND ', $where ).(!empty($_POST['id_prawo_jazdy'])?" AND p.id_prawo_jazdy IN (".$zap.")":"")." group by o.id order by o.id DESC");
IF(!empty($_POST['id_prawo_jazdy'])){
foreach($_POST['id_prawo_jazdy'] AS $idpz){
$stmt->bindValue(1+count($bind),$idpz,PDO::PARAM_INT);
}
}
$stmt->execute( $bind );
peklo
6.05.2014, 18:56:11
coś nie tak
$zap=str_repeat('?,',count($ids)-1. '?';
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
trueblue
6.05.2014, 18:57:05
peklo
6.05.2014, 19:00:53
to mam teraz błąd
Warning: str_repeat() [function.str-repeat]: Second argument has to be greater than or equal to 0
trueblue
6.05.2014, 19:03:40
peklo
6.05.2014, 19:05:13
a jak klikne w checkbox + szukaj to dodatkowo mam
Warning: Invalid argument supplied for foreach() in
oczywiscie rozumiem że to mam już usunąć
if (!empty($formData['id_prawo_jazdy'])) {
$where[] = 'id_prawo_jazdy = :id_prawo_jazdy';
$bind[':id_prawo_jazdy'] = $formData['id_prawo_jazdy'];
}
trueblue
6.05.2014, 19:07:59
Tak, ten fragment do usunięcia.
Daj print_r($_POST['id_prawo_jazdy']); przed foreach i pokaż.
peklo
6.05.2014, 19:13:33
mam taki błąd
Warning: str_repeat() [function.str-repeat]: Second argument has to be greater than or equal to 0 in
jak zaznacze checkboxy i wezme szukaj to i tak zaznacza mi jeden (ostatni) i pokazuje się błąd
Warning: Invalid argument supplied for foreach() in on line 320
Błąd połączenia z bazą!: SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters
print wyświetla mi nr checkboxa ale tylko jednego pomimo zaznaczenia kilku- czyli ostatni
acha i w ogóle nie działa wyszukiwarka pomimo wybierania innych parametrów nie mówie o id_prawo_jazdy
trueblue
6.05.2014, 19:16:27
Nie modyfikujesz czasem wcześniej w kodzie zmiennej $_POST['id_prawo_jazdy'] ?
Pokaż wynik print_r, albo lepiej: var_dump($_POST['id_prawo_jazdy']);
peklo
6.05.2014, 19:34:37
var_dump po zaznaczeniu przykładowego checkbox pokazuje
string(1) "3"
Nospor podpowiedział mi że mam "poprawic na IN i wpisanie wartosci "
Jak chce porównać kilka wartosci to mam używać IN
Ale nie wiem jak to zmienić i zaimplementować razem z WHERE z innymi zmiennymi. Chodzi pewnie o poprawę tego kodu + zapytanie
if (!empty($formData['id_prawo_jazdy']))
{
$where[] = 'id_prawo_jazdy = :id_prawo_jazdy';
$bind[':id_prawo_jazdy'] = $formData['id_prawo_jazdy'];
}
tj Trueblue nie da się już nic z tym zrobić?
trueblue
6.05.2014, 19:36:43
Kod, który Ci podałem wyżej (z poprawkami) powinien działać.
Obecnie u Ciebie jest problem z tym, że zmienna $_POST['id_prawo_jazdy'] jest stringiem, a nie tablicą.
Ale jak bardzo chcesz pozostawić poprzedni kod, to możesz zrobić tak:
$_SESSION['form'] = array(
'miasto' => $_POST['miasto'],
'id_prawo_jazdy' => implode(',',$_POST['id_prawo_jazdy']);
);
Co nie zmienia faktu, że $_POST['id_prawo_jazdy'] musi być tablicą.
Dodatkowo to przeczy idei bindowania wartości.
peklo
6.05.2014, 19:42:36
no właśnie nie wiem jak to wszystko połączyć + jeszcze bindowanie
trueblue
6.05.2014, 19:44:26
Jak to nie wiesz?
Podałem Ci jeden przykład i przed chwilą drugi.
Obecnie Twoim problemem jest to, że $_POST['id_prawo_jazdy'] nie jest tablicą.
Ponawiam pytanie: czy wcześniej w kodzie nie modyfikujesz w jakiś sposób tej zmiennej albo całej tablicy $_POST?
peklo
6.05.2014, 20:00:49
<?php
':id_kategoria' => 1,
);
'id_kategoria = :id_kategoria'
);
if (!empty($_POST['szukaj'])) {
$_SESSION['form'] = array( 'miasto' => $_POST['miasto'],
'id_prawo_jazdy' => implode(',',$_POST['id_prawo_jazdy']); );
}
'miasto' => !isset($_SESSION['form']) ?
null : $_SESSION['form']['miasto'], 'id_prawo_jazdy' => !isset($_SESSION['form']) ?
null : $_SESSION['form']['id_prawo_jazdy'], );
if (!empty($formData['miasto'])) {
$where[] = "miasto LIKE :miasto";
$bind[':miasto'] = '%' . $formData['miasto'] . '%';
}
if (!empty($formData['id_prawo_jazdy'])) {
$where[] = 'id_prawo_jazdy = :id_prawo_jazdy';
$bind[':id_prawo_jazdy'] = $formData['id_prawo_jazdy'];
}
//Przykładowe pola wyszukiwarki
?>
<form action="" method="post" id="signupForm" style='display: inline'>
Miasto <input type="text" id="miasto" name="miasto" value="
<?php echo $formData['miasto'];?>"/>
Prawo jazdy <input name='id_prawo_jazdy[]' type='checkbox' value='1'
<?php if($formData['id_prawo_jazdy']==1
) {echo 'checked="checked"';} ?>> AM
<input name='id_prawo_jazdy[]' type='checkbox' value='2'
<?php if($formData['id_prawo_jazdy']==2
) {echo 'checked="checked"';} ?>> A1
</form>
<?php
try
{
$stmt = $pdo->prepare("SELECT o.miasto,o.id_kategoria,p.id_ogloszenia,p.id_prawo_jazdy FROM ogloszenia o LEFT OUTER JOIN pj p on o.id=p.id_ogloszenia WHERE ". implode( ' AND ', $where )." group by o.id order by o.id DESC");
$stmt->execute( $bind );
while($ogloszenia = $stmt -> fetch())
{
// WYSWIETLENIE TABELI Z DANYMI
}
$stmt -> closeCursor();
}
catch(PDOException $e)
{
print "Błąd: " . $e->getMessage() . "<br/>";
}
?>
jak mam stary kod i jak wezme var_dump($_POST['id_prawo_jazdy']); i zaznaczę kilka checkbox to mam np:
array(3) { [0]=> string(1) "1" [1]=> string(1) "5" [2]=> string(2) "10" }
trueblue
6.05.2014, 21:11:23
Jeśli to co podałeś to Twój "stary" kod, to musisz znaleźć różnicę, dlaczego ten zwraca tablicę, a nowy string.
peklo
6.05.2014, 21:16:35
to jest stary kod uproszczonyh oczywiście a zostało w nim zmienione to:
'id_prawo_jazdy' => $_POST['id_prawo_jazdy'],
na to:
'id_prawo_jazdy' => implode(',',$_POST['id_prawo_jazdy']);
trueblue
7.05.2014, 07:22:57
To ja bym chciał zobaczyć co masz w $_POST['id_prawo_jazdy'] (var_dump), ale przed implodowaniem.
peklo
7.05.2014, 08:28:27
to jest stary kod bez implode
'id_prawo_jazdy' => $_POST['id_prawo_jazdy'],
wynik
array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" }
i z implode
'id_prawo_jazdy' => implode(',',$_POST['id_prawo_jazdy']);
wynik
array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" }
czyli to samo
chociaż w samym zapytaniu jest już implode czyli WHERE ". implode( ' AND ', $where )."
trueblue
7.05.2014, 08:50:29
Użyj metody z implode (post #14) i pokaż jak wygląda zapytanie sql.
peklo
7.05.2014, 08:57:24
więc teraz mam tak
if (!empty($_POST['szukaj'])) {
$_SESSION['form'] = array( 'miasto' => $_POST['miasto'],
'id_prawo_jazdy' => implode(',',$_POST['id_prawo_jazdy']); );
}
//lub wcześniej bez implode 'id_prawo_jazdy' => $_POST['id_prawo_jazdy'],
//i sql
$stmt = $pdo->prepare("SELECT o.miasto,o.id_kategoria,p.id_ogloszenia,p.id_prawo_jazdy FROM ogloszenia o LEFT OUTER JOIN pj p on o.id=p.id_ogloszenia WHERE ". implode( ' AND ', $where )." group by o.id order by o.id DESC");
trueblue
7.05.2014, 09:00:51
A tu tak:
if (!empty($formData['id_prawo_jazdy'])) {
$where[] = 'id_prawo_jazdy IN(:id_prawo_jazdy)';
$bind[':id_prawo_jazdy'] = $formData['id_prawo_jazdy'];
}
peklo
7.05.2014, 09:01:48
nie nie jest tak:
if (!empty($formData['id_prawo_jazdy'])) {
$where[] = 'id_prawo_jazdy = :id_prawo_jazdy';
$bind[':id_prawo_jazdy'] = $formData['id_prawo_jazdy'];
}
trueblue
7.05.2014, 09:05:43
Zmień na to co wyżej.
peklo
7.05.2014, 09:11:14
mam teraz tak
$_SESSION['form'] = array( 'miasto' => $_POST['miasto'],
'id_prawo_jazdy' => implode(',',$_POST['id_prawo_jazdy']); );
}
if (!empty($formData['id_prawo_jazdy'])) {
$where[] = 'id_prawo_jazdy IN(:id_prawo_jazdy)';
$bind[':id_prawo_jazdy'] = $formData['id_prawo_jazdy'];
}
$stmt = $pdo->prepare("SELECT o.miasto,o.id_kategoria,p.id_ogloszenia,p.id_prawo_jazdy FROM ogloszenia o LEFT OUTER JOIN pj p on o.id=p.id_ogloszenia WHERE ". implode( ' AND ', $where )." group by o.id order by o.id DESC");
i nadal nic
Ale teraz rzuca się do tegfo implode 'id_prawo_jazdy' => implode(',',$_POST['id_prawo_jazdy']);
Warning: implode() [function.implode]: Invalid arguments passed in on line 28
chodzi o ten błąd + wyszukuje ale tylko po ostatnim checkbox i nie zapamiętuje stanu
trueblue
7.05.2014, 09:22:44
To jest okrojony kod Twojego formularza:
<?php
echo implode(',',$_POST['id_prawo_jazdy']);
?>
<form action="" method="post"> <input name='id_prawo_jazdy[]' type='checkbox' value='1'> AM
<input name='id_prawo_jazdy[]' type='checkbox' value='2'> A1
<input name='id_prawo_jazdy[]' type='checkbox' value='3'> A2
<input name='id_prawo_jazdy[]' type='checkbox' value='4'> A
Jak zapewne po testach zobaczysz, nie ma problemu z implodowaniem $_POST['id_prawo_jazdy'].
U Ciebie jest.
Pokaż wynik var_dump($_POST) przed implodowaniem.
peklo
7.05.2014, 09:27:22
kurde bo już sie troszke pogubiłem. W tym momencie mam tak
'id_prawo_jazdy' => implode(',',$_POST['id_prawo_jazdy']);
i jak zapuściłem
echo implode(',',$_POST['id_prawo_jazdy']);
i zaznaczyłem kilka checkbox to rzeczywiście wynik pokazał np 1,2,3,4
trueblue
7.05.2014, 09:30:26
I przy zaznaczeniu tych czterech checkboxów miałeś komunikat:
Warning: implode() [function.implode]: Invalid arguments passed in on line 28
?
peklo
7.05.2014, 09:32:36
nawet dwa
Warning: implode() [function.implode]: Invalid arguments passed in on line 13
echo implode(',',$_POST['id_prawo_jazdy']);
Warning: implode() [function.implode]: Invalid arguments passed in on line 31
'id_prawo_jazdy' => implode(',',$_POST['id_prawo_jazdy']),
i dodatkowo rozwala mi nie wiem czemu css
trueblue
7.05.2014, 09:34:14
Css rozwala przez warningi.
Zrób tak:
I pokaż wynik var_dump. (Zaznacz jakieś checkboxy).
peklo
7.05.2014, 09:38:58
przed zaznaczeniem
array(0) { }
Warning: implode() [function.implode]: Invalid arguments passed in on line 14
i po zaznaczeniu checkbox
array(14) { ["data_dod"]=> string(0) "" ["data_dod2"]=> string(0) "" ["czas"]=> string(0) "" ["czas2"]=> string(0) "" ["id_lokalizacja"]=> string(2) "w1" ["id_wojewodztwo"]=> string(0) "" ["id_kraj"]=> string(0) "" ["miasto"]=> string(0) "" ["cena"]=> string(0) "" ["cena2"]=> string(0) "" ["za"]=> string(0) "" ["id_prawo_jazdy"]=> array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" } ["szukaj"]=> string(77) "" ["id"]=> string(2) "48" } 1,2,3
trueblue
7.05.2014, 09:45:12
To może tak:
$_SESSION['form'] = array( 'miasto' => $_POST['miasto'],
'id_prawo_jazdy' => (isset($_POST['id_prawo_jazdy'])&&!empty($_POST['id_prawo_jazdy']))?
implode(',',$_POST['id_prawo_jazdy']):null; );
peklo
7.05.2014, 09:49:44
to samo:(
trueblue
7.05.2014, 09:51:08
Warning dotyczy właśnie tej linii kodu? Tzn. 'id_prawo_jazdy' => (isset($_POST['id_prawo_jazdy'.....
peklo
7.05.2014, 09:59:33
no wlaśnie tyle to i ja wiem ale jaaaaaaaak to poprawić


żeby było OK
trueblue
7.05.2014, 10:01:45
A ja nie wiem, bo pytałem Ciebie czy warning dotyczy 3 linii kodu w poście powyżej.
Jeśli tak, to ja odpuszczam.
peklo
7.05.2014, 10:08:58
po usunięciu tego
var_dump($_POST);
echo implode(',',$_POST['id_prawo_jazdy']);
nie ma już błędów ale nadal zapamiętuje mi tylko jeden stan checkbox
trueblue
7.05.2014, 10:13:10
<?php
if(!empty($formData['id_prawo_jazdy'])) $idpj=explode(',',$formData['id_prawo_jazdy']); ?>
<input name='id_prawo_jazdy[]' type='checkbox' value='1'
<?php if(in_array(1
,$idpj)) {echo ' checked="checked"';} ?>> AM
<input name='id_prawo_jazdy[]' type='checkbox' value='2'
<?php if(in_array(2
,$idpj)) {echo ' checked="checked"';} ?>> A1
peklo
7.05.2014, 10:22:49
mam rozumieć że mam stworzyc druga tablice?
dostałem taką odpowiedz od nospor
"Ma być IN, implode i wywalcie bindowanie bo tutaj jest bez sensu w przypadku IN. "
trueblue
7.05.2014, 10:27:22
Z czym masz obecnie problem? Pisałeś, że z zapamiętaniem stanów checkboxów. Podałem Ci rozwiązanie.
O bindowaniu i tym rozwiązaniu pisałem w poście 14.
peklo
7.05.2014, 10:30:07
sory trueblue ale było kilka zmian i się już w tym pogubiłem

najlepiej jak wkleje to co mam okrojone oczywiscie
trueblue
7.05.2014, 10:31:52
Jeśli obecnie wyszukiwarka działa poprawnie (na podstawie checkboxów) i kod nie wywala błędów, to poście #40 masz rozwiązanie zapamiętywania.
peklo
7.05.2014, 10:38:15
mam tak tylko nie wiem czy to mam wkleić czy zastąpić
if(!empty($formData['id_prawo_jazdy'])) $idpj=explode(',',$formData['id_prawo_jazdy']);
<?php
if (!empty($_POST['szukaj'])) {
$_SESSION['form'] = array( 'miasto' => $_POST['miasto'],
'id_prawo_jazdy' => (isset($_POST['id_prawo_jazdy'])&&!empty($_POST['id_prawo_jazdy']))?
implode(',',$_POST['id_prawo_jazdy']):null, );
}
'miasto' => !isset($_SESSION['form']) ?
null : $_SESSION['form']['miasto'], 'id_prawo_jazdy' => !isset($_SESSION['form']) ?
null : $_SESSION['form']['id_prawo_jazdy'], );
if(!empty($formData['id_prawo_jazdy'])) $idpj=explode(',',$formData['id_prawo_jazdy']);
if (!empty($formData['miasto'])) {
$where[] = "miasto LIKE :miasto";
$bind[':miasto'] = '%' . $formData['miasto'] . '%';
}
if (!empty($formData['id_prawo_jazdy'])) {
$where[] = 'id_prawo_jazdy IN(:id_prawo_jazdy)';
$bind[':id_prawo_jazdy'] = $formData['id_prawo_jazdy'];// TĄ LINIJKE WYWALIĆ czy całość?
}
//i przykładowy checkbox
?>
<input name='id_prawo_jazdy[]' type='checkbox' value='1'
<?php if(in_array(1
,$idpj)) {echo 'checked="checked"';} ?>> AM
trueblue
7.05.2014, 10:51:55
Wstawiłbym linie 14-15 (1-2) przed linię 31, dla porządku.
Mam jednak pewne obawy, że po przypięciu sklejonych id_prawo_jazdy do IN, powstanie coś takiego:
id_prawo_jazdy IN('1,2') i będzie klapa.
Twój kod z moim pierwszym rozwiązaniem:
<?php
':id_kategoria' => 1,
);
'id_kategoria = :id_kategoria'
);
if (!empty($_POST['szukaj'])) {
$_SESSION['form'] = array( 'miasto' => $_POST['miasto'],
'id_prawo_jazdy' => $_POST['id_prawo_jazdy'],
);
}
'miasto' => !isset($_SESSION['form']) ?
null : $_SESSION['form']['miasto'], 'id_prawo_jazdy' => !isset($_SESSION['form']) ?
null : $_SESSION['form']['id_prawo_jazdy'], );
if (!empty($formData['miasto'])) {
$where[] = "miasto LIKE :miasto";
$bind[':miasto'] = '%' . $formData['miasto'] . '%';
}
if (!empty($formData['id_prawo_jazdy'])) {
$where[] = 'id_prawo_jazdy = :id_prawo_jazdy';
$bind[':id_prawo_jazdy'] = $formData['id_prawo_jazdy'];
}
//Przykładowe pola wyszukiwarki
?>
<form action="" method="post" id="signupForm" style='display: inline'>
Miasto
<input type="text" id="miasto" name="miasto" value="
<?php echo $formData['miasto'];?>"/>
Prawo jazdy
<input name='id_prawo_jazdy[]' type='checkbox' value='1'
<?php if(!empty($formData['id_prawo_jazdy'])&&in_array
(1
,$formData['id_prawo_jazdy'])) {echo 'checked="checked"';} ?>> AM
<input name='id_prawo_jazdy[]' type='checkbox' value='2'
<?php if(!empty($formData['id_prawo_jazdy'])&&in_array
(2
,$formData['id_prawo_jazdy'])) {echo 'checked="checked"';} ?>> A1
</form>
<?php
try
{
if(!empty($_POST['id_prawo_jazdy'])&&isset
($_POST['id_prawo_jazdy'])) $zap=str_repeat('?,',count($_POST['id_prawo_jazdy'])-1). '?'; $stmt = $pdo->prepare("SELECT o.miasto,o.id_kategoria,p.id_ogloszenia,p.id_prawo_jazdy FROM ogloszenia o LEFT OUTER JOIN pj p on o.id=p.id_ogloszenia WHERE ". implode( ' AND ', $where ).((!empty($_POST['id_prawo_jazdy'])&&isset
($_POST['id_prawo_jazdy']))?
" AND p.id_prawo_jazdy IN (".$zap.")":"")." group by o.id order by o.id DESC"); if(!empty($_POST['id_prawo_jazdy'])&&isset
($_POST['id_prawo_jazdy'])){ foreach($_POST['id_prawo_jazdy'] AS $idpj){
$stmt->bindValue(1
+count($bind),$idpj,PDO
::PARAM_INT); }
}
$stmt->execute( $bind );
while($ogloszenia = $stmt -> fetch())
{
// WYSWIETLENIE TABELI Z DANYMI
}
$stmt -> closeCursor();
}
catch(PDOException $e)
{
print "Bład: " . $e->getMessage() . "<br/>";
}
?>
peklo
7.05.2014, 11:05:40
ok zapamiętywać zapamiętuje ale po zaznaczeniu checkbox mam taki błąd
Błąd połączenia z bazą!: SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters
inne zmienne w wyszukiwarce działają ok.
trueblue
7.05.2014, 11:21:59
Mój błąd, nie można bindować jednocześnie po indeksie i nazwie.
<?php
':id_kategoria' => 1,
);
'id_kategoria = :id_kategoria'
);
if (!empty($_POST['szukaj'])) {
$_SESSION['form'] = array( 'miasto' => $_POST['miasto'],
'id_prawo_jazdy' => $_POST['id_prawo_jazdy'],
);
}
'miasto' => !isset($_SESSION['form']) ?
null : $_SESSION['form']['miasto'], 'id_prawo_jazdy' => !isset($_SESSION['form']) ?
null : $_SESSION['form']['id_prawo_jazdy'], );
if (!empty($formData['miasto'])) {
$where[] = "miasto LIKE :miasto";
$bind[':miasto'] = '%' . $formData['miasto'] . '%';
}
if (!empty($formData['id_prawo_jazdy'])) {
$i=0;
foreach($formData['id_prawo_jazdy'] as $idpj){
$where_idpj[]=':id_prawo_jazdy_'.$i;
$bind[':id_prawo_jazdy_'.$i++]=$idpj;
}
$where[] = 'id_prawo_jazdy IN('.implode(',',$where_idpj).')'; }
//Przykładowe pola wyszukiwarki
?>
<form action="" method="post" id="signupForm" style='display: inline'>
Miasto
<input type="text" id="miasto" name="miasto" value="
<?php echo $formData['miasto'];?>"/>
Prawo jazdy
<input name='id_prawo_jazdy[]' type='checkbox' value='1'
<?php if(!empty($formData['id_prawo_jazdy'])&&in_array
(1
,$formData['id_prawo_jazdy'])) {echo 'checked="checked"';} ?>> AM
<input name='id_prawo_jazdy[]' type='checkbox' value='2'
<?php if(!empty($formData['id_prawo_jazdy'])&&in_array
(2
,$formData['id_prawo_jazdy'])) {echo 'checked="checked"';} ?>> A1
</form>
<?php
try
{
$stmt = $pdo->prepare("SELECT o.miasto,o.id_kategoria,p.id_ogloszenia,p.id_prawo_jazdy FROM ogloszenia o LEFT OUTER JOIN pj p on o.id=p.id_ogloszenia WHERE ". implode( ' AND ', $where )." group by o.id order by o.id DESC"); $stmt->execute( $bind );
while($ogloszenia = $stmt -> fetch())
{
// WYSWIETLENIE TABELI Z DANYMI
}
$stmt -> closeCursor();
}
catch(PDOException $e)
{
print "Bład: " . $e->getMessage() . "<br/>";
}
?>
peklo
7.05.2014, 11:34:16
a tam twój błąd cieszę się ,że mi w ogóle pomagasz

no wreszcie jest bez błędów
zapamiętuje stan, wyszukuje i działa:)
Dzięki za zawrócenie czasu i wielką pomoc mam tylko jeszcze jedno pytanie.
Nie wiem czy tak powinno być i jak jest w innnych wyszukiwarkach , a mianowicie chodzi mi o jedną rzecz
Jak zaznaczę powiedzmy kat A ,B,C to wyszukuje mi rekord tylko z parametrem A lub B itd , a nie ABC
Chodzi pewnie o OR AND. I teraz nie wiem czy to jest prawidłowe czy nie
trueblue
7.05.2014, 11:38:30
Obydwie wersje są prawidłowe, to już od Ciebie zależy w jaki sposób chcesz selekcjonować wyniki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.