2017-01-05 2 views
0

У меня возникли проблемы с тем, чтобы этот запрос «умереть» должным образом. Я использую html-форму для поиска данных в таблице. теперь, если данные существуют, запрос отлично отображает все, что мне нужно. но если я знаю, что данных не существует, используя штамп в моем коде, я хочу, чтобы он отображал «Ошибка получения данных, пожалуйста, повторите поиск», но это не так. Все просто ничего не делает, абсолютно ничего! Вы видите ошибки в коде? Я могу загрузить весь html-файл, если потребуется. Я смотрел на него часами и начал немного сумасшедшим! Благодаряphp query не умеет правильно

if (isset($_POST['submitted'])) { 

    $category = $_POST ['category']; 
    $criteria = $_POST ['criteria']; 

    $query = "SELECT g.GameID, g.GameName, g.PubID, g.TimePeriodID, g.SettingID, g.MoodID, g.GameWeaponID, g.GameCameraAngleID, g.GamePlayerTypeID, g.GameDescription FROM GameTable g WHERE $category = '$criteria'"; //selecting all the data from the game table that makes the search criteria 
    $result = mysqli_query($dbcon, $query) or die("Error getting data please search again"); 

    echo "<table class='col-md-12'>"; // displays the searched data as a table 


    while ($row = mysqli_fetch_array($result)) { 

     echo "<form class=col-md-6 action=searchgame.php method=post>"; 
     echo "<tr> <th> Game ID</th> </tr>"; 
     echo "<tr>"; 
     echo "<td>" . "<input class=text-black type=text name=gameid readonly=readonly value=" . $row['GameID'] . " </td> <br>"; //here i have made the game Id read only so that it is not editable by the administrator 
     echo "<tr> <th> Game Name</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=gamename value=" .$row['GameName'] . " < /td> <br>"; // editable boxes so administator can update 
     echo "<tr> <th> Publisher ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=pubid value=" . $row['PubID'] . " < /td><br>"; 
     echo "<tr> <th> Time Period ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=timeperiodid value=" . $row['TimePeriodID'] . " < /td><br>"; 
     echo "<tr> <th> Setting ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=settingid value=" . $row['SettingID'] . " < /td> <br>"; 
     echo "<tr> <th> Mood ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=moodid value=" . $row['MoodID'] . " < /td><br>"; 
     echo "<tr> <th> Weapon ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=gameweaponid value=" . $row['GameWeaponID'] . " < /td><br>"; 
     echo "<tr> <th> Camera Angle ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=gamecameraangleid value=" . $row['GameCameraAngleID'] . " < /td><br>"; 
     echo "<tr> <th> Player ID</th> </tr>"; 
     echo "<td>" . "<input class=text-black type=text name=gameplayertype value=" . $row['GamePlayerTypeID'] . " < /td><br>"; 
     echo "<tr> <th> Game Description</th> </tr>"; 
     echo "<td>" . "<textarea style=height:200px;width:300px; class=text-black type=text name=gamedescription value=>" . $row['GameDescription'] . "</textarea><br>"; 
     echo "<td>" . "<input type=hidden name=hidden value=" . $row['GameID'] . " </td>"; 

     echo "<td>" . "<input class=text-black input-button-rounded type=submit name=update value=Update" . " </td>"; //update button 
     echo "<td>" . "<input class=text-black input-button-rounded type=submit name=delete value=Delete" . " </td>"; //delete button 
     echo "</tr>"; 
     echo"</form>"; 

    } 

    echo "</table>"; 
} 
?> 
+2

Затем получить реальную ошибку 'mysqli_error ($ dbcon)' –

+0

также распечатать запрос и запустить непосредственно в mysql ... – Naga

+0

** ПРЕДУПРЕЖДЕНИЕ **: При использовании 'mysqli' вы должны использовать [параметризованные запросы] (http : //php.net/manual/en/mysqli.quickstart.prepared-statements.php) и ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php) для добавления пользовательских данных в ваш запрос. ** НЕ используйте ** интерполирование строк или конкатенацию для выполнения этого, потому что вы создали серьезную [SQL-инъекцию] (http://bobby-tables.com/). ** НИКОГДА не ставьте данные '$ _POST' или' $ _GET' непосредственно в запрос, это может быть очень вредно, если кто-то пытается использовать вашу ошибку. – tadman

ответ

0

«У меня возникли некоторые проблемы с получением этого запроса„умереть“правильно. Я использую HTML форму для поиска данных в таблице. Теперь, существует ли данные работы запроса отлично отображаю все, что мне нужно, но если я знаю, что данные не существуют с использованием штампа в моем коде, я хочу, чтобы он отображал «Ошибка получения данных, пожалуйста, повторите поиск», но это не так. Все просто ничего не делает, абсолютно ничего !»

После прочтения вопроса в течение еще несколько раз, пришли к выводу, что то, что вам нужно, это else {...} заявления для if{...}.

«Вы видите ошибки в коде?»

A: Нет. Вам просто нужно использовать else{...}.

Однако, если ваш запрос не удастся вам в любой момент времени, вы должны проверить реальную ошибку, используя mysqli_error().

Edit:

мне нужно заявить, что ваш код открыт для инъекции SQL.

Используйте подготовленное заявление.

Ссылки:

и на PHP.net:

+0

Вот что я получил от вопроса. Если я ошибаюсь в этом или я неверно истолковал вопрос, дайте мне знать, и я удалю его. –

+0

Ну, я был технически корректен, просто не решение, которое ищет ОП. ArtisticPhoenix было актуальным решением. –

3

Это ключевая часть Вашего вопроса

, но если я знаю, что данные не существует

Причина умереть ничего не сделать запрос завершается прекрасно , без каких-либо результатов.

попробовать это вместо

if(!$result->num_rows) die('please search again'); 

Там нет error на скажем, только пустой результирующий набор. Используя свойство результирующего набора, num_rows сообщит вам количество строк, соответствующих поиску. В случае 0 PHP рассматривает это как false или ! для короткой руки.

Die выполняется только в том случае, если метод перед ним возвращает false, что при возврате объекта результата из mysqli это не так.

Много людей пропустить, понять, что это делает, или просто не знаю

 $result = mysqli_query($dbcon, $query) or die("Error getting data please search again"); 

это примерно эквивалентно этому

 if(($result = mysqli_query($dbcon, $query)) || die("Error getting data please search again")); 

Мы просто перескочить если, то or является логическим оператором, который вы можете использовать в инструкции if просто отлично. Единственная разница с использованием OR или || - это приоритет в том случае, когда они оцениваются (или я кое-что прочитал). Я никогда не в 7 лет положил OR в если заявление ... лол

http://www.w3schools.com/php/php_operators.asp

 if(($result = mysqli_query($dbcon, $query)) OR die("Error getting data please search again")); 

Таким образом, все, что сказал, что если первое условие не верно в заявлении, из-ИЛИ нет необходимо проверить второе утверждение. Это все, что он делает.

+0

Возможно, я не понял вопроса полностью. Вы вполне можете быть правы, но я интерпретировал это по-другому. Я отправил комментарий под своим ответом. Если это решение, отлично! Я все для этого, и я удалю свой ответ. –

+1

Да, мне потребовалось несколько раз прочитать это. Я уверен, что они просто хотят, чтобы команда die запускалась, если результаты пустые. – ArtisticPhoenix

+0

Благодарим вас за то, что теперь я думаю об этом! Теперь успешно работаем! –

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