[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрос на вставку данных в БД
pretty_xai
Здравствуйте! Помогите пожалуйста разобраться, почему выдает ошибку.....
Есть таблица perif и в ней есть поля: id_perif, name_perif и model.

И есть общая таблица el_zhurnal, в которой есть поле id_perif.
На форме я формирую выпадающий список из БД $name_perif + $model
<TD>
<
select class='input' type='select' name='id_perif'>

<
option value='' disabled selected='selected'>Выберите оборудование...</option>
<?php $query = "SELECT name_perif, model, id_users, id_perif
FROM perif
WHERE id_users = '"
.$_SESSION['id_users']."'
"
;
$sql = mysql_query($query) or die(mysql_error());

if(mysql_num_rows($sql) > 0)
{
while($form_value_new = mysql_fetch_assoc($sql))
{
echo '<option>'. $form_value_new['name_perif'] .'&nbsp'. $form_value_new['model'] .'</option>';
}
}

?>
</select>
</
TD>




И соответственно запись в табл el_zhurnal

 $query = ("INSERT INTO el_zhurnal SET
neispr_date = '"
.$today."',
fio = '"
.$fio."',
id_ltor = '"
.$id_ltor."',
id_perif = (SELECT id_perif FROM perif WHERE name_perif = "
. $form_value_new['name_perif'] ."
AND model = "
. $form_value_new['model'] .")");
mysql_query($query) or die(mysql_error());

Но почему-то выдает ошибку

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND model = )' at line 6

Помогите пожалуйста с запросом! Сегодня целый день голову ломала и ничего не придумала! Пожалуйста не оставьте без внимания.



Спустя 8 минут, 54 секунды (25.06.2012 - 20:44) Placido написал(а):
Дублирование тем не приветствуется ни на одном форуме. Можно было просто сделать up в предыдущей теме. Тем более, я вам уже сказал - в $form_value_new['model'] ничего нет. Смотрите, как формируется этот элемент массива.

Спустя 10 минут, 47 секунд (25.06.2012 - 20:55) pretty_xai написал(а):
Извините пожалуйста за дублирование тем, просто я только сейчас заметила, что я изначально не в том разделе создала тему, а как перенести или удалить ее я не нашла... sad.gif

Цитата
в $form_value_new['model'] ничего нет. Смотрите, как формируется этот элемент массива.


Ну при формировании SELECTa переменная $form_value_new['model'] тоже участвует, и там проблем не возникает....SELECT формируется правильно....

Еще раз извиняюсь за дублирование...

Спустя 4 минуты, 46 секунд (25.06.2012 - 21:00) Placido написал(а):
Вопрос в том, что и как попадает в массив $form_value_new после отправки формы. Я лично этого не вижу.

Спустя 3 минуты, 6 секунд (25.06.2012 - 21:03) ИНСИ написал(а):
Попробуй так, ты просто забыла одинарные ковычки вставить в условие:
$query = "
INSERT
INTO `el_zhurnal`
SET `neispr_date` = '
{$today}', `fio` = '{$fio}', `id_ltor` = '{$id_ltor}',
`id_perif` = (
SELECT `id_perif`
FROM `perif`
WHERE `name_perif` = '
{$form_value_new['name_perif']}' AND `model` = '{$form_value_new['model']}'
)
"

;

Спустя 21 минута, 48 секунд (25.06.2012 - 21:25) pretty_xai написал(а):
Цитата
Попробуй так, ты просто забыла одинарные ковычки вставить в условие:



ИНСИ Точно, СПАСИБО! Вы правы. Ошибки больше не выдает, но в базу вставляет NULL. Хотя если поставить только одно условие,

[/php]WHERE `name_perif` = '{$form_value_new['name_perif']}'[php] то запрос срабатывает и выдает ошибку, что результат запроса больше чем одна строчка.
Получается что одну переменную $form_value_new['name_perif'] он определяет, а другую $form_value_new['model'] нет??Подскажите пожалуйста

Спустя 19 минут, 28 секунд (25.06.2012 - 21:44) ИНСИ написал(а):
Цитата
Подскажите пожалуйста

1. Посмотри, вставляется ли нужное значение. К примеру впиши:
exit($query);

2. Если все ок, смотри есть ли записи с твоим условием в бд.

Спустя 35 минут, 29 секунд (25.06.2012 - 22:20) pretty_xai написал(а):
Оказывается проблема вся в том, что эти две переменные почему-то не определяются! Если значения в зарос вписать в ручную, то данные корректно вставляются в бд не подскажите, как определить переменные $form_value_new['name_perif'] и $form_value_new['model']

В селекте я их определила
<select class='input' type='select' name='id_perif'>

<
option value='' disabled selected='selected'>Выберите оборудование...</option>
<?php $query = "SELECT name_perif, model, id_users, id_perif
FROM perif
WHERE id_users = '"
.$_SESSION['id_users']."'
"
;
$sql = mysql_query($query) or die(mysql_error());

if(mysql_num_rows($sql) > 0)
{
while($form_value_new = mysql_fetch_assoc($sql))
{
echo '<option>'. $form_value_new['name_perif'] .'&nbsp'. $form_value_new['model'] .'</option>';
}
}


</select>


А вот как их определить для запроса не могу понять...

Спустя 4 минуты, 24 секунды (25.06.2012 - 22:24) fdr написал(а):
в соседней теме ответил...)))
второй запрос выполняйте в цикле while($form_value_new = mysql_fetch_assoc($sql)) должно работать!

