2013-08-25 3 views
0

Привет Я работаю над созданием формы для подключения к базе данных. Пока это работает. Он отображает информацию. Однако я хочу включить более одного поля.
Как будто я только должен был ввести «Окленд» в форме «Расположение».
Я думаю, что поле isset - это часть, на которую я застреваю. Я попытался включить '&!' или '||' без эффекта. Или, может быть, мой html. Я попытался включить некоторый код в «isset», и в нем возникла ошибка «Нет данных, извлеченных из сервера» в браузере. Потому что я только вошел в одно поле. Я хочу сделать это на основе того, где пользователь вводит информацию. Кстати, у меня есть включение в него других файлов. Это просто фрагмент. Просто я думаю, что это мои ошибки. Вот мой html-код. Если вы, ребята, можете помочь мне разобраться, как это сделать.Сделайте форму поиска, где пользователь не должен вводить каждое поле

echo "<html>"; 
echo "<head>"; 
echo "<title>Your Title Here</title>"; 
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\" />"; 
echo "</head>"; 
echo "<body onLoad=\"self.focus();document.searchform.search.focus()\">"; 
echo "<center>"; 
echo "<br /><form name=\"searchform\" method=\"GET\" action=\"search.php\">"; 
echo "<input type=\"text\" name=\"search\" size=\"20\" TABINDEX=\"1\" />"; 
echo "<input type=\"text\" name=\"Institution\" size=\"20\" TABINDEX=\"1\" />"; 
echo "<input type=\"text\" name=\"Location\" size=\"20\" TABINDEX=\"1\" />"; 
echo "<input type=\"text\" name=\"ProjectNotes\" size=\"20\" TABINDEX=\"1\" />"; 
echo "<input type=\"text\" name=\"TotalFunding\" size=\"20\" TABINDEX=\"1\" />"; 
echo "<input type=\"text\" name=\"ActiveYear\" size=\"20\" TABINDEX=\"1\" />"; 
echo " <input type=\"submit\" value=\"Search\" />"; 
echo "</form>"; 
//search variable = data in search box or url 
if (isset($_GET['search'])) { 
    $search = $_GET['search']; 
    Investigator($search); 
} 

функция Следователь

function Investigator($search) 
{ 

    $search = trim($search); 
    $search = preg_replace('/\s+/', ' ', $search); 

//seperate multiple keywords into array space delimited 
    $keywords = explode(" ", $search); 

//Clean empty arrays so they don't get every row as result 
    $keywords = array_diff($keywords, array(
     "" 
    )); 

//Set the MySQL query 
    if ($search == NULL or $search == '%') { 
    } else { 
     for ($i = 0; $i < count($keywords); $i++) { 
      $query = "SELECT * FROM Studies " . "WHERE Investigator LIKE '%$keywords[$i]%'" . " OR  Location LIKE '%$keywords[$i]%'" . " OR TotalFundingAmount LIKE '%$keywords[$i]%'" . " OR Institution LIKE '%$keywords[$i]%'" . " ORDER BY Location"; 
     } 

     //Store the results in a variable or die if query fails 
     $result = mysql_query($query) or die(mysql_error()); 
    } 
    if ($search == NULL or $search == '%') { 
    } else { 
     //Count the rows retrived 
     $count = mysql_num_rows($result); 
     echo $count; 
    } 

//If search variable is null do nothing, else print it. 
    if ($search == NULL) { 
    } else { 
     echo "You searched for <b><FONT COLOR=\"blue\">"; 
     foreach ($keywords as $value) { 
      print "$value "; 
     } 
     echo "</font></b>"; 
    } 
    echo "<p> </p><br />"; 
    echo "</center>"; 

//If users doesn't enter anything into search box tell them to. 
    if ($search == NULL) { 
     echo "<center><b><FONT COLOR=\"red\">Please enter a search parameter to continue.</font></b><br /></center>"; 
    } elseif ($search == '%') { 
     echo "<center><b><FONT COLOR=\"red\">Please enter a search parameter to continue.</font></b><br /></center>"; 
     //If no results are returned print it 
    } elseif ($count <= 0) { 
     echo "<center><b><FONT COLOR=\"red\">Your query returned no results from the database.</font></b><br /></center>"; 
     //ELSE print the data in a table 
    } else { 
     //Table header 
     echo "<center>"; 
     echo "</center>"; 

     //Colors for alternation of row color on results table 
     $color1 = "#d5d5d5"; 
     $color2 = "#e5e5e5"; 
     //While there are rows, print it. 
     while ($row = mysql_fetch_array($result)) { 
      //Row color alternates for each row 
      $row_color = ($row_count % 2) ? $color1 : $color2; 
      //table background color = row_color variable 
      echo "<center><table bgcolor=" . $row_color . ">"; 
      echo "<tr>"; 
      echo "<td>" . $row['Investigator'] . "</td>"; 
      echo "<td>" . $row['TotalFundingAmount'] . "</td>"; 
      echo "<td>" . $row['Institution'] . "</td>"; 

      echo "</tr>"; 
      echo "</table></center>"; 
      $row_count++; 
      //end while 
     } 
     //end if 
    } 

    echo "</body>"; 
    echo "</html>"; 
    if ($search == NULL or $search == '%') { 
    } else { 
     //clear memory 
     mysql_free_result($result); 
    } 
} 

