Мне было интересно, есть ли способ отключить существующую php-функцию (или часть) при вызове другой функции.
Моя ситуация такова: у меня есть функция поиска php с текстовым вводом. Это прекрасно работает. (См. Код ниже)
if(isset($_POST['search'])){
if(isset($_GET['go'])){
if(preg_match("/[A-Z | a-z]+/", $_POST['search'])){
$input=$_POST['search'];
//connects to database
//selects database table
//searches database
//assigns $results variable
//outputs results:
while($row=mysql_fetch_array($result)){
echo 'results...';
}}}} else {
//connects to database
//selects database table
//searches database:
$sql="SELECT * FROM table";
//outputs results (same as above)
}
так что очень короткая форма моей функции поиска работы. Ниже этой самой функции поиска у меня есть кнопка, которая - при нажатии - должна выводить результаты поиска для одной конкретной строки. Это тоже работает. Проблема заключается в том, что при нажатии этой самой кнопки также отображается "else-part" функции выше, когда я хочу, чтобы она показывала результаты для этой конкретной строки и никаких других "элементов таблицы"... Теперь следует код для части, в которой выполняется поиск для конкретной конкретной строки:
function results_for_one_specific_string () {
//connects to database
//searches database:
$sql="SELECT * FROM table WHERE Name='string'";
//outputs results (same as above)
}
if (isset($_GET['button123'])) {
results_for_one_specific_string ()
}
Чтобы сообщить вам, для вызова function results_for_one_specific_string()
я использую что-то вроде этого:
<a href="index.php?button123=true" title="">title</a>
Теперь мой вопрос: кто-нибудь знает, как я могу каким-то образом отключить "else-part" моей функции поиска (1-й блок кода) только при function results_for_one_specific_string()
? (так что печатаются только результаты этой функции, а не сторона "else" первой функции)
Спасибо вам, ребята!
Будет ли что-то вроде этой работы для вас?
$hasBeenCalled = false; // Set a global var
function results_for_one_specific_string () {
//connects to database
//searches database
//outputs results
}
if (isset($_GET['button123'])) {
$hasBeenCalled = true; // Update global var here
results_for_one_specific_string ()
}
...
if(isset($_POST['search'])){
//connects to database
//searches database
//outputs results
} else if($hasBeenCalled==false){ // Check for global var here
//outputs all table items (not only the search results, everything!)
}
Мне кажется, у вас идентичный код для поиска пользовательской строки, а также для конкретной строки. Если это так, было бы проще и прозрачнее сделать одну функцию для обоих случаев:
function results_for_any_string ($search='') {
if(strlen($search>0)){
//connects to database
//searches database
//outputs results
}
else {
//outputs all table items (not only the search results, everything!)
}
}
В главном скрипте выберите то, что вы хотите использовать в качестве параметра.
if(isset($_POST['search'])) $parameter = $_POST['search'];
else if (isset($_GET['button123'])) $parameter = $_GET['button123'];
else $parameter='';
results_for_any_string ($parameter);
}
Кроме того, если кнопки "нет" находятся в одной форме, вы можете отправить определенное значение также через ту же форму и как POST. Не перемешать пост и получить. См. Например, этот пост.
if(isset($_POST['search'])){
код выполняется?