php url parametreleri

7 Cevap php

Benim Web sitesi üzerinde çalışıyorum, ve ben tüm sayfaları için HTML bayram olduğunu MySQL veritabanı okumak için hangi giriş söyleyen bir tam sayıdır url parametresi "sayfa" almak için çalışıyorum. İşte benim kod güvenlik nedeniyle kaldırıldı MySQL kullanıcı adı ve şifre ile, bir:

  if ($_GET["page"]) {
  $con = mysql_connect("localhost","username","password");
  if (!$con)
  {
    die('Could not connect: ' . mysql_error());
  }
  mysql_select_db("jmurano_pages", $con);
  $title=mysql_query("SELECT title FROM pageContent WHERE pageID=" . $_GET['page']);
  echo "<title>" . $title . "</title>\n";
  echo "</head>\n";
  echo "<body>\n";
  $content = mysql_query("SELECT content FROM pageContent WHERE pageID=" . $_GET['page']);
  echo $content;
  echo "\n</body>\n</html>";
}

Bu "Resource id # 2" gibi başlık ve "Resource id # 3" gibi içeriği koyar. Ben yanlış ne yapmış olabilir düşünemiyorum.


Hala aklım karıştı. Ben tam bir PHP acemi değilim. Tam olarak ne içerik ve başlık erişmek için ne yapmak gerekiyor?

7 Cevap

Apart enjeksiyon güvenlik açığına karşı (John cevaba bakınız) kullanarak mysql_query gelen başlık almalısınız

 $res = mysql_query("SELECT title FROM pageContent WHERE pageID=" . $escapedpage);
 $title = mysql_fetch_assoc($res);
 $title = $title['title']
 $res2 = mysql_query("SELECT content FROM pageContent WHERE pageID=" . $escapedpage);
 $content = mysql_fetch_assoc($res2);
 $content = $content['content'];

Ancak ben size bir online mysql php öğretici takip edecek eğer akıllıca olacağını düşünüyorum.

EDIT
even better would be to just use 1 mysql_query like so:

$res = mysql_query("SELECT title, content FROM pageContent WHERE pageID=" . $escapedpage);
$row = mysql_fetch_assoc($res);
$title = $row['title'];
$content = $row['content'];

That would save your script time and resources since there is only need for one mysql query.
This tutorial is rather good: http://www.freewebmasterhelp.com/tutorials/phpmysql

Açıktır ki (we all had to start somewhere!) öğrenmek için bir sürü var, yani SO tek bir cevap her şeyi öğretmek mümkün olmayacaktır, ama burada bir marş var:

Bir SELECT sorgusu üzerine mysql_query çalıştırdığınızda, bu iki şeyden birini dönecektir:

  • if there was an error in your query, it will return false.
    • Bu hata hakkında Ayrıntılar mysql_error() arayarak ulaşabilirsiniz
  • if the query was fine it will return a resource
    • Bu kaynağı kullanarak, size sadece SELECT oluşturduğumuz veri kümesi hakkında bilgi edinmek için diğer mysql işlevleri çağırabilirsiniz.
    • mysql_fetch_assoc() will return an associative array of ONE row from your query.
      • Görmek için bu yapın: $row = mysql_fetch_assoc($resource); print_r($row);
    • Bir sonraki satır almak için tekrar diyoruz.
    • When there's no more rows, mysql_fetch_assoc() will return false.
      • Therefore you can write loops like this:
        while ($row = mysql_fetch_assoc($resource)) { // do stuff }

İşte bazı pseudo kod.

$result = mysql_query($sql);

//for each row in the result, do stuff with it...
while ($row = mysql_fetch_array($result)){
  $title = $row["title"];
  $content = $row["content"];

  //this will show you the row data visually
  //var_dump($row);
}

Bir PHP newbi olarak, (gerekirse var_dump kullanmak) debug öğrenmek belgeleri okuyun ve öğreticiler okumak.

Ayrıca, orada php büyük bir miktar vardır + MySQL öğreticiler çevrimiçi ... google "php ve mysql"

İyi şanslar!

Bunu muhtemelen daha hızlı olacak gibi bir sorguda iki alanları almak gerekir. Ayrıca pageid varsayarak her zaman ilk önce SQL enjeksiyonu önlemek için bir tamsayı o döküm gereken bir tam sayıdır. Ben gibi bir şey kullanmak istiyorsunuz:

<?php
if (isset($_GET["page"])) {
    $con = mysql_connect("localhost","username","password");
    if (!$con) {
        die('Could not connect: ' . mysql_error());
    }
    mysql_select_db("jmurano_pages", $con);

    $pageId = (int) $_GET['page'];

    $result = mysql_query('SELECT title, content FROM pageContent WHERE pageID= ' . $pageId);

    if (!$result) {
        die(mysql_error());
    }

    $row = mysql_fetch_assoc($result);

    if (!$row) {
        die('page not found');
    }

    echo "<title>" . $row['title'] . "</title>\n";
    echo "</head>\n";
    echo "<body>\n";
    echo $row['content'];
    echo "\n</body>\n</html>";

} else{ 
    //what are you going to do if page is not passed?
}
?>

Not

  • Birkaç sayfa üzerine kopyalamak zorunda değilsiniz böylece ayrı bir yer haline veritabanı bağlantı kodu koymak isteyebilirsiniz
  • Aksi taktirde çok dağınık kod ile sona erebilir Muhtemelen SQL enjeksiyonu hakkında okumalısınız, ve HTML ve PHP (sunum ve mantık) tutmak için nasıl bazı yöntemler ayrı

Ayrıca, bir SQL Injection güvenlik açığı var ... doğrudan sorguları içine $ _GET, $ _POST veya diğer kullanıcı tarafından sağlanan değişkenleri koymak asla.

Yapmanız gereken:

$page = $_GET["page"];
$escaped_page = mysql_real_escape_string($page);

ve sorgu içine $ escaped_page koydu.

Bir şey daha .. Bir sorguda başlık ve içerik hem de seçebilirsiniz:

SEÇ başlık, içerik DAN ....

Siz manuel http://de.php.net/mysql_query okumalısınız

Return Values

For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.

For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.

The returned result resource should be passed to mysql_fetch_array(), and other functions for dealing with result tables, to access the returned data.