2013-09-06 3 views
0

У меня есть эта новостная система, но я не могу понять, как это сделать: news.php?id=1, тогда она выведет идентификатор новостей 1. Пожалуйста, помогите.MYSQL & PHP News System

меня это до сих пор:

<?php 
include_once('includes/config.php'); 
if($id != "") { 
    $id = mysql_real_escape_string($id); 
    $sql = mysql_query("SELECT * FROM news WHERE id = '$id'"); 
} 
$res = mysql_query($sql); 
while($row = mysql_fetch_assoc($res)){ 
if(isset($_GET['id'])); 
    echo $res['body']; 
} 
?> 

Он подключается к базе данных (данные хранятся в конфигурации).

+2

Где вы определяете '$ id'? –

+1

Обязательное предложение, [** Не использовать 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (http://j.mp/XqV7Lp). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). –

+0

Я действительно новичок в php и mysql, если кто-то может мне помочь, как сделать это, было бы потрясающе. –

ответ

3

параметры после? в URL-адресе отображаются элементы GET. Используйте:

<?php 

if (isset($_GET['id'])) { 

    $id = $_GET['id']; 
    // Rest of your code 

} 
+0

Извините, но я действительно не уверен. Как я должен выполнять эту работу. Я просто смотрел учебник, но он не был бы слишком сложным. –

1
<?php 
include_once('includes/config.php'); 

// see if the id is set in the URL (news.php?id=) 
if(isset($_GET['id'])) { 

    // get the ID from the URL 
    // to make it safer: strip any tags (if it's a number we could cast it to an integer) 
    $id = strip_tags($_GET['id']); 

    // don't use SELECT *, select only the fields you need 
    $sql = mysql_query("SELECT body FROM news WHERE id=".mysql_real_escape_string($id)); 

    while($row = mysql_fetch_assoc($sql)) { 
     echo $res['body']; 
    } 
} else { 
    echo 'please select an article'; 
} 

Я бы порекомендовал вам уйти от использования mysql функции и использовать mysqli вместо этого, в качестве mysql амортизируется, и вы должны научиться mysqli или PDO в любом случае.

Edit: обновленный код на комментарии

+1

Я одобряю вашу попытку быть более безопасной, но зачем беспокоиться с 'strip_tags', если вы собираетесь бросить в int? Итак '' становится '182', а не' 0' ...? И поскольку теперь вы знаете, что это целое число, а не строка, 'mysql_real_escape_string' также полностью избыточно. – IMSoP

+0

^все, что говорит IMSOP; Кроме того, ваш второй вызов mysql_query() неверен (вы передаете ему ресурс, как если бы он не был уже неправильным, чтобы быть там в первую очередь), И что, если запрос не удался? –

+0

Спасибо, ребята, обновлено. Я не хочу, чтобы ID был int (хотя, вероятно, это так), поэтому я удалил кастинг. Я не использовал mysql в годах (я использую db a class), поэтому я довольно ржавый :) – timgavin

1

Во-первых, позволяет анализировать текущий код, чтобы увидеть, где ваш будет неправильно.

<?php 
include_once('includes/config.php'); 
/* 
$id is not set anywhere before its used so this if statement will not fire, 
if you are attempting to get this $id from a url parameter then you need 
to set it first from $_GET['id'] global 
*/ 
if($id != "") { 
    $id = mysql_real_escape_string($id); 
    $sql = mysql_query("SELECT * FROM news WHERE id = '$id'"); 
} 
/* 
This piece of code will fire but where is $sql set? 
The mysql_query() function expects a string containing your sql query 
so the subsequent lines of code will fail because of this 
*/ 
$res = mysql_query($sql); 
while($row = mysql_fetch_assoc($res)){ 
    //this block is in the wrong place 
    if(isset($_GET['id'])); 
    echo $res['body']; 

} 
?> 

Идея заключается в том, чтобы получить пользовательский ввод в $_GET['id'] например из URL первых, проверьте значение то, что ищете, а затем построить свой запрос.

Поскольку функции mysql_* устарели, я покажу вам пример использования PDO. Хотя вы можете использовать mysqli, НО вы должны всегда использовать подготовленный запрос, когда пользователь значения вступают в контакт с вашей базой данных. Это должно остановить неприятные/случайные инъекции sql.

<?php 
// make the connection to the database using PDO 
try { 
    $db = new PDO('mysql:host=127.0.0.1;dbname=the_awsome_db', 'yourusername', 'password'); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    $db->exec("SET CHARACTER SET utf8"); 

} catch(PDOException $e) { 
    exit('Sorry there is a problem with the database connection :' . $e->getMessage()); 
} 

// sanitize user input - expecting an int 
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT); 

if (is_numeric($id)) { 
    // now lets query the database with the param id from the user 

    // prepare the query, using a placeholder 
    $stmt = $db->prepare('SELECT body, 
           some_other_column 
          FROM news 
          WHERE id = :placeholder_id'); 

    // bind the placeholder with the value from the user 
    $stmt->bindParam(':placeholder_id', $id); 

    // execute the prepared query 
    $stmt->execute(); 

    // fetch the result 
    $result = $stmt->fetch(PDO::FETCH_ASSOC); 

    // result not empty - display 
    if (!empty($result)) { 
     // display your result, use print_r($result) to view the whole result set if unsure 
     echo $result['body']; 
    } else { 
     // no matching id found in the db, do something 
     echo 'No results found'; 
    } 
} else { 
    // do something as user input is not a number 
    exit(header('Location: ./index.php')); 
} 
?> 

Надеется, что это помогает, если не уверены в получении параметров от пользователя, вам могут понадобиться, чтобы посмотреть еще несколько учебников и получить вид, что прежде чем баловаться с базами данных и все, что хорошим материалом.

+0

Для меня это сложно. : s –

+1

@MathiasTangre: когда кто-то дает вам такую ​​помощь, вы должны приложить больше усилий в своем ответе. Интересно, так как вы получаете большое количество downvotes, нужно ли вам немного изучать PHP, прежде чем задавать больше вопросов. – halfer