저는 CakePHP 용 비계를 만들었지 만, 사용자가 텍스트 상자에 성의 일부를 입력하고 단추를 클릭하고 와일드 카드 검색으로 필터링 할 사람들 목록을 입력 할 수있는 방법이 필요합니다.와일드 카드 검색을 사용하여 CakePHP에서 스캐 폴딩 목록을 얻으려면 어떻게해야합니까?
나는 예제 코드로 고심하고있다. 누군가는 어떤 것을 가지고 있습니까?
저는 CakePHP 용 비계를 만들었지 만, 사용자가 텍스트 상자에 성의 일부를 입력하고 단추를 클릭하고 와일드 카드 검색으로 필터링 할 사람들 목록을 입력 할 수있는 방법이 필요합니다.와일드 카드 검색을 사용하여 CakePHP에서 스캐 폴딩 목록을 얻으려면 어떻게해야합니까?
나는 예제 코드로 고심하고있다. 누군가는 어떤 것을 가지고 있습니까?
보기/사용자/index.ctp 일이 기다리고 SQL 인젝션에 대한
<fieldset>
<legend>Filter users</legend>
<?php
echo $form->create('User', array('action' => 'index'));
echo $form->input('surname', array('div' => false));
echo $form->submit('Filter', array('div' => false));
echo $form->end();
?>
</fieldset>
컨트롤러/users_controller.php
public function index($surname = null) {
// post-redirect-get
if ($this->data['User']['surname']) {
$this->redirect(array('id' => $this->data['User']['surname']));
}
// conditions
$conditions = null;
if ($surname) {
$conditions = array('surname LIKE' => '%' . $surname . '%');
}
// find
$users = $this->Users->find('all', array('conditions' => $conditions));
// set
$this->set(compact('users'));
}
CakePHP가 제공하는 findby 메소드를 살펴 봐야합니다. 표준 findall은뿐만 아니라() 당신은 당신이에 의해 검색 할 테이블의 열을 지정할 수있는 "마법"findby 방법의 숫자가에
:$this->User->findBySurname($surname);
을 당신은 또한이 findBySql (문) 사용자 정의 SQL 문을 사용할 수 있습니다. 당신이 다음 사용자에게 표시 할 수 있습니다 일치하는 사용자의 목록을 반환합니다
$users = $this->User->findBySql("SELECT * FROM USERS u WHERE u.SURNAME LIKE '%" . $surname . "%' ORDERBY SURNAME");
을 다음과 같이 당신은 LIKE 문을 실행하려면이 옵션을 사용할 수 있습니다. 가장 효율적인 쿼리는 아니지만 작동합니다.
-1. 문제를 해결하면 반대 투표를합니다. –
나는 당신이 요점을 놓쳤다 고 생각한다, 나는 당신이 위의 것과 같은 진술을 사용할 수 있다고 말했다 - 이것이 주어진 해결책이 아니라. 위의 코드는 findBySql을 사용하는 올바른 방향의 한 포인트입니다 ... – Jon
포인트가 더 넓어서 검색 엔진에서 오는 누군가가 코드를 응용 프로그램에 복사 할 가능성이 큽니다. –