PHP - stworzenie funkcji


(arlid) #1

Witajcie. Mam taki fragment kodu :

 

<?php
        try {
            $stmt = $polaczenie->prepare("SELECT * from producent where NazwaProducent like 'A%'");
            $stmt->execute();  
            echo'<p>';
            while($wiersz = $stmt->fetch(PDO::FETCH_ASSOC)){
                echo '<a href=" '.$wiersz['IDProducent'].'"> '.$wiersz['NazwaProducent'].' </a><br />';

            }  
            echo '</p>';

        } catch( PDOException $e ) {

            echo "Zapytanie wykonane niepoprawnie <br />";
            echo "Error: " . $e->getCode();
            echo "Error: " . $e->getMessage()."<br />";
            $polaczenie = null;

        }
        ?>

Pobiera on wszystkich producentów zaczynających się na zadana literę. Niestety liter jest wiele i w sumie można by zrobić to w najprostszy sposób - skopiować kod i zmienić litery. Nie o to jednak mi chodzi. Czy da się zrobić funkcję, której argumentem będzie zadana litera? Mi niestety coś tu nie wychodzi. Wydawało mi się,  że wystarczy wkleić podany mod w ciało funkcji i zamienić w zapytaniu A% na zmienną, która jest parametrem funkcji. Niestety to nie bardzo chce działać. Jakieś sugestie?


(ra-v) #2

Możesz umieścić całość w ciele funkcji

function moje_zapytanie( $char ){
        try {
            $stmt = $polaczenie-prepare("SELECT * from producent where NazwaProducent like ?");
            $stmt-bindValue(1, $char."%", PDO::PARAM_STR);
            $stmt-execute(); 
    
// reszta kodu

}

Masz więcej przykładów:

 

PS. Ww. kod pisałem z ręki, sprawdź składnię i błędy.

 


(slepcu) #3

A pytanie po co to robisz w taki sposób ? Po Ci lista Producentów na daną literę ? Może lepiej pobrać wszystko sortując po nazwie i w kodzie rozdzielić na początkowe litery.

 

a co z Nazwami zaczynającymi się od liczb, i jakiś dziwnych znaków? Ktoś może podać nazwę w cudzysłowie itd.


(arlid) #4

Myślałem nad takim rozwiązaniem. Chwilowo mam po prostu literę A i pod spodem firmy na literę A. Użytkownik tutaj nic nie wpisuje. Nie działa to w oparciu o klasyczną wyszukiwarkę. Po prostu jest to lista “posegregowana” alfabetycznie z jakimś sensownym podziałem. Nic więcej. Chwilowo działa tak jak sobie wymyśliłem, więc więcej mi nie trzeba, chociaż jakieś bardziej optymalne rozwiązanie z pewnością istnieje.