MySQL запросы
#1
Отправлено 18 октября 2008 - 22:06
Проблему, которую я встретил:
Через форму я получаю на сайте переменные $msg1, $msg2, $msg3, $msg4, которые имеют значения Ф1, Ф2, Ф3, Ф4 (например)
Можно ли занести их в БД в один столбец одновременно через запятую?
insert into users (username,password,email,biography) values ('$username','$password','$email','$msg1, $msg2, $msg3, $msg4')"
заранее спасибо.
Прошу лишь помощи, лишняя критика и оскорбления, я думаю излишни. Не для этого и создаю тут темы.
#4
Отправлено 19 октября 2008 - 10:21
<?php
$array = array($msg1,$msg2,$msg3,$msg4);
$data = implode(',', $array);
$array2 = array($psg1,$psg2,$psg3,$psg4);
$data2 = implode(',', $array2);
$array3 = array($csg1,$csg2,$csg3,$csg4);
$data3 = implode(',', $array3);
$sql = insert into users (username,password,biography, status,job) values ('$username','$password','$data','$data2','$data3')";
//Правильно ли?
?>
#6
Отправлено 03 ноября 2008 - 19:00
<?php
$array = array($msg1,$msg2,$msg3,$msg4);
$data = implode(',', $array);
?>
Эти строки работаю в том случае, если мы 100% получаем все 4 переменные из формы.
А если пользователь выбрал только 1-3 переменные, он сразу выдает ошибку, что не удалось записать 4 переменные в одну.
так как отсутствует какая-то переменная.
Такой вариант как:
<?php
if (!isset($_POST['msg1'])) {$msg1= "";}
$array = array($msg1,$msg2,$msg3,$msg4);
$data = implode(',', $array);
?>
Искусственно создать переменную, тоже не вариант.
Просто при запросе будет следующее
,,а,а,а
Двойная запятая.
Можно ли сделать так, если одна переменная не существует, то не записывать её.
Такой вариант как:
<?php
if (!isset($_POST['msg1']))
{
$array = array($msg2,$msg3,$msg4);
$data = implode(',', $array);
}
?>
Не катит, так как переменных куча, и для каждой такое прописывать
Люди доббрые выручайте....
#7
Отправлено 03 ноября 2008 - 19:38
$msg1 = '';
$msg2 = 'a';
$msg3 = 'a';
$msg4 = 'a';
function filter($var)
{
return(!empty($var));
}
$array = array($msg1,$msg2,$msg3,$msg4);
$array = array_filter($array, 'filter');
$data = implode(',', $array);
print $data;
?>
Вроде работает
Сообщение изменено: Otacon (03 ноября 2008 - 19:39 )
#10
Отправлено 03 ноября 2008 - 22:33
Верю в смерть после жизни, любовь после секса и в крем после бритья ...
#12
Отправлено 04 ноября 2008 - 18:15
Incubo, нет, ты не прав, я просто привел примеры, которые мне не подходят, чисто практически.
Если я задаю вопрос, я всегда ищу на него ответы, потом просто пишу какое решение все-таки нашел.
П.С. Я просто учусь работать с PHP и MySql. Благодарен за помощь.
Сообщение изменено: AgentVlad (04 ноября 2008 - 18:16 )
#15
Отправлено 07 ноября 2008 - 12:47
Только не смейтесь!
Вот проделали мы эту всю процедуру.
добавили в таблицу эту переменную.
НО:
Когда мы достаем из таблицы её, получаем как одну большую переменную. Можно её разбить вновь на отдельные переменные?
#16
Отправлено 07 ноября 2008 - 13:31
// Тут твой код запроса из СЫЛ
$data = "msg1,msg2,msg3,msg4"; // Вот допустим нам вернулась такая строка
$data = explode(',', $data); // Вот разбиваем
print_r($data); // Лицезреем
Всё, можно работать как с обычным массивом
Сообщение изменено: Otacon (07 ноября 2008 - 13:32 )
#17
Отправлено 07 ноября 2008 - 15:41
Внесли мы след:
function filter($var)
{
return(!empty($var));
}
$array = array($msg1,$msg2,$msg3,$msg4); // $msg3 не был добавлен так как переменная отсутствовала.
$array = array_filter($array, 'filter');
$data1 = implode(',', $array);
Получилось, что в таблицу с именем table, в столбец data ,была добавлена переменная data1 со значениями msg1,msg2,msg4
Вот смотри.
$result = mysql_query("SELECT * FROM table");
$myrow = mysql_fetch_array($result);
$myrow['data1'] = explode(',', $myrow['data1']); // Вот разбиваем
print_r($myrow['data1']);
// твой вариант, при котором он выводит msg1,msg2,msg4
Если я не ошибаюсь - это равносильно если я напишу <?php echo $myrow['data1']; ?>, да?
А мне надо, чтоб он снова разбил переменную $data1 на $msg1,$msg2,$msg4, a $msg3 вроде как не существует, поэтому её мы опускаем.
Чтоб я мог применить эти переменные в разных местах:
<b>Цена:</b> <?php echo $myrow['msg1']; ?><br>
<b>Место:</b> <?php echo $myrow['msg2']; ?><br>
<b>Срок:</b> <?php echo $myrow['msg4']; ?><br>
Если я коряво объяснил, поправте пожалуйста. Очень признателен за помощь.
#19
Отправлено 07 ноября 2008 - 16:38
$result = mysql_query("SELECT * FROM table");
$myrow = mysql_fetch_array($result);
$myrow['data1'] = explode(',', $myrow['data1']); // Вот разбиваем
echo $myrow['data1']['msg1'];
Сообщение изменено: AgentVlad (07 ноября 2008 - 16:39 )
#21
Отправлено 07 ноября 2008 - 17:32
$data1 = (кадр1,кадр2,кадр4); // кадр3 отсутсвует, так как не был добавлен, так как пользователь не добавил этот раздел.
ты правильно написал:
$myrow['data1'][0];
$myrow['data1'][1];
$myrow['data1'][2]; и т.д.
НО:
надо сделать так, чтобы
$myrow['data1'][0]; соответствовал $msg1
$myrow['data1'][1]; соответствовал $msg2
$myrow['data1'][2]; соответствовал $msg3
$myrow['data1'][3]; соответствовал $msg4
Можно ли сделать так?
if( $myrow['data1'][0] != "кадр1") {unset($myrow['data1'][0]);}
if( $myrow['data1'][1] != "кадр2") {unset($myrow['data1'][1]);}
if( $myrow['data1'][2] != "кадр3") {unset($myrow['data1'][2]);}
if( $myrow['data1'][3] != "кадр4") {unset($myrow['data1'][3]);}
echo $myrow['data1'][0];
echo $myrow['data1'][1];
echo $myrow['data1'][2];
echo $myrow['data1'][3];
//вот только если какая-то переменная будет отсутствовать, то он выдаст ошибку, что такой переменной нет, можно использовать фильтр, то как?И вообще можно ли так сделать?
#22
Отправлено 07 ноября 2008 - 18:08
$data = explode(',', $data);
foreach($data as $key=>$value) {
$key++;
eval("\$msg$key = \"$value\";");
}
echo $msg1; // просто перевел их обратно в переменные Теперь можно просто вызывать $msg1, $msg2, $msg3, $msg4;
if( !empty($msg1) ) { echo $msg1; }
#25
Отправлено 09 ноября 2008 - 17:46
Что вы тут за велосипед изобрели? Какой нафиг eval$data = 'msg1,msg2,msg3,msg4';
$data = explode(',', $data);
foreach($data as $key=>$value) {
$key++;
eval("\$msg$key = \"$value\";");
}
echo $msg1; // просто перевел их обратно в переменные Теперь можно просто вызывать $msg1, $msg2, $msg3, $msg4;
if( !empty($msg1) ) { echo $msg1; }
//$data = 'msg1,msg2,msg3,msg4'; //$data = explode(',', $data); // Заменяется на $data = array( 'msg1', 'msg2', 'msg3', 'msg4' ); foreach($data as $key=>$value) { //$key++; //eval("\$msg$key = \"$value\";"); // Заменяется на ${$msg . ++$key} = $value; }
Но суть этого кода я вообще не понял.
#26
Отправлено 09 ноября 2008 - 19:02
1) автору дана строка в виде 'msg1,msg2,msg3,msg4', которую он вернул из сыля =) Так что, понять, как ты смог разделить строку на msg1, msg2, msg3, msg4 без explode я решительно не могу.
2) фигурные скобки в переменных - зло, поэтому evalъ решает Хотя этот пункт опция. Просто в падлу писать эти длинные запросы, типо $data['data1'][$n], когда можно превратить в простой $msg$n
Сообщение изменено: Otacon (09 ноября 2008 - 19:04 )
#27
Отправлено 09 ноября 2008 - 20:04
А, ну тогда сори... просто я почитал первые 5 постов, нифига не понял, какие-то непонятные переменные $msg1, $msg2... видимо, автор сам не понял, что накуралесилSetor,
1) автору дана строка в виде 'msg1,msg2,msg3,msg4', которую он вернул из сыля =) Так что, понять, как ты смог разделить строку на msg1, msg2, msg3, msg4 без explode я решительно не могу.
2) фигурные скобки в переменных - зло, поэтому evalъ решает Хотя этот пункт опция. Просто в падлу писать эти длинные запросы, типо $data['data1'][$n], когда можно превратить в простой $msg$n
А насчёт eval - мой вариант лучше тем, что в нём нет eval. Технически более правильное решение, нет вызова функции. Без eval не обойтись, если генерируется путь к массиву типа $array['a']['b'][1]['c'], когда сам массив ещё не создан (в шаблонизаторе).
Вообще, любое решение является правильным, если оно работает. Всё зависит от поставленной задачи.
#28
Отправлено 09 ноября 2008 - 20:29
Ничего, бывает )А, ну тогда сори... просто я почитал первые 5 постов, нифига не понял, какие-то непонятные переменные $msg1, $msg2... видимо, автор сам не понял, что накуралесил
Вполне возможно Везде по-разному советуют, вот и думай потом, где правильноА насчёт eval - мой вариант лучше тем, что в нём нет eval. Технически более правильное решение, нет вызова функции. Без eval не обойтись, если генерируется путь к массиву типа $array['a']['b'][1]['c'], когда сам массив ещё не создан (в шаблонизаторе).
+1Вообще, любое решение является правильным, если оно работает. Всё зависит от поставленной задачи.
#29
Отправлено 11 ноября 2008 - 18:07
Если оно работая делает то что должно, и НЕ делает того что не должно. (т.е если по совместительству решение кроме основной функции предоставляет услуги бэкдора, то это неправильное решение)Вообще, любое решение является правильным, если оно работает
Вы либо способны перелопатить тонны информации и отсеять лишнее, либо программистом не будете. ©Psih
Не вазелин, а бизнес-гель ©Avagraen
#30
Отправлено 11 ноября 2008 - 20:30
А без этого никак... Опыт приходит со временем, все мы когда-то прошли через подобные велосипеды. Главное - чтобы человек понимал, что практически любое его решение задачи не является идеальным и нужно стремиться к совершенству: читать умные статьи, изучать документацию на фреймворки, пытаться их использовать в своих проектах (хороший фреймворк показывает как пишутся современные веб-приложения, даёт нужное направление). Но прежде всего конечно нужно выучить весь мануал по PHP, пробежаться по списку стандартных функций.Если оно работая делает то что должно, и НЕ делает того что не должно. (т.е если по совместительству решение кроме основной функции предоставляет услуги бэкдора, то это неправильное решение)
Если же в самом начале взять для себя сложную задачу - написание элементарной гостевухи/блога или CMS'ки, просто забьёшь себе голову, напишешь неправильно, сделаешь кучу багов, будешь кружить по форумам и просить помощи. Кто-то скажет, что это путь большинства начинающих веб-программистов, да - это так и путь этот неверный
P.S. адресовано начинающим программистам.