[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Добавление записей в БД
otix()90
Добрый день, форумчане, писал тут это ранее, но не поставил тогда упор на этот вопрос, так и не разрешил)

В общем добавляю я запросом записи в БД и выходит так что самая первая запись добавляется криво, все остальные заходят нормально.

ВОТ sql запрос

$sql4 = "INSERT INTO Variant (id_variant, id_polsov, id_polsov1) VALUES ('".$id_v."','".$_SESSION['id_u']."','".$RM[$i-1]['id']."')";



Проверяю эхами $id_v, $_SESSION['id_u'], $RM[$i-1]['id'] на текущем (првом) шаге прямо перед занесением их в БД - равны
50
17
9
Соответсвенно.

А в БД заносит 0 17 0

Следующие записи (со второго шага) закидывает уже нормально
50 17 10
50 17 11
...

В чем может быть дело?



Спустя 25 минут, 32 секунды (25.11.2011 - 14:52) rooor написал(а):
А чему равен $i при первом проходе цикла?)

Спустя 12 минут, 1 секунда (25.11.2011 - 15:04) Michael написал(а):
логируй не отдельные переменные, а весь текст запроса ($sql4) . На первом шаге что?

Спустя 9 минут, 23 секунды (25.11.2011 - 15:13) otix()90 написал(а):
на первом шаге $i = 1, в принципе значит что в sql значение ниже чем 0 не подается...)

$sql4 = "INSERT INTO Variant (id_variant, id_polsov, id_polsov1) VALUES ('".$id_v."','".$_SESSION['id_u']."', '".$RM[$i-1]['id']."')";

Спустя 5 минут, 52 секунды (25.11.2011 - 15:19) otix()90 написал(а):
если правильно понял про логировние

$sql4 = "INSERT INTO `Variant` (`id_variant`, `id_polsov`, `id_polsov1`) VALUES ('".$id_v."','".$_SESSION['id_u']."', '".$RM[$i-1]['id']."')";

Эффект тот же

Спустя 5 минут, 3 секунды (25.11.2011 - 15:24) rooor написал(а):
А что показывает

echo "<pre>";
print_r($RM);
echo "</pre>";


upd:
Ступил немного))

Спустя 38 секунд (25.11.2011 - 15:25) Michael написал(а):
Логирование - это тот же echo.
Сделай вывод, но не отдельных переменных, а всего текста запроса до того как он попадет в mysql_query. Или логи мускуля смотри

Спустя 5 минут, 54 секунды (25.11.2011 - 15:31) maximka787 написал(а):
otix()90
а разве можно писать в запрос '".$_SESSION['id_u']."'

ошибку-то не дает?

