2015-05-07 2 views
1

я сделал этот код, чтобы получить «12345» и выберите его в MySQL Query из bithumor.co/posts/12345 поэтому запрос может выбрать данные WHERE ID = 12345SELECT, данные WHERE ID = часть URL

Пример: Текущий URL: bithumor.co/posts/12345 SELECT: данные где ID = 12345

Вот код:

<?php 
$tokens = explode("/", $_SERVER[REQUEST_URI]); 
$number = $tokens[count($tokens) - 1]; 
$sql = "SELECT id, post_title, username, content_url, pro_pic, username FROM posts WHERE id = ".$number; 

$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "<br><div class='entire_post'><center><img class='pro_pic' src=http://cdn.bithumor.co/pro_pics/" . $row['pro_pic']. "></center><title>" . $row['post_title']. " </title><center><font face='HelveticaNeue-Light' font size='5'>" . $row['username']. "</font> </center><center><img class='upload' src=http://cdn.bithumor.co/uploads/" . $row["content_url"]. " width='100%'></center> " . $row["id"]. "<br></div>"; 
} 
$conn->close(); 
?> 

Что я сделал не так и как это исправить?

+0

Это сообщение не существует. –

+2

Если бы я мог дать вам подсказку ... не добавляйте переменную в запрос SQL ... используйте параметры ... иначе вы уязвимы для SQL-инъекции ... что, если содержимое переменной, исходящей из запроса url, будет be '; drop tables;' ? –

+0

@JayBlanchard это просто пример, страница на самом деле не существует –

ответ

0

-У вас нет «}», чтобы закрыть инструкцию «if».

-вы может упасть "если" заявление: вместо:

if ($result->num_rows > 0) 
{ 
    // output data of each row 
    while($row = $result->fetch_assoc()) 
    { 
     echo "<br><div class='entire_post'><center><img class='pro_pic' src=http://cdn.bithumor.co/pro_pics/" . $row['pro_pic']. "></center><title>" . $row['post_title']. " </title><center><font face='HelveticaNeue-Light' font size='5'>" . $row['username']. "</font> </center><center><img class='upload' src=http://cdn.bithumor.co/uploads/" . $row["content_url"]. " width='100%'></center> " . $row["id"]. "<br></div>"; 
    } 
} 

просто использовать:

while($row = $result->fetch_assoc()) 
{ 
    echo "<br><div class='entire_post'><center><img class='pro_pic' src=http://cdn.bithumor.co/pro_pics/" . $row['pro_pic']. "></center><title>" . $row['post_title']. " </title><center><font face='HelveticaNeue-Light' font size='5'>" . $row['username']. "</font> </center><center><img class='upload' src=http://cdn.bithumor.co/uploads/" . $row["content_url"]. " width='100%'></center> " . $row["id"]. "<br></div>"; 
} 

заявление: "$ result-> FETCH_ASSOC()" возвращает нулевое значение, если $ result не имеет строк, и вы не попадете в цикл while.

0

Невозможно таким образом точно. Под этим я имею в виду, что:

http://bithumor.co/posts/12345

не будет выполняться должным образом. Если бы это было:

http://bithumor.co/posts/?12345

Это может быть собрана или читать. так как это похоже на index.php?12345.

Я бы предложил использовать URL Rewrite. Таким образом вы можете переписать URL-адрес URL-параметров. Таким образом, URL:

http://bithumor.co/posts/12345

может привести к

http://bithumor.co/index.php?posts=12345

, а затем вы можете вызвать в сценарии переменную $_GET['posts'].

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