2016-07-08 6 views
-1

Я хочу заблокировать регистрацию пользователя, если его имя содержит некоторую строковую вставку в таблицу базы данных. Я использовал этот код:Выберите слово, которое содержится в базе данных

$repWor = mysql_query("SELECT * FROM reportedWord WHERE Word LIKE '%$username%'"); 

if (strpos($username, $repWor) !== false) { 
    echo 'The name contains characters or words not allowed.'; 
} 

Но это не сработает. Как это исправить?

+3

Не используйте 'mysql_ *' функции. Они удалены с PHP 7.0 – apokryfos

+0

Я использую php 5.3 – Cos8o

+0

Также убедитесь, что исправили это отверстие безопасности, которое у вас там происходит ... Узнайте больше о SQL-инъекции [здесь] (http: //www.w3schools. com/sql/sql_injection.asp) – Confiqure

ответ

2

После запроса вам нужно использовать что-то вроде mysql_fetch_array:

<?php 
$repWor = mysql_query("SELECT * FROM reportedWord WHERE Word LIKE '%$username%'",$cnx); 

$dat = mysqli_fetch_array($repWor); // <==================== 

if (strpos($username, $dat["Word"]) !== false) { echo 'The name contains characters or words not allowed.'; 
?> 

Как сказал @apokryfos, вы должны изменить к mysqli, это легко:

<?php 

$repWor = mysqli_query($cnx,"SELECT * FROM reportedWord WHERE Word LIKE '%$username%'"); 

$dat = mysqli_fetch_array($repWor); // <=================== 

if (strpos($username, $dat["Word"]) !== false) { echo 'The name contains characters or words not allowed.'; 

?> 
+1

вы забыли дескриптор соединения в mysqli_query, так что нет ... это не так просто, как просто добавить 'i' в имя вызова функции. –

+0

Вы не можете просто переключиться на функции 'mysqli_ *'. Некоторые из них, включая соединение, требуют другого синтаксиса. –

+1

Пожалуйста, не догадывайтесь. –

1

Использование mysql_query возвращает ресурс результата. Он не возвращает строку или массив на основе вашего SQL. Вы должны использовать mysql_query с комбинацией mysql_fetch_row или mysql_fetch_assoc.

Полный пример можно найти в http://php.net/manual/en/function.mysql-fetch-assoc.php

Это то превращает ваш код в:

$search = mysql_real_escape_string($username); 
$query = "SELECT * FROM reportedWord WHERE Word LIKE '%{$search}%'"; 
$result = mysql_query($query, $connection); 
$row = mysql_fetch_assoc($result); 

if (strpos($username, $row['reportedWord']) !== false) { 
    echo 'The name contains characters or words not allowed.'; 
} 

У вас есть длинный путь, прежде чем получить надежное решение, и вы, возможно, следует рассмотреть возможность использования MySQLi и следуйте краткости руководства: http://php.net/manual/en/mysqli.quickstart.statements.php

Или идите дальше и используйте библиотеку, такую ​​как Doctrine http://www.doctrine-project.org/

+0

Если я ставлю «motherf - ker», это сработает, но если я положу что-то вроде «123motherf - ker123», это не сработает. Может быть, есть проблема с «%»? – Cos8o

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