Спустя 4 минуты, 26 секунд (25.11.2011 - 15:35) otix()90 написал(а):
rooor,
Array
(
[0] => Array
(
[0] => 9
[id] => 9
[1] => 99
[name] => 99
[2] => 455645
[tel] => 455645
[3] => asd@mail.ru
[email] => asd@mail.ru
[4] => 3
[number_ustroen] => 3
[5] => 1
[number_sadik1] => 1
[6] => 7
[number_sadik2] => 7
[7] => 0
[number_sadik3] => 0
[8] => 1000
[groups] => 1000
[9] => 2011-10-21
[data] => 2011-10-21
)

[1] => Array
(
[0] => 10
[id] => 10
[1] => 1010
[name] => 1010
[2] => 455645
[tel] => 455645
[3] => asd@mail.ru
[email] => asd@mail.ru
[4] => 3
[number_ustroen] => 3
[5] => 1
[number_sadik1] => 1
[6] => 7
[number_sadik2] => 7
[7] => 0
[number_sadik3] => 0
[8] => 1000
[groups] => 1000
[9] => 2011-10-21
[data] => 2011-10-21
)

[2] => Array
(
[0] => 11
[id] => 11
[1] => 1111
[name] => 1111
[2] => 455645
[tel] => 455645
[3] => asd@mail.ru
[email] => asd@mail.ru
[4] => 3
[number_ustroen] => 3
[5] => 1
[number_sadik1] => 1
[6] => 7
[number_sadik2] => 7
[7] => 0
[number_sadik3] => 0
[8] => 1000
[groups] => 1000
[9] => 2011-10-21
[data] => 2011-10-21
)

[3] => Array
(
[0] => 12
[id] => 12
[1] => 1212
[name] => 1212
[2] => 455645
[tel] => 455645
[3] => asd@mail.ru
[email] => asd@mail.ru
[4] => 3
[number_ustroen] => 3
[5] => 1
[number_sadik1] => 1
[6] => 7
[number_sadik2] => 7
[7] => 0
[number_sadik3] => 0
[8] => 1000
[groups] => 1000
[9] => 2011-10-21
[data] => 2011-10-21
)

[4] => Array
(
[0] => 13
[id] => 13
[1] => 1313
[name] => 1313
[2] => 123123
[tel] => 123123
[3] => as@mail.ru
[email] => as@mail.ru
[4] => 3
[number_ustroen] => 3
[5] => 1
[number_sadik1] => 1
[6] => 5
[number_sadik2] => 5
[7] => 7
[number_sadik3] => 7
[8] => 1000
[groups] => 1000
[9] => 2011-10-21
[data] => 2011-10-21
)

[5] => Array
(
[0] => 14
[id] => 14
[1] => 1414
[name] => 1414
[2] => 123123
[tel] => 123123
[3] => as@mail.ru
[email] => as@mail.ru
[4] => 3
[number_ustroen] => 3
[5] => 1
[number_sadik1] => 1
[6] => 5
[number_sadik2] => 5
[7] => 7
[number_sadik3] => 7
[8] => 1000
[groups] => 1000
[9] => 2011-10-21
[data] => 2011-10-21
)

[6] => Array
(
[0] => 15
[id] => 15
[1] => 1515
[name] => 1515
[2] => 123123
[tel] => 123123
[3] => as@mail.ru
[email] => as@mail.ru
[4] => 3
[number_ustroen] => 3
[5] => 1
[number_sadik1] => 1
[6] => 5
[number_sadik2] => 5
[7] => 7
[number_sadik3] => 7
[8] => 1000
[groups] => 1000
[9] => 2011-10-21
[data] => 2011-10-21
)

)

проход идет внутри цикла

for ($i=0;$i<100;$i++)
{
if ($_POST["psk$i"] == '1')

т.е. у меня приходит на форму нпример такие данные

psk1 = 1
psk2 = 1
psk5 = 1
psk7 = 1

я поверяю если psk$i = 1, если то начинаюстся проверки по которым решаю закинуть или нет.

Так что вроде бы следующие переменние в цикле должны быть 2 5 и 7, но в sql запросе я убавляю на 1 чтобы согласовать с массивом $RM строчки, откуда и заношу строки в БД.

Спустя 1 минута, 16 секунд (25.11.2011 - 15:36) otix()90 написал(а):
Цитата (maximka787 @ 25.11.2011 - 12:31)
otix()90
а разве можно писать в запрос '".$_SESSION['id_u']."'

ошибку-то не дает?


да нет вроде ))

Спустя 2 минуты, 26 секунд (25.11.2011 - 15:39) maximka787 написал(а):
otix()90
присвой значение ДО запроса

$id_u = $_SESSION['id_u'];

Спустя 8 минут, 28 секунд (25.11.2011 - 15:47) otix()90 написал(а):
Цитата (maximka787 @ 25.11.2011 - 12:39)
otix()90
присвой значение ДО запроса

$id_u = $_SESSION['id_u'];

вроде бы везде присваиваю до запроса, к тому же id_u нормально записывает и в певром шаге))

Спустя 44 секунды (25.11.2011 - 15:48) Placido написал(а):
У тебя на первом проходе цикла (for ($i=0;$i<100;$i++)) $i = 0, соответственно и $RM[$i-1]['id'] превращается в $RM[-1]['id'], значения для которого в массиве нет. Или я что-то неправильно понял?

Спустя 4 минуты, 52 секунды (25.11.2011 - 15:53) rooor написал(а):
А если так?
for ($i=1;$i<100;$i++)


Спустя 2 минуты, 37 секунд (25.11.2011 - 15:55) rooor написал(а):
Цитата
psk1 = 1
... я поверяю если psk$i = 1 ...

т.е. если $i = 0, ты проверяешь psk0...

