Я пытаюсь создать функцию поиска на PHP. Я использую следующие функции:
В show.php:
<form class = "form-inline" action = "?controller=address&action=searchAll" method = "post">
<div class = "form-group row">
<div class = "col-xs-4">
<input class = "form-control" id = "terms" name = "terms" type = "text" placeholder = "Search terms">
</div>
</div>
<div class = "form-group row">
<div class = "col-xs-4">
<button type = "submit" class = "btn btn-primary" ><span class = "glyphicon glyphicon-search"> </span> Search</button>
</div>
</div>
</form>
Эта форма отправляет вызов POST контроллеру: addressController.php
function searchAll(){
if (!empty($_POST['terms'])) {
$terms=$_POST['terms'];
$address=Address::searchByTerms($terms);
$listaAddresses[]=$address;
//var_dump($id);
//die();
require_once('Views/Address/show.php');
} else {
$listaAddresses=Address::all();
require_once('Views/Address/show.php');
}
}
И контроллер должен вызвать действие searchByTerms для файла модели Address.php, а затем снова открыть show.php, показывая только отфильтрованные элементы:
public static function searchByTerms($terms){
$db=Db::getConnect();
$select=$db->prepare('SELECT * FROM tb_direcciones WHERE fn LIKE "%:fn%"');
$select->bindValue('fn',$terms);
$select->execute();
$addressDb=$select->fetch();
$address = new Address ($addressDb['id_address'],$addressDb['cia'], $addressDb['fn'], $addressDb['ln'], $addressDb['type'], $addressDb['phone'], $addressDb['fromto'], $addressDb['direccion'], $addressDb['latitud'], $addressDb['longitud']);
//var_dump($address);
//die();
return $address;
}
Но что-то не так в моем коде, тогда выдается функция ошибки.






$select->bindValue(1, "%$terms%", PDO::PARAM_STR);
правильно, но вы должны объявить %$terms% вне bind Value
$terms= "%".$terms."%";
$select->bindValue(1, $terms, PDO::PARAM_STR);
Спасибо за ваше время и усилия, но я полагаю, что проблема не в части кода, связанной с запросами. Он должен быть в некоторых функциях контроллера или модели.
Извините, что спросил, но action = "?controller=address&action=searchAll" что делать
этот параметр должен вызывать функцию searchAll из контроллера
пожалуйста. терпите меня, предположим, чтобы вызвать страницу контроллера на той же странице show.php или в другом
Однако, если на той же странице или на другой странице ИСПОЛЬЗУЙТЕ $ _GET для вызова controller = address & action = searchAll И тогда вы можете использовать $ _POST
Я думаю, что ваша функция PDO :: bindValue () неверна.
Согласно документации PHP здесь: http://php.net/manual/es/pdostatement.bindvalue.php, функция bindValue должна принимать в качестве первого аргумента имя параметра в форме
:name
Пример:
bindValue (":name", $value, $data_type);Так что, возможно, код должен быть таким:
$select=$db->prepare('SELECT * FROM tb_direcciones WHERE fn LIKE "%:fn%"');
// here the right form
$select->bindValue(':fn', $terms, PDO::PARAM_STR);
Или, если вы хотите использовать форму индекса с вопросительным знаком функции bindValue, решение может быть в форме:
$select=$db->prepare('SELECT * FROM tb_direcciones WHERE fn LIKE "%?%"');
// here the right form
$select->bindValue(1, $terms, PDO::PARAM_STR);
Спасибо за ваше время и усилия, но я полагаю, что проблема не в части кода, связанной с запросами. Он должен быть в некоторых функциях контроллера или модели.
нет сообщения об ошибке php, он вызывает функцию ошибки внутри контроллера, это означает, что что-то в любой из обеих функций (контроллер и модель) неверно
Можете выдать ошибку?