[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: где ошибка (функция substr())
Олька87
В таблице отмечаю флажками нужные строки и они заносятся в другую таблицу в другой БД. Запрос типа "INSERT INTO BD1.table1 (ISBN, title, price) SELECT ISBN, title, price_1 FROM BD2.table2 where id IN (1,2,3)" Мой скрипт:

// Получаем список отмеченных checkbox
$id = $_POST['id'];
if (!empty($id)){
// Начинаем формировать переменную, содержащую этот список
// в формате "(1,2,3)"

$query = "(" ;
foreach($id as $val) $query.= "$val,";
// Удаляем последнюю запятую, заменяя ее закрывающей скобкой)

$query = substr($query, 0, strlen($query) - 1 ) .")";

// Завершаем формирование SQL-запроса на вставку выбранных записей
$res = mysql_query("INSERT INTO BD1.table1 (ISBN, title, price)
SELECT ISBN, title, price_1 FROM DB2.table2 where id IN
\"$query\"")
or die(mysql_error());

}


В результате выводится сообщение:
Warning: Invalid argument supplied for foreach() in /usr/home/stud/public_html/index1.php on line 423
У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около '")"' на строке 1

В чем ошибка, подскажите люди!!!!!!




Спустя 31 минута, 40 секунд (8.02.2010 - 03:34) dr_Lev написал(а):
Цитата
$query = "(" ;
        foreach($id as $val) $query.= "$val,";
// Удаляем последнюю запятую, заменяя ее закрывающей скобкой)

        $query = substr($query, 0, strlen($query) - 1 ) .")";
лучше замени на
$query = "('".implode("','",$_POST['id'])."')";

Спустя 5 часов, 6 минут, 2 секунды (8.02.2010 - 08:40) ИНСИ написал(а):
Олька87 или может так сделать:
	
if ($_POST['id']) {
$listQuery = implode(",", intval($_POST['id']));

$res = mysql_query("
INSERT
INTO BD1.table1(ISBN, title, price)

SELECT ISBN, title, price_1
FROM DB2.table2
WHERE id IN (
{$listQuery})
"
) or die(mysql_error());
}

Спустя 7 часов, 24 минуты, 7 секунд (8.02.2010 - 16:04) Олька87 написал(а):
Спасибо, но оба варианта почему-то не работают... Я уж по-всякому кавычки со скобками ставила, все "некорректный синтаксис около ')' на строке 2" unsure.gif

Спустя 1 час, 52 минуты, 47 секунд (8.02.2010 - 17:57) ИНСИ написал(а):
Олька87 покажи ошибку плиз

Спустя 11 минут, 4 секунды (8.02.2010 - 18:08) Олька87 написал(а):
да пожалуйста:

Warning: implode() [function.implode]: Invalid arguments passed in /usr/home/stud/public_html/index1.php on line 426
У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около ')' на строке 2

Спустя 27 минут, 18 секунд (8.02.2010 - 18:35) Mizka написал(а):
а в $_POST['id'] у тебя массив? smile.gif думаю проблема в этом месте, а не запросе smile.gif

данные с формы надо передавать как:

<input type="checkbox" name="control_name[]" value="some_val">
<input
type="checkbox" name="control_name[]" value="one_more_val">

а не

<input type="checkbox" name="control_name" value="some_val">
...

Спустя 37 минут, 42 секунды (8.02.2010 - 19:13) ИНСИ написал(а):
Олька87 ошибка точно не в запросе, говорит что ошибка в функции implode(), то есть вот в этом коде:
$listQuery = implode(",", intval($_POST['id']));

то есть не ошибка, я проблема.

Mizka правильно говорит, проверь свою форму...

Спустя 3 часа, 7 минут, 46 секунд (8.02.2010 - 22:20) Олька87 написал(а):
Мой сокращ. скрипт
<form method=post action="<?php echo $_SERVER['PHP_SELF']?>"> 
<?php
$sql = "SELECT * FROM table2";
$res = mysql_query($res) or die(mysql_error());

{ [скрипт, выводящий таблицу]
echo "<th><input name='id[]' type='checkbox' value=".$r["id"]."></th>";
}
?>
<td><input type=submit name='add' value='Подтвердить'></td>
</
form>
<?php
$id = $_POST['id'];
if ($id) {
foreach ($id as $val) $listQuery = implode(",", intval($id));
$res = mysql_query("
INSERT INTO DB1.table1 (ISBN, title, price) SELECT ISBN, title,
price_1 FROM DB2.table2 where id IN (
{$listQuery})
"
) or die(mysql_error());

}
else echo "Enter value";

В результате, сколько checkbox отмечу, столько Warning'ов и получаю

Спустя 9 часов, 28 минут (9.02.2010 - 07:48) Kuliev написал(а):
Олька87
Посмотрите что у Вас в $ID


$id = $_POST['id'];

var_dump($id);


Спустя 52 минуты, 6 секунд (9.02.2010 - 08:41) ИНСИ написал(а):
Олька87 попробуй вот так:
<form action="" method="post">
<?php
$sql = mysql_query("
SELECT *
FROM `table2`
"
) or die(mysql_error());

while($row = mysql_fetch_array($sql)) {
echo '<th><input name="id[]" type="checkbox" value='.$row['id'].'></th>';
}
?>
<td><input type=submit name='add' value='Подтвердить'></td>
</
form>

<?
if ($_POST['id']) {
$listQuery = implode(",", intval($_POST['id']));

$res = mysql_query("
INSERT
INTO BD1.table1(ISBN, title, price)

SELECT ISBN, title, price_1
FROM DB2.table2
WHERE id IN (
{$listQuery})
"
) or die(mysql_error());

echo 'Ok';
}
?>
Быстрый ответ:

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