?> 
+0

Нужно ли вам одновременно искать несколько полей? – Jacques

+1

Вы не должны обертывать весь ваш HTML в эхо. Это сделает ваш HTML более читаемым и более легким для декодирования. И я не вижу ничего неправильного в этом коде, вы должны включить свой полный источник, особенно часть с «Нет данных, полученных с сервера». – Tchoupi

+0

Yea Jack Мне нужно найти несколько полей. – Snewman8771

ответ

0

Исеть() только проверяет, является ли переменная определена. empty() может быть тем, что вы хотите использовать в этом случае, потому что он будет специально проверять, пуст ли вход формы.

Используя это, вы можете затем построить запрос, который будет выполнен - ​​на самом деле это может устранить необходимость в отдельной функции. Я не слишком много смотрел на код функции, который вы опубликовали. Но это будет примерно так:

Скажем, у вас есть поля ввода x, y и z. Вы хотите иметь возможность запускать запрос, который возвращает всю информацию, соответствующую любому из этих полей, которые заполняются. Тогда скрипт будет запускать один и тот же код кода для каждого входа, причем $ datax является данными из формы.

if (empty($datax) == false) //If the data is NOT empty... 
    { 
    $stringx = "column = {$datax}"; //Assign a chunk of a mySQL query requesting matching info to a string. 
    } 
else //If the data IS empty... 
    { 
    $stringx = "1"; //Create the same variable, but make it 1. You'll see why. 
    } 
//Repeat the above for $datay and $stringy, $dataz and $stringz, etc. Next is another if to make sure the entire form isn't left blank. 
if (empty($datax) == true && empty($datay) == true && empty($dataz) == true) 
    { 
    //Code to return an "Empty form!" error 
    } 
else 
    { 
    $query = "SELECT * FROM table WHERE " . $stringx . " AND " . $stringy . " AND " . $stringz; 
    //Continue to run query 
    } 

Что это такое - это построение запроса из результатов данных. Если, например, пользователь ищет США, пустое поле, и промышленные, (с полями, расположение, погода, и тип соответственно - опять же, все просто пример) запрос выглядит следующим образом:

SELECT * FROM table WHERE location = 'USA' AND 1 AND type = 'industrial' 

Любые поля, оставленные пустыми, приводят к вставке оператора AND 1, не влияя на запрос. Надеюсь, что это немного очистит, дайте мне знать, могу ли я внести дальнейшие изменения, чтобы помочь.

+0

Хм я новичок. Не могли бы вы сломать его немного проще. Спасибо – Snewman8771

+0

Несомненно. Позвольте мне изменить его. – WinstonSmith

+0

Большое спасибо !!! – Snewman8771

Смежные вопросы