Спустя 6 минут, 17 секунд (25.11.2011 - 16:02) otix()90 написал(а):
вроде бы нет, я поменял на for ($i=1;$i<100;$i++)) - суть та же.

У цикла цель посмотреть равна ли какая нибуть из переменных $_POST["psk$i"] == '1', а точнее найти те которые равны единице, если он находит, допустим psk1 = 1, то независимо откуда цикл начался с 0 или 1 - $i будет в данный момент равно 1, и таким образом через переменную $i и тем, что в скобках $RM[$i-1]['id'] (опытным путем согласовываю))))связываю psk1 с записью в массиве и закидываю в БД.

Далее следующее $i будет серавно будет равно тому значению которое в цикле поиска дало 1, т.е. если пришло на форму
psk1 = 1
psk3 = 1
то следующий $i = 3.

а вот если менять в скобках $RM[$i-1]['id'] к прмеру на $i-2 или просто $i то будет просто не та строка, которую хочу запичать в БД.

Спустя 21 минута, 21 секунда (25.11.2011 - 16:23) rooor написал(а):
Ну тогда только вариант с первым проходом, как уже раньше говорили:
$RM[$i-1] = -1

Спустя 5 минут, 32 секунды (25.11.2011 - 16:29) otix()90 написал(а):
да неееЕ) самое минимальное значение $i прнимает равное 1 т.о. min $RM[$i-1] = 0? а мне это и надо, т.к. массив принимает значения начиная с 0

Если же $RM[$i-1] = -1 , то $i д/б = 0, а в этом случае оно просто пропускается и идет дальше по циклу, т.к. минимальная перемнная с которой сравнивается $i psk1 дальше уже выше, т.е. psk3 = 1 psk4 = 1psk5 = 1
))))
грубо говоря чтобы $RM[$i-1] = было равно -1 надо чтобы был psk0 = 1 и цикл начиная с 0 нашел бы его , а так его нет))

Ну может и я уже пересидел))))

Спустя 18 часов, 59 минут, 13 секунд (26.11.2011 - 11:28) otix()90 написал(а):
ну как может еще какие догадки?)))

Спустя 7 часов, 46 минут, 54 секунды (26.11.2011 - 19:15) Placido написал(а):
Гадали уже. Кусок кода выложи - посмотрим что там и как.

Спустя 2 дня, 19 часов, 7 минут, 58 секунд (29.11.2011 - 14:23) otix()90 написал(а):
Вечер добрый, вот код.
	
elseif ($_POST[psk_add] == '1')
{
foreach ($_POST as $key=>$value)
echo "<p>".$key." = " . $value . "</p>";
echo '<p>';
foreach ($_SESSION as $key=>$value)
echo "<p>".$key." = " . $value . "</p>";
for ($i=1;$i<100;$i++)
{
if ($_POST["psk$i"] == '1')
{
$this_date=date('Y-m-d');
echo 'Добавление поиска '.$i.'<br>';

$sql = "INSERT INTO Poisk_var (id_us, Date) VALUES ('".$_SESSION['id_u']."', NOW())";
$sql2 = "SELECT * FROM `Poisk_var` WHERE id_us = '".$_SESSION['id_u']."'";
$sql3 = "UPDATE Poisk_var SET Date = '$this_date' WHERE id_us = '".$_SESSION['id_u']."' LIMIT 1";
$sql4 = "INSERT INTO `Variant` (`id_variant`, `id_polsov`, `id_polsov1`) VALUES ('".$id_v."','".$_SESSION['id_u']."', '".$RM[$i-1]['id']."')";
$sql5 = "SELECT * FROM Variant WHERE id_polsov = '".$_SESSION['id_u']."'";

$result2 = mysql_query($sql2);
$Resu_mas = mysql_num_rows($result2);
echo 'Записей в выборке';
echo $Resu_mas.'<br>';
if ($Resu_mas <> 0)
{
echo "Содержимое:<br>";
$rec = array();
while ($row = mysql_fetch_array($result2))
{
echo $row["id_pv"].'<br>';
echo $row["id_us"].'<br>';
echo $row["Date"].'<br><br><hr>';
if ($rec['Date'] < $row['Date'])
{
$rec = $row;
}
}

print_r ($rec);
echo '<br>';

if ($rec['Date'] == $this_date)
{
echo 'Дата (самая последняя) равна текущей<p>';
$id_v = $rec['id_pv'];
$RM = $_SESSION['RM'];
echo $i.'<br>';
echo $id_v.'<br>';
echo $RM[$i-1]['id'].'<br>';
$result4 = mysql_query($sql4);
}
else
{
echo 'Дата (самая последняя) не равна текущей<br>';
$RM = $_SESSION['RM'];
$result3 = mysql_query($sql);
//--------------------------------
$result2 = mysql_query($sql2);
while ($row = mysql_fetch_array($result2))
{
if ($new_rec['Date'] < $row['Date'])
{
$new_rec = $row;
}
}

print_r ($new_rec);
$id_v = $new_rec['id_pv'];

echo '<br>'.$id_v.'<br>';
echo $_SESSION['id_u'].'<br>';
echo $RM[$i-1]['id'].'<br>';
echo $i;
$result4 = mysql_query($sql4);
}
echo '<hr>';

}
}
}
}


