Как вставить значения массива в mysql с помощью цикла

#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.com

2. Какая у вас версия 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 с пользовательским содержимым.