MySQL выбрать / найти имена, которые имеют и не имеют сока - PullRequest
0 голосов
/ 17 марта 2019

Я хочу отображать строки, в которых столбец «tipster» равен параметру ввода формы, выбранному пользователем.

Я пробовал replace (tipster ' '. '') LIKE '$tipster', и он не дал результатов ... В некоторых полях есть пробелы в имени, а в некоторых нет, например. 'John Jones Smith', 'John Jones' и 'JohnJones' .... Мне нужно найти столбец, который соответствует опции, выбранной в форме HTML (проверить строки с пробелами и без них)

Если я просто выполняю поиск по одному слову (например, пример) ... результат возвращается в виде запроса LIKE . Я хотел бы прокомментировать, что функция GET работает, но передает входные данные как пример + один в URL-адресе .... не уверен, что + влияет на результат mysqli потенциально?

HTML

 <form id="tipster_search" method="get" action="example.php">               
      <label for="tipster">Select Tipster</label>
      <select class="form-control" name="tipster" id="tipster">
          <option>Example One</option>
          <option>ExampleTwo</option>
          <option>Example Option Three</option>
      </select>
      <br>
      <button class="btn btn-info" name="submit">Search</button>
</form>

PHP

function processForm() {
    $tipster = $_GET['tipster'];
    $url = "example.php?tipster=".$tipster."";
    header("Location: $url");
    exit;
}

$tipster = $_GET['tipster'];
$q = "SELECT * FROM bets WHERE `tipster` LIKE '%$tipster%' ORDER BY betDate DESC LIMIT 25";
$query = mysqli_query($connection,$q);
$x = 1;
echo "<table class='table'><tr>";
echo "<th>ID</th>";
echo "<th>Bet Date</th>";
echo "<th>Tipster</th>";
echo "<th>Sport</th>";
echo "<th>Meeting</th>";
echo "<th>Time</th>";
echo "<th>Stake Name</th>";
echo "<th>Odds</th>";
echo "<th>Stake Type</th>";
echo "<th>Stake Placed</th>";
echo "<th>Result</th>";
echo "<th>Return</th>";
echo "<th>Profit</th>";

if($query === FALSE) { 
    die(mysqli_error($connection)); // better error handling
}

while($res = mysqli_fetch_array($query)){
    $id = $res['id'];
    $betDate = $res['betDate'];
    $tipster = $res['tipster'];
    $sport = $res['sport'];
    $meeting = $res['meeting'];
    $time = $res['time'];
    $stakeName = $res['stakeName'];
    $odds = $res['odds'];
    $stakeType = $res['stakeType'];
    $stakePlaced = $res['stakePlaced'];
    $result = $res['result'];
    $return = $res['return'];
    $profit = $res['profit'];

    echo "<tr><td><p>$id</p></td>"; 
    echo "<td><p>$betDate</p></td>";
    echo "<td><p>$tipster</p></td>"; 
    echo "<td><p>$sport</p></td>"; 
    echo "<td><p>$meeting</p></td>";
    echo "<td><p>$time</p></td>"; 
    echo "<td><p>$stakeName</p></td>"; 
    echo "<td><p>$odds</p></td>";
    echo "<td><p>$stakeType</p></td>";
    echo "<td><p>&pound;$stakePlaced</p></td>"; 
    echo "<td><p>$result</p></td>"; 
    echo "<td><p>&pound;$return</p></td>";
    echo "<td><p>&pound;$profit</p></td></tr>";

}
?>

1 Ответ

1 голос
/ 17 марта 2019

Как насчет:

WHERE REPLACE(tipster, ' ', '') LIKE CONCAT('%', REPLACE('$tipster', ' ', ''), '%')

Примечание: любой на SO настоятельно рекомендует использовать подготовленные операторы и параметризованные запросы , чтобы защитить ваш код от внедрения SQLи сделайте ваши запросы более читабельными и понятными.Такая опечатка намного легче обнаружить при использовании параметризованных запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...