PHP ile Metin biçimlendirme

2 Cevap php

Ben SQL üzerinden ekleyebilirsiniz yüzden bir liste biçiminde bir yolu var mı?

Benim şu anki liste biçimi test:test ve bunu benim veritabanına eklemek, böylece onu biçimlendirmek mümkün olmak istiyorum.

INSERT INTO `test` (`user`, `file`) VALUES
('test', 'test'),
('test2', 'test2'),
('test@test3.com', 'test3');

Bu bir ihtimal olabilir mi?

<?
if($_POST['oldlist']){

$sql = "SELECT * FROM test WHERE user='$_POST[oldlist]'";
$result = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($result) > 0) { echo "exists";} else {

$sqlq = "INSERT INTO test (`user` ,`file`)
VALUES ('$_POST[oldlist]');";
$add = mysql_query($sqlq) or die(mysql_error());
if($add){echo "done";}else {echo "failed";}
}}
?>

Demektir Something? Ben bir liste göndermek ve benim veritabanına eklemek sahip olmak istiyorum, ama ilk biçimlendirilmiş olması gerekir.

2 Cevap

Eğer kod kötü bir SQL enjeksiyon kusur var. Eğer değerler kaçmak emin olun! İşte kodunuzu kaçış ve veritabanına eklemek öneririm nasıl:

<?php
// Use isset to determine whether there is a value present
if(isset($_POST['oldlist'])){

	$oldlist = $_POST['oldlist'];
	// Escape your data. Makes sure someone inject code that can jack your DB
	$oldlist_esc = mysql_real_escape_string($oldlist);

	$sql = "SELECT * FROM test WHERE user='$oldlist_esc'";
	$result = mysql_query($sql) or die(mysql_error());
	if(mysql_num_rows($result) > 0)
		echo "exists";
	else {
		// I'll assume your data is line-delimited
		$oldlist = explode("\n", $oldlist);
		$new_oldlist = $oldlist;
		foreach($oldlist as $key=>$value) {
			$new_oldlist[$key] = explode(" ", $value, 1); // I'll assume each line is space-delimited

			// Escape the new data
			foreach($new_oldlist[$key] as $new_key=>$new_value)
				$new_oldlist[$kew_key] = mysql_real_escape_string($new_value);
		}
		$sqlq =	   "INSERT INTO test (`user` ,`file`) VALUES ";

		// Build out the query
		$c = 0;
		foreach($new_oldlist as $value) {
			if($c++ > 0) $sqlq .= ',';
			$sqlq .= '("';
			$sqlq .= implode('","', $value);
			$sqlq .= '")';
		}

		$add = mysql_query($sqlq) or die(mysql_error());
		if($add)
			echo "done";
		else
			echo "failed";
	}
}

?>

(: "Asdfasdf $ myvar asdfasdf" yani), ama mysql_real_escape_string kullanarak veri kaçmak için hatırlıyorum dizeleri içinde değişken kullanmak iyidir. Bu gibi verileri enjekte gelen kullanıcı tutar:

';DELETE FROM test WHERE true;--

etkili bir veritabanını silmek hangi. Bu yardımcı olur umarım!

Lütfen $ _POST bir dizi içinde bazı eşleştirilmiş değerleri varsa, tarafından dizinin öğelerinin her patlayan deneyin ":" Tek bir insert için doğru sözdizimi ile onlara katılmadan, daha sonra çoklu insert için bütün dizi katılmak:

<?
// Just added 'olduser' as it seemed to go with WHERE user=... , change to your needs
if($_POST['olduser'] && $_POST['oldlist']){

$sql = "SELECT * FROM test WHERE user='$_POST[olduser]'";
$result = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($result) > 0) { echo "exists";} else {

foreach ($_POST['oldlist'] as &$each)
{
    $each = explode(":",$each);
    $each = "('".join("','",$each)."')";
}

$_POST['oldlist'] = join(",",$_POST['oldlist']);

// no semi-colon at end
$sqlq = "INSERT INTO test (`user` ,`file`) VALUES $_POST[oldlist]";
$add = mysql_query($sqlq) or die(mysql_error());
if($add){echo "done";}else {echo "failed";}
}}
?>

Neyse, tablolar ile dikkatli olun, ben bile lokal kullanım için sorguları sterilize olmadan tutmaz.