Ну как - то так )

Спустя 39 минут, 21 секунда (29.11.2011 - 15:02) Placido написал(а):
А чего $_POST[psk_add] без кавычек? psk_add у вас ведь не константа?
$_POST[psk_add] ---> $_POST['psk_add']

Спустя 7 минут, 45 секунд (29.11.2011 - 15:10) otix()90 написал(а):
Цитата (Placido @ 29.11.2011 - 12:02)
А чего $_POST[psk_add] без кавычек? psk_add у вас ведь не константа?
<pre class="sh_sourceCode" rel="php"><span class="sh_variable">$_POST</span><span class="sh_symbol">[</span>psk_add<span class="sh_symbol">] ---></span> <span class="sh_variable">$_POST</span><span class="sh_symbol">[</span><span class="sh_string">'psk_add'</span><span class="sh_symbol">]</span></pre>

Возможно) видимо работало , ошибку не выдавало, не обратил внимания.

Спустя 38 минут, 53 секунды (29.11.2011 - 15:49) Placido написал(а):
Вот этот кусок:
$sql = "INSERT INTO Poisk_var (id_us, Date) VALUES ('".$_SESSION['id_u']."', NOW())";
$sql2 = "SELECT * FROM `Poisk_var` WHERE id_us = '".$_SESSION['id_u']."'";

И вот это:

$result2 = mysql_query($sql2);
$Resu_mas = mysql_num_rows($result2);
echo 'Записей в выборке';
echo $Resu_mas.'<br>';
if ($Resu_mas <> 0)


Вы, не сделав инсерта (mysql_query($sql)), пытаетесь выбрать WHERE id_us = '".$_SESSION['id_u']."', хотя $_SESSION['id_u'] еще не внесена в базу. Поэтому на первом круге условие if ($Resu_mas <> 0) никогда не будет выполняться (потому что $Resu_mas = mysql_num_rows($result2), а у вас там "0").
А вот после первого круга (дальше есть $result3 = mysql_query($sql)) это значение будет уже в базе и далее выбираться все будет нормально.

Спустя 12 минут, 56 секунд (29.11.2011 - 16:02) otix()90 написал(а):
Если правильно понял, вы имеете ввиду что $_SESSION['id_u'] пустая. У меня в сессии эта перменная приходит и , как мне кажется, она сравнивается нормально, т.к.

echo 'Записей в выборке';
echo $Resu_mas.'<br>';

выводит правильное количество записей.

Ну может я не включился еще - не понял вашу мысль))
А как можно исправить?

Спустя 3 дня, 20 часов, 41 минута, 39 секунд (3.12.2011 - 12:43) otix()90 написал(а):
В общем разобрался ))

Спустя 7 минут, 9 секунд (3.12.2011 - 12:50) otix()90 написал(а):
Оказалось, что запросы не надо было писать там где я их написал (т.е. перед кодом), т.к. код считывается линейно, то запрос на добавление прописанный в самом начале (еще до циклов проверок) принимает значения переменных на тот момент еще не существующих и соответственно равных 0, ну и после прохода далее по циклу они инициализируются и уже записываются нормально.

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

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