SQL tabloya satırların bir dizi takma

5 Cevap php

Bu kod parçasına bir göz atın eğer ben gerçekten teşekkür ediyorum:

<?php
if(isset($_POST['add'])) {

$self = $_SERVER['PHP_SELF']; //the $self variable equals this file
$ipaddress = ("$_SERVER[REMOTE_ADDR]"); //the $ipaddress var equals users IP

//connect
$connect = mysql_connect($host,$username,$password) or die('<p class="error">Unable to 
connect to the database server at this time.</p>');
 mysql_select_db($database,$connect) or die('<p class="error">Unable to connect to the 
database at this time.</p>');

//fetch data
$data = htmlspecialchars($_POST['list']);
$comment =  mysql_real_escape_string($_POST['comment']);

$data_lines = explode( "\r\n", $data );
$comment_lines = explode( "\r\n", $comment );
for($i=0;$i<count($data_lines);$i++)
{
$data_fields = explode( ",", $data_lines[$i]);

  $time = time();
  $queryb = "INSERT INTO coords SET tag='$data_fields[0]', guild='$data_fields[1]', name='$data_fields[2]', base='$data_fields[3]', econ='$data_fields[5]', maxecon='$data_fields[6]', location='$data_fields[4]', comment='$comment_lines[$i]', ipaddress='$ipaddress' ,date='$time';";

  // if it succeeds, display message
  if (@mysql_query($queryb))
  {
     echo('<p class="success">Successful posting of ['.$data_fields[3].']!</p>');
  }
  else
  {
     echo('<p class="error">Error could not post ['.$data_fields[3].'] to database!</p>');
}
}//end for loop
}//end if $_POST['add'] statement
?>

Gördüğünüz gibi, bir formun teslim alınan verileri alır ve çizgilerin içine patlar.

For $data, it explodes it again for each comma. It then inserts everything for each comma, in a new column and for each line, on a new row.

Now for $comment, it should be inserting it on a new row for each line, which isn't doing it. Been looking and testing at it for a few days now.

Yorum kolon uzunluğu 100 bir varchar.

Yani temelde, bu i her hat için yeni bir satırda $ yorum ekleyerek dışında yapmanız gereken her şeyi yapar.

5 Cevap

ve sorumu yanıtlarken zaman yatırım için teşekkür ederim, ama ben çalışan bir çözüm bulduk gibi görünüyor. İşte gidiyor:

Burada mysql_real_escape_string () fonksiyonu dışında yorum kırma gibi görünüyor:

$comment =  mysql_real_escape_string($_POST['comment']);

So what I would need to do is add an extra backslash for every backslash. So here:

$comment_lines = explode( "\r\n", $comment );

Olmalıdır:

$comment_lines = explode( "\\r\\n", $comment );

Bunun yerine.

Her neyse, ben soruma okuma zaman ayırdığınız ve onu çözmeye çalıştığınız için tekrar teşekkür etmeliyim.

"\r\n" "\n" ile değiştirmeye çalışın

Ben tam olarak sorunuzu anlıyorum ki tamamen emin değilim, ama dize bir potansiyel sorun interpolasyonudur. Sen doğru kaçan olmadan böyle diziler koymak asla. Doğru dizesi gibi bir şey olacaktır:

$ Queryb = "tag = '{$ data_fields [0]}', lonca = '{$ data_fields [1]}', name = '{$ data_fields [2]}', baz = '{$ data_fields SET coords INSERT INTO [3]} ', ekonomi =' {$ data_fields [5]} ', maxecon =' {$ data_fields [6]} ', location =' {$ data_fields [4]} ', comment =' {$ comment_lines [$ i]} $ zaman '$ ipaddress', tarih = ', = IPADDRESS'; ";

Plaindrom belirtildiği gibi "\ r \ n" sadece "\ n" ile, bu şekilde form "\ r \ n" ile sunulan hem davalarını kapsayacak ve sadece "\ n" yerine denemelisiniz. Ben öncelemeli sorunlara neden olmadığından emin olmak için, sizin döngünün içine kaçan hareketli düşünebilirsiniz söyleyebilirim.

Ayrıca sorgu dizesi içindeki değişkenler etrafında parantez eklemek isteyeceksiniz. Çoğu zaman "Bazı string $ dizi [0]" $ dizi ayrıştırmak değil, $ dizi [0]. Yani olmak için sorgu geçmek isterim:

$queryb = "INSERT INTO coords SET tag='{$data_fields[0]}', guild='{$data_fields[1]}', name='{$data_fields[2]}', base='{$data_fields[3]}', econ='{$data_fields[5]}', maxecon='{$data_fields[6]}', location='{$data_fields[4]}', comment='{$comment_lines[$i]}', ipaddress='$ipaddress' ,date='$time';";

Bunu teknik olarak bu $ ipaddress ve $ zaman yapmak gerekmez ancak tutarlılık için eğer hayır, kötü bir fikir olabilir.

İlk:

print_r($data_lines ) ."<br>";
print_r($comment_lines) ."<br>";

ve sonra her ekleme:

$queryb = "INSERT INTO coords SET 
	tag='" . $data_fields[0] ."',  
	guild='" . $data_fields[1] ."', 
	name='". $data_fields[2] ."', 
	base='".$data_fields[3]."', 
	econ='".$data_fields[5]."', 
	maxecon='".$data_fields[6]."', 
	location='".$data_fields[4]."', 
	comment='".$comment_lines[$i]."', 
	ipaddress='".$ipaddress."' ,
	date='".$time."';";

echo $queryb  . "<br><br>";


Bu müşteri gelir budur bak.

print '<pre>'; 
for ($ ind = 0, $ ind <strlen ($ _POST [ 'comment']); $ ind + +) ( 
   $ w = substr ($ _POST [ 'comment'], $ ind, 1); 
   print $ w. "." ord ($ _POST [ 'comment']). "<br>; 
) 
print '</ pre>';