2016-03-23 18 views
-2

Son birkaç ay boyunca bana bu kadar büyük tavsiyeler veren herkese teşekkürler. Bu projeyle neredeyse bitirdim ve çok şey öğrendim. Ama ben sadece textarea kullanarak stumped ettik. Ben googled ve googled ve bir çözüm bulamıyorum.Sadece 1'inci textarea veri tabanına gidiyor

Bu herkese açık bir web sitesi değil, dolayısıyla sql enjeksiyonu hakkında endişelenmiyorum ve kuruluşum PHP'nin daha eski bir sürümünü kullanıyor, bu yüzden mysql_query veya mysqli_query kullanmam gerekiyor.

Sorunum, veritabanımdaki iki şeyi bir forma eklemem gerekiyor, böylece kullanıcı veritabanını yeni girdilerle düzenleyebilir ve güncelleyebilir. Birisi giriş = "metin" kullanarak görüntülediğim küçük bir metin dizesidir. Ancak diğeri, bir metin kutusu için çok fazla olduğu için kullanıyorum bir dizi talimat listeleyen daha uzun bir dizedir. Ancak, güncelleştirme sorgumu çalıştırdığımda, sadece textarea dizesinin ilk harfi veritabanımda güncellenir. Metin kutusu dizesi düzgün çalışıyor. İşte

getrcs.php

<html> 
<form> 
<body> 


<?php 
$q = intval($_GET['q']); 
include ('database_connect.php'); 
$sql= "SELECT * FROM RDS_REFERENCE WHERE ID = '".$q."'"; 
$query_result=mysql_query($sql); 
?> 

<table> 
<tbody> 

<?php 
while($row = mysql_fetch_array($query_result)) { 
?> 

<tr> 
<td> 
<label>Sub File Series Number/Title</label> 
<input type="text" style="width:250px;" required="Required" name="sub_fs_num_tle1[]" value="<?php echo $row['SUB_FS_NUM_TITLE']?>/> 
</td> 




<td> 
<label>Disposition Instructions</label> 
<textarea name="disp_instr1" cols="40" rows="30" style="font-family: Arial, Helvetica sans-serif; font-size: 12px;"><?php echo $row['Disposition_Instructions'] ?></textarea> 
</td> 
</tr> 

<?php 
} 
?> 

</tbody> 
</form> 
</body> 
</html> 

Ve girdi name="disp_instr1"$_POST['disp_instr1'] bir string değil, bir array olduğunu olduğundan

<?php 

include('database_connect.php'); 

foreach($_POST['id'] as $row => $id) 


{ 
$sub_fs_num_tle1 = $_POST['sub_fs_num_tle1][$row]; 
$disp_instr1 = $_POST['disp_instr1'][$row]; 


$rcs_reference_update1 = "UPDATE RDS REFERENCE SET 
          SUB_FS_NUM_TITLE = '$sub_fs_num_tle1', 
          Disposition_Instructions = '$disp_instr1' 
          "; 

mysql_query($rcs_reference_update1) or die("Could not update".mysql_error()); 

} 

header('Location:rcs_maint.php'); 

?> 
+1

Burada tek bir alıntı kaçırıyorsunuz: intval ($ _ GET ['q]); – frosty

+1

** Kullanımdan kaldırılmış ve PHP7 kaldırılmış ** mysql_ * işlevleri kullanılarak durdurulmalıdır. PDO'ya geçin ve Hazırlanmış Deyimleri kullanmaya başlayın. –

+0

Bir dizenin içinde olmayan çift tırnak işareti kullanmanız gerekmiyor: WHERE ID = '". $ Q."' – frosty

cevap

0

update_rcs.php benim kod. Bu,'un $row karakterinin bu dizede ne olursa olsun çıkacağı anlamına gelir.

Basit demo:

$test = 'test'; 
echo $test[0]; 

Çıkışlar:

t

Canlı Demo:

: https://eval.in/541463

konu kullanımını çözmek için

$disp_instr1 = $_POST['disp_instr1']; 

Ayrıca, SQL enjeksiyonları, parametreli sorguları kullanmanın tek nedeni değildir. Tek bir teklifin db'nize gitmesi gerekiyorsa olduğu gibi başarısız olur.