Спустя 27 минут, 31 секунда (25.06.2012 - 22:51) pretty_xai написал(а):

fdr
Если я вас правильно поняла, то второй запрос необходимо было выполнить так

    $query = "SELECT name_perif, model, id_users, id_perif 
FROM perif
WHERE id_users = '"
.$_SESSION['id_users']."'
"
;
$sql = mysql_query($query) or die(mysql_error());

if(mysql_num_rows($sql) > 0)
{
while($form_value_new = mysql_fetch_assoc($sql))
{
$query = ("INSERT INTO el_zhurnal SET
neispr_date = '"
.$today."',
fio = '"
.$fio."',
id_ltor = '"
.$id_ltor."',
id_perif = (SELECT id_perif FROM perif WHERE `name_perif` = '"
.$name_perif."'
AND `model` = '"
.$model."' )");
mysql_query($query) or die(mysql_error());
exit($query);
}
}

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

INSERT INTO el_zhurnal SET neispr_date = '25.06.12 22:45:06', fio = 'Султанов Денис Юрьевич', id_ltor = '1112', id_perif = (SELECT id_perif FROM perif WHERE `name_perif` = '' AND `model` = '' )


Я наверное вас неправильно поняла?

Спустя 16 минут, 20 секунд (25.06.2012 - 23:08) fdr написал(а):
Да, но обратите внимание на
id_perif = (SELECT id_perif FROM perif WHERE `name_perif` = '".$name_perif."'
$name_perif он разве не должен быть $form_value_new['name_perif']

Спустя 18 минут, 38 секунд (25.06.2012 - 23:26) pretty_xai написал(а):
fdr, спасибо вам огромное, запрос работает, но вот возникла теперь другая проблема... Запрос вставляет всегда только первую запись из таблицы, независимо , что выбрано в форме. Но это и понятно, т.к. сначала идет форма.....(в ней запрос на формирование списка селект)......форма продолжается......и только потом в новом цикле запрос на вставку в бд. Ну это и понятно, т.к. начался новый цикл и переменные обнулились...А как же сделать так, чтобы из первого селекта переменные использовались во втором?Заранее большое спасибо!

Может так $_POST[$form_value_new]['name_perif']???

Спустя 11 минут, 12 секунд (25.06.2012 - 23:38) fdr написал(а):
$_POST['id_perif'] - оно будет работать после отправке формы
вообще можно для отладки оспользовать var_dump($_POST);

Спустя 10 минут, 18 секунд (25.06.2012 - 23:48) pretty_xai написал(а):
Цитата
var_dump($_POST);

за это отдельное спасибо... А по поводу
Цитата
$_POST['id_perif']
я знала, но только у меня селект
'<option>'. $form_value_new['name_perif'] .'&nbsp'. $form_value_new['model'] .'</option>';
состоит из двух переменных и такое обращение не подойдет...

Спустя 22 минуты, 43 секунды (26.06.2012 - 00:11) pretty_xai написал(а):
Форумчане, подскажите пожалуйста

Вот сформировала я окончательно запрос...


             $query = ("INSERT INTO el_zhurnal SET 
neispr_date = '"
.$today."',
fio = '"
.$fio."',
id_ltor = '"
.$id_ltor."',
id_perif = (SELECT id_perif FROM perif WHERE `name_perif` = '"
.$_POST['name_perif']."'
AND `model` = '"
.$_POST['model']."' )");

Результат такой получается

INSERT INTO el_zhurnal SET neispr_date = '26.06.12 00:02:51', fio = 'Султанов Денис Юрьевич', id_ltor = '1112', id_perif = (SELECT id_perif FROM perif WHERE `name_perif` = 'Ксерокс HP 1200' AND `model` = '' )


А должен получиться

INSERT INTO el_zhurnal SET neispr_date = '26.06.12 00:02:51', fio = 'Султанов Денис Юрьевич', id_ltor = '1112', id_perif = (SELECT id_perif FROM perif WHERE[i][b] `name_perif` = 'Ксерокс ' AND `model` = 'HP 12[/i]00'[/b] )


Подскажите как разделить переменные?

Спустя 20 минут, 23 секунды (26.06.2012 - 00:31) pretty_xai написал(а):
Спасибо всем огромное!!!Проблему решила с помощью функции explode! Вы заставляете людей думать и в этом ваш бооольшой плюс! Спасибо

Спустя 9 часов, 35 минут, 39 секунд (26.06.2012 - 10:07) fdr написал(а):
Цитата
id_perif = (SELECT id_perif FROM perif WHERE `name_perif` = '".$_POST['name_perif']."'

Откудого у вас тут $_POST['name_perif']
в форме у вас <select class='input' type='select' name='id_perif'>
id_perif - значить данные из формы у вас будут в $_POST['id_perif']
что бы в один <option> заталкнуть две переменные и потом их использовать
echo '<option>'. $form_value_new['name_perif'] .'&nbsp'. $form_value_new['model'] .'</option>';

можно сделать так, при формирование формы...
echo 
'<option value="'.
$form_value_new['name_perif'] .
'|' .
$form_value_new['model'] .
'">' . $form_value_new['name_perif'] .'&nbsp'. $form_value_new['model'] .
'</option>';

при отправке формы в переменной $_POST['id_perif'] должно быть примерно
Ксерокс|HP 1200
вот их можете разделить, примерно так
list($pervoye_znach, $vtoroye_znach) = explode('|', $_POST['id_perif']);


Спустя 20 минут, 18 секунд (26.06.2012 - 10:27) pretty_xai написал(а):
fdrДа, я же написала! Исправила код сама (я сама нашла все те ошибки, которые вы указали...) и про функцию explode('|', $_POST['id_perif']); я тоже додумалась! Просто была каша в голове, а потом села и аккуратно все разобрала...Главное, что вы меня направили ....Спасибо!!!

А еще я хотела спросить (извините, но не по теме) вот я только недавно начала изучать php, и на данном этапе при написании кода все равно какая-то каша, беспорядок. Это пройдет со временем? Приходит с опытом?

Спустя 4 минуты, 34 секунды (26.06.2012 - 10:32) fdr написал(а):
Цитата
А еще я хотела спросить (извините, но не по теме) вот я только недавно начала изучать php, и на данном этапе при написании кода все равно какая-то каша, беспорядок. Это пройдет со временем? Приходит с опытом?

Если будете хорошо учится, то конечно!!!))) biggrin.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.