Yerine ID PHP MySQL adını gösteriliyor

4 Cevap php

Ben basit bir şey lazım; Ben bir kullanıcı bu yazar ile ilgili kitapları görmek için bir yazar tıklar sayfası var. 'Için kitaplar: authorName' yazar için kitapların listesini görüntüleyen sayfamda, ben basit bir HTML başlık söyleyerek istiyorum

Ben sayfa yazar kimliği isim değil görüntülemek için alabilirsiniz. Kullanıcı yazarın önceki sayfadaki bağlantıyı tıkladığında, onu seviyor bu görünüyor:

<a href="viewauthorbooks.php?author_id=<?php echo $row['author_id']?>"><?php echo $row['authorname']?></a>

Ve daha sonra 'viewauthorbooks.php author_id = 23?' Ben başında bu ilan etti:

$author_id = $_GET['author_id']; $authorname = $_GET['authorname'];

Ve nihayet, 'için kitaplar: o authorName diyor authorName, ben bu var:

echo $ authorName

(PHP etiketleri ile! Onun bana onları koymak değil icar buts) Ve bu bir şey görünmüyor, ben author_id bunu değiştirirseniz ancak tıklandığında doğru yazar kimliğini gösterir, ancak tam olarak kullanıcı dostu! Herkes bana yardımcı olabilir!

4 Cevap

Eğer $_GET kullanarak yaptım gibi sorgu dizesinden author_id çekmek olabilir ama beware sorgu tarafından geliyor ne doğrulamak gerekir . Ben bu kadar kötü bir güvenlik açığını doğrulama olmadan görebilirsiniz umuyoruz.

Ben şu anda iş yerinde değilim, ama bu sizin sorguyu hijyen olmadan ne gerek vermelidir hızlı bir örnektir.

$id = intval($_GET['author_id']); 
// of course, perform more validation checks
// just don't assume its safe.
$sql = "SELECT authorname FROM authors_tb WHERE author_id=" . $id;
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)) {
   echo "The books for: " . $row['authorname'];
 }

Eğer weren't URL parametrelerini temin AUTHOR_NAME için geçen $_GET URL parametresini kullanmak çünkü yaklaşım çalışmıyor neden nedeni sadece author_id.

You don't send it in the query string, thus you can't get it from the $_GET array.
Just request it from the database using id.

Verileri görüntülemek zaman An important note: Her istemci tarafında gelen, htmlspacialchars() kullanın.

Eğer senin olsun içinde yazar adı tanımlamak değil çünkü bu.

Aşağıdaki url yapmak gerekir:

<a href="viewauthorbooks.php?author_id=<?php echo $row['author_id']?>&authorname=<?php echo $row['authorname']?>"><?php echo $row['authorname']?></a>

Ya da aksine URI alınan kimliğini kullanarak, yeni sayfada, tekrar veritabanından verileri seçin.

Yazar ismi $ _GET olmayacaktır. Kodunuzu Haliyle, yalnızca bağlantı başlığı olarak kullanabilirsiniz. Bu adreste hiçbir yerde. Bunun yerine bu deneyin:

<a href="viewauthorbooks.php?author_id=<?php echo $row['author_id']?>&authorname=<?php echo $row['authorname']?>"><?php echo $row['authorname']?></a>

Bu olsa author_id kullanarak veritabanından yeniden istemek için daha iyi olurdu.

EDIT:

Daha ayrıntılı sorunu açıklamak için. Siz iki sayfa, new.php sayfası ve viewauthorbooks.php sayfa var. Haklısınız, deftere bağlantıyı kullanarak görünümü sayfasına yeni bir sayfa kullanıcıların yolluyorlar?

Bunda sorun bağlantı get bir değişken atar, olduğunu. İşte üretecek sorgu dizesi var:

viewauthorbooks.php?author_id=13

Ne yapacak viewauthorbooks için kullanıcı göndermek ve $_GET değişkene değeri '13 'yerdir: $_GET['author_id']. Author_id viewauthorbooks orada ve görüntüler nedeni budur. Ancak, authorName viewauthorbooks geçirilir asla, bu set, çünkü hiç in $_GET['authorname'] değil $_GET['authorname']. Eğer $_GET olmak istiyorsanız, o zaman sorgu dizesi böyle bakmak gerekir:

viewauthorbooks.php?author_id=13&authorname=bob

Eğer ben yukarıda yayınlanmıştır bağlantı için yeni HTML kodu kullanarak bu başarabilirsiniz. Şimdi sahip birinden önemli bir fark var, yakından bakmak.

Ancak, genellikle sorgu dizesi kullanıcıya görüntülenen ve enjeksiyon saldırılara açık bırakır çünkü, GET yoluyla veri aktarmak için önerilmez. Bunu yapmak için daha iyi bir yolu zaten tekrar veritabanından Yazarismi almak için viewauthorbooks.php geçiyoruz author_id kullanmak olacaktır. Eğer new.php sayfada kullanılan aynı kodu kullanabilirsiniz.