Массив php и база данных mysql, сохраняющие данные

У меня проблемы с массивом. Он действительно появляется на странице: форма из нескольких строк. Каждая строка соответствует записи в базе данных, поэтому все они имеют общий знаменатель.

Еще благодаря javascript я могу добавлять поля на лету.

Проблема, с которой я сталкиваюсь, заключается в записи данных. На самом деле я сначала подумал, что должен delete все, а потом insert, поэтому я просто сделал следующий запрос:

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

foreach($_POST['data'] as $data){
    if (!empty($data['code_s'])){
$sql2="DELETE FROM scenarii WHERE code_s='".mysql_real_escape_string($_GET['code_s'])."'";
mysql_query($sql2) or die(__LINE__.mysql_error().$sql2);    

$sql7 = '
INSERT INTO  scenarii SET 
code_s              = "'.mysql_real_escape_string($data['code_s']).'", 
titre               = "'.mysql_real_escape_string($data['titre']).'",
action              = "'.mysql_real_escape_string($data['action']).'", 
libelle             = "'.mysql_real_escape_string($data['libelle']).'",
jour                = "'.mysql_real_escape_string($data['jour']).'"' ;    
mysql_query($sql7) or die(__LINE__.mysql_error().$sql7);

    } 
  } 
}
?>

Беспокойство заключается в том, что удаленная информация не сохраняется снова (хотя они находятся в переменной post, поскольку они существуют в виде формы и, следовательно, являются переменными.

На самом деле он сохраняет только новые строки из javascript.

Беда в том, что я не могу сделать обновление только потому, что появились новые строки.


person Stanislas Piotrowski    schedule 18.08.2012    source источник


Ответы (2)


<?php if(isset($_POST['enreg']))
{
$sql2="DELETE FROM scenarii WHERE code_s='".mysql_real_escape_string($_GET['code_s'])."'";
mysql_query($sql2) or die(__LINE__.mysql_error().$sql2);  
foreach($_POST['data'] as $data){
if (!empty($data['code_s'])){

$sql7 = '
INSERT INTO  scenarii SET 
code_s              = "'.mysql_real_escape_string($data['code_s']).'", 
titre               = "'.mysql_real_escape_string($data['titre']).'",
action              = "'.mysql_real_escape_string($data['action']).'", 
libelle             = "'.mysql_real_escape_string($data['libelle']).'",
jour                = "'.mysql_real_escape_string($data['jour']).'"' ;    
mysql_query($sql7) or die(__LINE__.mysql_error().$sql7);

} 
} 
}
?>

поместите запрос на удаление перед циклом foreach

person M Khalid Junaid    schedule 19.08.2012
comment
это то, что я делал раньше, но я не видел этого раньше. Спасибо за ответ. - person Stanislas Piotrowski; 19.08.2012

после нескольких часов тестирования я увидел, что запрос на удаление был в цикле для каждого, поэтому он удалил все после повторной инъекции, поэтому у меня всегда остается только последний ввод.

Теперь я удалил все и снова ввел все после. Он работает правильно.

Чего я не понимаю, так это того, что я не видел его раньше.

Спасибо всем за помощь.

person Stanislas Piotrowski    schedule 19.08.2012