MySQL veri ile HTML metin kutusu nasıl doldurulacağı

4 Cevap php

Ben güncelleme formu yapmaya çalışıyorum. Güncelleştirme bölümü zaten çalışıyor, ama ben kullanıcıların giriş verileri tekrar tekrar sadece güncellemek için olmaz ki bir görünüm düğmesini koymak için gidiyorum eğer daha iyi olurdu.

Ben bu kod üzerinde çalışıyorum, onun form eylemi olarak aşağıdaki kodla html şeklinde bir düğme var. Onun işi girilen telefon numarasına bağlı olarak uygun veri ile Metin kutularının doldurmak için.

<?php
    $con = mysql_connect("localhost","root","");
    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }
    mysql_select_db("hospital", $con);

    $result = mysql_query("SELECT * FROM t2 WHERE TELNUM='{$_POST["telnum"]}'");

    while ($row = mysql_fetch_array($result))
    {

    <form>
        <input  name="lname" type="text"<?php echo $result["lname"];">
    </form>
?>

Ne benim koduyla yanlış? Ben hala PHP bir acemi değilim.

4 Cevap

Sizin HTML doğru görünmüyor; Bir metin giriş alanı için değer value niteliği, örneğin ile belirtilen

<input name="lname" type="text" value="<?php echo( htmlspecialchars( $row['lname'] ) ); ?>" />

Satır veri $row karma mevcut olacaktır; $result MySQL sonuç tampon sadece bir göstericidir. Buna ek olarak, bir echo ifadesinden sonra ?> etiketi ve son ?> yanlış olduğunu kaçırıyorsun. Ayrıca while döngüsü için hiçbir kapanış ayraç var gibi görünüyor

Metinde HTML varlıkları kaçmak için htmlspecialchars() kullanımına dikkat. Bu yanlışlıkla etiketi kapanış ve tüm HTML üzerinde çöp bildirilecektir gelen veritabanında metin önlemek (ve herhangi bir etkiye sahip kullanıcıların kötü niyetli giriş karşı engeller) olacaktır.

Genel olarak, doğru çözüm gibi görünebilir:

<?php
$con = mysql_connect( 'localhost', 'root', '' );
if( !$con ) {
    die( 'Could not connect: ' . mysql_error() );
} else {
    mysql_select_db( 'hospital', $con );
    $result = mysql_query( "SELECT * FROM t2 WHERE TELNUM='{$_POST["telnum"]}'" );
    while( $row = mysql_fetch_array( $result ) ) {
        ?>
        <form>
            <input name="lname" type="text" value="<?php echo( htmlspecialchars( $row['lname'] ) ); ?>" />
        </form>
        <?php
    }
}
?>

Son olarak, size ikinci bir tahmin, ancak SQL sorguları ($_GET ve $_POST gibi) kullanıcı tarafından sağlanan verileri keyfi değerleri ekleme konusunda dikkatli olmak değil - kötü niyetli bir kullanıcı için bu kullanabilirsiniz kasten Gerçekleştirdiğiniz istemiyorum sorguları oluşturmak, ya da kötü niyetli olmayan bir kullanıcı oldukça makul istemeden beklenmeyen bir hataya neden, SQL kırar veri sağlayabilir (ya da tekrar, bilinmeyen kırık bazı davranış biçimi). Bu konuda daha fazla bilgi edinmek için iyi bir başlangıç ​​noktası olarak PHP web sitesinde SQL injection page bir göz atın.

Bu olmalıdır:

<input  name="lname" type="text"<?php echo $row['lname'];

Değil

<input  name="lname" type="text"<?php echo $result['lname'];

$ Sonuç sadece - mysql_query () çağrısı boolean sonucudur.

$ Satır döngünün her tekrarında gerçek verilerdir.

Şeylerin bir dizi burada yanlış.

  1. Sen açılış ve kapanış konum PHP etiketlerini eşleşmiyor. Sen başında bunları açık ve yaptığın gibi altta bunları kapatabilir, sadece o yaparken HTML yankı var.

  2. Girişi değerini önceden için kullanabileceğiniz bir değer niteliğini alır.

  3. Eğer sizin MySQL getirilen dizisi çekerek istediğiniz dizisi $row, değil $result.

  4. Sizin ise döngü kapatmak için yardımcı olacaktır.

  5. Eğer çıkış kaçmak için çıkış olmak ne bağlı olarak, iyi olurdu.

    while($row = mysql_fetch_array($result)){ echo " "; }

Yerine neden htmlentitiesi htmlspecialchars, ben daima htmlentitiesi kullanın.