PHP ile MySQL veri güncellenirken hata

5 Cevap php

Ben onay kutuları veri yapma kullanımını güncellemeyi deneyin. Kutulardan bir veya daha fazla kontrol edilmez Ama, bir haber verilir:

Notice: Undefined index: E stats2: hat 12 \ wamp \ www \ HASTANESİ \ update.php

Notice: Undefined index: E stats3: hat 12 \ wamp \ www \ HASTANESİ \ update.php

Notice: Undefined index: E stats5: hat 12 \ wamp \ www \ HASTANESİ \ update.php

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

    mysql_select_db("Hospital", $con);




       mysql_query("UPDATE t2 SET HOSPNUM ='$_POST[hnum]', ROOMNUM='$_POST[rnum]', ADDATE= '$_POST[ad8]', ADTIME='$_POST[adtym]', LASTNAME='$_POST[lname]', FIRSTNAME='$_POST[fname]', MIDNAME='$_POST[mname]', CSTAT='$_POST[cs]', AGE='$_POST[age]', BDAY='$_POST[bday]', ADDRESS='$_POST[ad]', SEX='$_POST[sex]', 
                                                                                                                                                                                                                                                                                                               STAT='$_POST[stats1]', STAT2='$_POST[stats2]', STAT3='$_POST[stats3]', STAT4='$_POST[stats4]', STAT5='$_POST[stats5]', STAT6='$_POST[stats6]', STAT7='$_POST[stats8]', STAT8='$_POST[stats8]', NURSE='$_POST[nurse]'              
        WHERE TELNUM ='$_POST[telnum]'");



    mysql_close($con)
    ?>

Bildirim göstermek olmaz ki, bana yardım eder misin?

5 Cevap

Bu onay kutuları için tanımlanmış behavoir olduğunu - set onlar formu verilerine dahil sadece zaman.

Sen onay kutusu işaretlenmiş olup olmadığını belirlemek için () isset kullanmalısınız.

bunu değiştirin

STAT='".isset($_POST['stats1']).", 
STAT2='".isset($_POST['stats2']).", 
STAT3='".isset($_POST['stats3']).", 
STAT4='".isset($_POST['stats4']).",  
STAT5='".isset($_POST['stats5']).", 
STAT6='".isset($_POST['stats6']).", 
STAT7='".isset($_POST['stats8']).", 
STAT8='".isset($_POST['stats8'])." 

Çalışan başka bir geçici çözüm onay kutusunu önce, aynı adla, gizli bir değişken eklemek için: Örn

<form action='t1.php' method='post'>
<input type='hidden' name="cb1" value="0">
<input type='checkbox' name="cb1" title='test'>
<input type='submit'  >
</form>
<?php 
print_r($_POST);
?>

$_POST dizisi, bir stats2 dizin içermez. Bir onay kutusu işaretli olduğunda bu isteği sonrası dahil olmayacak çünkü bu.

If the form elements are static then you can just check to see if they are set: Replace STAT6='$_POST[stats6]' with STAT6=(array_key_exists('stats6', $_POST)).

Form elemanları dinamik olarak oluşturulur, örneğin:

foreach($students as $student)
{ 
    echo "<input element='checkbox' name='student-is-present-{$value}'>";
}

Eğer kontrol ne belirleyebilir ve ne işaretli değil böylece daha sonra şeklinde gizli bir öğe içerir:

foreach($students as $student)
{ 
    echo "<input element='hidden' name='student-{$value}' value='student-is-present-{$value}'>";
    echo "<input element='checkbox' name='student-is-present-{$value}'>";
}

Sen dizi anahtarları belirtmelidir. Örneğin $_POST['stats5'] yerine $_POST[stats5] kullanımı. SQL SQL injection çok açıktır. Bunu önlemek için mysql_real_escape_string() gibi bir işlevle verileri kaçmak gerekir.

Eğer bir form üzerinde bir onay kutusu varsa kutusu işaretli ise onun değerini sadece sunucuya gönderilir. O işaretli değilse o anahtar $ _POST dizi yok olacak, dolayısıyla hatalar görüyoruz.

Ayrıca mysql enjeksiyonu önlemek için mysql_real_escape_string ile girdiyi gerekir.

POST kullanmak ve dizideki değişkenleri doğrudan GET olmamalıdır. Eğer, onlara temiz daha fazla bilgi edinmek için mysql enjeksiyon için aramak gerekir:

$hnum = isset($_POST['hnum']) ? mysql_real_escape_string($_POST['hnum']) : '';

ve daha sonra bu değişkenleri kullanın. Eğer mysql enjeksiyon önlemek ve bu bildirimler gidermek Bu şekilde