2013-05-27 3 views
0

Я написал этот скрипт, где вы переходите на localhost/censor.php/query, и он видит, если он взят. Вот код:PHP перестает запускать скрипт

<?php 
function curPageURL() { 
    $pageURL = 'http'; 
    $pageURL .= "://"; 
    if ($_SERVER["SERVER_PORT"] != "80") 
     $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
    else 
     $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 

    return $pageURL; 
} 

$test = curPageURL(); 
$test = str_replace('http://localhost/censor.php/',"",$test); 

$con = mysqli_connect("localhost","root","creepers2","spider"); 

if (mysqli_connect_errno()) 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 

$usname = null; 
$result = mysqli_query($con, "SELECT * FROM main WHERE urls='$test'"); 
while($row = mysqli_fetch_array($result) or die(mysqli_error($con))) { 
    $usname = $row['urls']; 
    if ($usname=$test) 
     echo "Taken!"; 
    else 
     echo"YEAH!"; 
} 

mysqli_close($con); 
?> 

Если на локальный/censor.php/queryinthedatabase он печатает приняты. Однако, если вы перейдете в localhost/censor.php/querynotinthedatabase, он ничего не распечатает. Помогите, пожалуйста?

+0

Прежде всего, я надеюсь, что это не ваши настоящие учетные данные. Во-вторых, что говорит ваш журнал ошибок apache? Имеет ли регистр исключений PHP? Мы могли бы с уверенностью использовать это :-) – Robbietjuh

+0

Нет, просто какая-то забавная вещь мне нравится. Я не знаю, что такое журнал ошибок apache, что это такое? – user2364240

+0

Вы должны быть осторожны с [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection). –

ответ

2

Вы делаете простой запрос: SELECT * FROM main WHERE urls='$test'. Это нормально (SQL-инъекции в сторону).

Теперь вы извлекаете все результаты и просматриваете их, используя while($row = mysqli_fetch_array($result) or die(mysqli_error($con))). Тем не менее, если результатов не было, он не будет перебирать какие-либо объекты, поскольку он не может их получить.

Вы должны использовать что-то вроде mysqli_num_rows. Например:

$result = mysqli_query($con, "SELECT * FROM main WHERE urls='" . mysqli_real_escape_string($test) . "'"); 
if (mysqli_num_rows($result) == 1) { 
    echo "Taken!"; 
} 
else { 
    echo "YEAH!"; 
} 

Теперь вы делаете тот же запрос (выбор всех строк, где urls равно $test), но вместо того, чтобы циклически возвращенных строк, вы подсчитать количество строк, возвращенное запрос. Если он равен 1, все взято.

Кроме того, избегайте ввода пользователем, который вы вводите в свои запросы; не становитесь еще одной жертвой инъекций SQL. Не доверяйте пользователю!

0

Проблема заключается в том, что вы используете if ($usname=$test) вместо if ($usname==$test)

+0

Я пробовал это, та же проблема – user2364240

+0

Вы должны иметь if ($ usname == $ test), это не про это. – luqita

0

Вы присваиваете значение переменной внутри если Постулаты что неправильно, вы должны использовать двойной оператор equl coparison сравнить их, просто изменить

if ($usname==$test) 

Также для отладки запроса вы должны переместить mysqli_error в сама

$result = mysqli_query($con, "SELECT * FROM main WHERE urls='$test'") or die(mysqli_error($con)); 
while($row = mysqli_fetch_array($result)) { 

Ваш код запроса является весьма уязвимым для MySQL инъекций, узнать больше в этом ПОЛЕЗНЫЕ темах How can I prevent SQL injection in PHP? следует использовать подготовленное заявление, чтобы избежать какого-либо риска.

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