#php #jquery #mysql #ajax
#php #jquery #mysql #ajax
Вопрос:
Чтение текстовой области с помощью jquery, разделение каждой строки в массиве, затем с помощью ajax отправка этого массива в mysql через php, но в результатах вставляется только первое значение.
Таблица:
CREATE TABLE IF NOT EXISTS addresses (
id int(8) NOT NULL PRIMARY KEY,
user_id int(8) DEFAULT NULL,
address_value varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Вот код Jquery :
$('#insertad').click(function(){
var lines = $('#txtArea').val().split('n');
var phparray = new Object();
for(var i = 0;i < lines.length;i ){
phparray[i] = lines[i]; //store value in object
}
$.post('functions.php?action=insertad', {array1:$.param(phparray)}, function(resp){
$('.text-success').html(resp);
if(resp == 'Added'){
$('.text-success').html('Added Address :');
}
});
});
Вот PHP-код :
if ($action == 'insertad') {
$pieces = explode('amp;', $_POST['array1']); //explode passed serialized object
$phparray = array();
foreach ($pieces as $piece) {
list($key, $value) = explode('=', $piece);
$phparray[$key] = $value; //make php array
}
$length = count($phparray);
for ($i = 0; $i < 7; $i ) {
$sql = "select address_value from addresses where address_value = '$phparray[$i]'";
$qry = mysql_query($sql);
$numrows = mysql_num_rows($qry);
if ($numrows > 0) {
echo "One Found !!" ;
} else {
$sql = "insert into addresses (address_value) values ('$phparray[$i]')";
$qry = mysql_query($sql);
if ($qry) {
echo "Added";
}
}
}
}
Комментарии:
1.
mysql_*
устарело и закрыто в php 7, и ваш код открыт для SQL-инъекции прочитайте это bobby-tables.com2. Какая у вас версия php??
3. у вас есть структура таблицы mysql… Я не понимаю, как структурирована ваша таблица. Во-вторых, используйте некоторую отладку и проверьте, полностью ли ваш массив размещен в файле php.
4.
$sql = "select address_value from addresses where address_value = '$phparray[$i]'";
массив заключен в одинарные кавычки, php интерпретирует его как строку…5. Версия PHP: 5.4.45
Ответ №1:
Попробуйте это, пожалуйста…
JS:
var $textarea = $('textarea'); // maybe you have to specific your selector!
var textArray = $textarea.val().split("n"); // this array is already done, your have not todo next for() loop
$.post('functions.php', {
action: 'insertad',
array1: textArray
}, function(results) {
$.each(results, function(reslt) {
if(result === 'Added') {
$('.status').append(result);
}
else {
$('.status').append(result);
}
});
});
PHP:
if($action === 'insertad') {
$results = [];
$input = $_POST['array1'];
foreach($input AS $textLine) {
$escapedTextLine = mysqli_real_escape_string($resource, $textLine);
$result = mysqli_query($resource, 'select address_value from addresses where address_value = "'.$escapedTextLine.'"');
$affectedRows = mysqli_num_rows($result);
if($affectedRows > 0) {
$results[] = 'One Found !!';
}
else {
$result = mysqli_query($resource, 'INSERT INTO `adresses` (`address_value`) VALUES("'.$escapedTextLine .'");
if($result) {
results[] = 'Added!';
}
}
}
return $results; // we return all done results to check this array in ajax response
}
Обратите внимание: я писал код вслепую, поэтому, возможно, вам придется внести некоторые небольшие изменения, например, для ваших переменных или чего-то подобного.
Примечание 2: Я пишу код с помощью mysqli
, поэтому вам придется переписать код настройки подключения к базе данных.
Пожалуйста, никогда не забывайте использовать mysqli_real_escape_string
do something с пользовательским содержимым.