Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Работа JS с БД (https://javascript.ru/forum/jquery/60394-rabota-js-s-bd.html)

zgmoru 26.12.2015 14:27

Работа JS с БД
 
Здравствуйте, я не давно начал заниматься программированием, а ещё меньше я занимаюсь JS, мне дали готовый Profile, где я должен сделать, чтобы при нажатии на кнопку сохранить, оно сохраняло без обновления страницы, что я сделал через iframe, но информацию оно не обновляет, меня попросили сделать это через JS, вопрос:
Как это можно сделать?.
Код вывода карьеры
if ($user["career"] != "")
{
echo'
<font size="+1"><br><b>Работа:</b></font>
<br><div class="content_right_about">Карьера: </div>'.$user["career"].'';
}

Ввод карьеры:
Карьера:
<i class="fa fa-plus"></i>
</a>
<div class="contentredaction">
Работа:<br>
<p><textarea rows="10" cols="45" name="career" class="career" type="text" maxlength="100"  value=""></textarea></p>';
?>
<script>
$('.career').val("<?php echo $user['career'];?>");
</script>
<?php
echo'
</div>
</div>

Так же после ввода данных, оно отправляется в другой файл, где обрабатывает эту всю информацию.
if ($_POST['career'] || $_POST['career'] == ""){
mysqli_query($CONNECT, "UPDATE `users`  SET `career` = '$_POST[career]' WHERE `id` = $_SESSION[USER_ID]");
$_SESSION['USER_CAREER'] = $_POST['career'];
}

То есть оно заносит в БД без обновления страницы, но обновляет текст только после перезагрузки страницы.

laimas 26.12.2015 14:42

if ($user["career"] != "") - if($user["career"]) или if(!empty($user["career"])).

if ($_POST['career'] || $_POST['career'] == "") - логику этого пояснить можете?

"UPDATE `users` SET `career` = '$_POST[career]' - так нельзя, это дыра в безопасности, данные необходимо обезопасить.

Цитата:

Сообщение от zgmoru
То есть оно заносит в БД без обновления страницы, но обновляет текст только после перезагрузки страницы.

Ну а чего вы хотите - отправлять данные без перезагрузки страницы и в тоже время обновить ее? Можно, но тогда какой смысл в асинхронном запросе?

zgmoru 26.12.2015 15:15

Цитата:

Сообщение от laimas (Сообщение 401460)
if ($user["career"] != "") - if($user["career"]) или if(!empty($user["career"])).

if ($_POST['career'] || $_POST['career'] == "") - логику этого пояснить можете?

"UPDATE `users` SET `career` = '$_POST[career]' - так нельзя, это дыра в безопасности, данные необходимо обезопасить.



Ну а чего вы хотите - отправлять данные без перезагрузки страницы и в тоже время обновить ее? Можно, но тогда какой смысл в асинхронном запросе?

>if ($_POST['career'] || $_POST['career'] == "") - логику этого пояснить можете?
Для того чтобы можно было стереть данные из базы данных.
>Ну а чего вы хотите - отправлять данные без перезагрузки страницы и в тоже время обновить ее? Можно, но тогда какой смысл в асинхронном запросе?
Да, то есть чтобы данные обновились после редактирования, но страница не перезагружалась. Опять же повторюсь, это не мой код, мне дали уже готовый код..
Я сейчас сижу и разбираюсь в нём, лажу по форумам и так далее.

laimas 26.12.2015 15:34

Цитата:

Сообщение от zgmoru
Для того чтобы можно было стереть данные из базы данных.

Это не объяснение, это несуразица.

if ($_POST['career'] || $_POST['career'] == "") - означает следующее

if (истинна ли переменная $_POST['career'], то есть не равна пустой строке, 0, false или null (кстати, прежде чем таковую проверку делать, нужно обрезать крайние пробелы) ИЛИ не истинна ли переменная $_POST['career'], то есть равно пустой строке) - и какой же смысл в этом условии, если оно будет возвращать истину в любом случае?

Цитата:

Сообщение от zgmoru
Да, то есть чтобы данные обновились после редактирования, но страница не перезагружалась. Опять же повторюсь, это не мой код, мне дали уже готовый код..

Чтобы обновились на странице часть ее данных, тогда еще да, это логично, но вопрос только в том какова эта часть и что за данные, вполне возможно, что лучше не тревожить Ajax.

Rise 26.12.2015 15:51

zgmoru,
<textarea rows="10" cols="45" name="career" class="career" type="text" maxlength="100"><?=$user['career']?></textarea>

zgmoru 26.12.2015 16:53

Цитата:

Сообщение от laimas (Сообщение 401474)
Это не объяснение, это несуразица.

if ($_POST['career'] || $_POST['career'] == "") - означает следующее

if (истинна ли переменная $_POST['career'], то есть не равна пустой строке, 0, false или null (кстати, прежде чем таковую проверку делать, нужно обрезать крайние пробелы) ИЛИ не истинна ли переменная $_POST['career'], то есть равно пустой строке) - и какой же смысл в этом условии, если оно будет возвращать истину в любом случае?



Чтобы обновились на странице часть ее данных, тогда еще да, это логично, но вопрос только в том какова эта часть и что за данные, вполне возможно, что лучше не тревожить Ajax.

>if ($_POST['career'] || $_POST['career'] == ""), был баг с тем, что при нажатии на кнопку "Сохранить", которая сохраняет все данные, которые ввел пользователь в базу данных, не сохраняет пустую строку,
$_POST['career'] == "" - помогло решить проблему.
>Чтобы обновились на странице часть ее данных, тогда еще да, это логично, но вопрос только в том какова эта часть и что за данные, вполне возможно, что лучше не тревожить Ajax.
Данные о пользователе пол, карьера и т.д..

laimas 26.12.2015 18:24

Цитата:

Сообщение от zgmoru
if ($_POST['career'] || $_POST['career'] == ""), был баг с тем, что при нажатии на кнопку "Сохранить", которая сохраняет все данные, которые ввел пользователь в базу данных, не сохраняет пустую строку,
$_POST['career'] == "" - помогло решить проблему.

Ну что за глупости. Вы поступаете равносильно тому, как если бы:

1) сервер принимает данные которые гарантировано имеют значение 0 или 1
2) сервер знает что может получить только 0 или 1
3) но тем не менее он проверяет if($_POST['a']==0 || $_POST['a']==1)

Ну ежику же понятно, что это бессмысленная проверка. Вот та же самая глупость и в вашем условии.

UPDATE table SET = $var - обновит поле значением $var, и если оно пустое, то пустым, если оно заполнено, то заполненным, и от логики РНР это не зависит! А ваше условие лишнее ибо оно будет выполняться в лубом случае, проверьте, и думайте:

$a = '';

echo $a || $a=='' ? 'Yes' : 'No';


выполнив сперва с $a равной пустой строке, а затем заполненной любым значением. Что получается? Вы не решили проблему с чем-то там в коде, вы не разобравшись подогнали под ответ.

Вот только данные пришедшие извне нельзя непосредственно подставлять в запрос, и коли учитесь, то обязательно знать этот минимум!

Цитата:

Сообщение от zgmoru
Данные о пользователе пол, карьера и т.д..

Тут нужно пояснение - если эти данные редактирует их владелец, то значит они есть поля формы, и серверу нужно лишь их записать, сообщив пользователю, что они успешно приняты и сохранены, либо сообщить ошибку в случае неудачи. У клиента же эти данные и так будут те, что он ввел.

А в вашем случае эти данные что, и почему их нужно обновлять?

zgmoru 26.12.2015 18:51

Цитата:

Сообщение от laimas (Сообщение 401507)
Ну что за глупости. Вы поступаете равносильно тому, как если бы:

1) сервер принимает данные которые гарантировано имеют значение 0 или 1
2) сервер знает что может получить только 0 или 1
3) но тем не менее он проверяет if($_POST['a']==0 || $_POST['a']==1)

Ну ежику же понятно, что это бессмысленная проверка. Вот та же самая глупость и в вашем условии.

UPDATE table SET = $var - обновит поле значением $var, и если оно пустое, то пустым, если оно заполнено, то заполненным, и от логики РНР это не зависит! А ваше условие лишнее ибо оно будет выполняться в лубом случае, проверьте, и думайте:

$a = '';

echo $a || $a=='' ? 'Yes' : 'No';


выполнив сперва с $a равной пустой строке, а затем заполненной любым значением. Что получается? Вы не решили проблему с чем-то там в коде, вы не разобравшись подогнали под ответ.

Вот только данные пришедшие извне нельзя непосредственно подставлять в запрос, и коли учитесь, то обязательно знать этот минимум!



Тут нужно пояснение - если эти данные редактирует их владелец, то значит они есть поля формы, и серверу нужно лишь их записать, сообщив пользователю, что они успешно приняты и сохранены, либо сообщить ошибку в случае неудачи. У клиента же эти данные и так будут те, что он ввел.

А в вашем случае эти данные что, и почему их нужно обновлять?

>1) сервер принимает данные которые гарантировано имеют значение 0 или 1
2) сервер знает что может получить только 0 или 1
3) но тем не менее он проверяет if($_POST['a']==0 || $_POST['a']==1)

Ну ежику же понятно, что это бессмысленная проверка. Вот та же самая глупость и в вашем условии.

UPDATE table SET = $var - обновит поле значением $var, и если оно пустое, то пустым, если оно заполнено, то заполненным, и от логики РНР это не зависит! А ваше условие лишнее ибо оно будет выполняться в лубом случае, проверьте, и думайте:

$a = '';

echo $a || $a=='' ? 'Yes' : 'No';


выполнив сперва с $a равной пустой строке, а затем заполненной любым значением. Что получается? Вы не решили проблему с чем-то там в коде, вы не разобравшись подогнали под ответ.

Вот только данные пришедшие извне нельзя непосредственно подставлять в запрос, и коли учитесь, то обязательно знать этот минимум!
Спасибо за информацию, я обязательно почитаю это, и попытаюсь разобраться в коде.
>
Тут нужно пояснение - если эти данные редактирует их владелец, то значит они есть поля формы, и серверу нужно лишь их записать, сообщив пользователю, что они успешно приняты и сохранены, либо сообщить ошибку в случае неудачи. У клиента же эти данные и так будут те, что он ввел.


Да, данные редактирует человек, после чего после нажатия на инпут, данные сохраняются в базу данных. То есть это возраст, имя, фамилия и так далее, в БД они заносятся под iframe, то есть страница не обновляется, после чего мне нужно чтобы эти данные выводились без перезагрузки страницы, данные могут быть разные, в основном это текст или числа, которые преобразуются в текст. Сейчас мне главное разобраться с выводом данных без перезагрузки.

laimas 26.12.2015 19:10

Не цитируйте все мною написанное, это и лишено смысла, и забивает пост мусором, цитируйте только то, на что оставляете свой комментарий.

Выбрасывайте iframe и, если, на сайте используется jQuery, то используйте Ajax, но если и не используется, то все равно Ajax, это не сложно.

Только я ничего не понял из ответа. Еще раз поясняю о чем я спрашиваю, например, это редактирование личных данных в кабинете, при этом они могут отдаваться двумя способами:

а) сначала это просто текст с кнопкой "Редактировать", которая возвращает форму, после отправки которой и в случае успешного изменения в базе, эти данные обновляются, то есть опять возвращается текст с кнопкой. Тут еще можно говорить об обновлении.

б) входя в кабинет я получаю свои личные данные в виде полей формы, и если что-то надо изменить, вношу изменения и жму кнопу "Обновить". В данном случае о каком обновлении может идти речь, если в случае их успешного обновления они и так будут в форме, то есть введенное мной?

А что там у вас и где, я так и не понял.

zgmoru 26.12.2015 19:26


Пример редактирования. После нажатия кнопки "Сохранить", все изменения отправляются в БД, к примеру мы нажимаем кнопку сохранить после того как что-то поменяли..

После этого все данные сохраняются через iframe, но не обновляются вот тут:

И только после перезагрузки страницы мы получаем эти данные.

Но я хочу сделать это через JS, без использования iframe, потому что это нагружает страницу. И я спрашиваю, как это сделать, я уже много где полазил, много где смотрел видео, но так и не понял, как это реализовать в моем случае.

laimas 26.12.2015 19:36

То есть у вас по варианту а) - данные вводятся в таблице текстом, щелчок по соответствующей строке таблицы выводит форму с текстовым полем (или показывает уже имеющееся, но скрытое по умолчанию) и это уже есть, и работает?

По коду приведенному ранее этого не видно, если нужен ответ по конкретному, то нужно привести исходный html-код. Хотя можно и абстрактный пример показать, если сможете его в свой код адаптировать.

zgmoru 26.12.2015 19:58

Возьмём на примере карьеры.
if ($user["career"] != "")
{
echo'
<font size="+1"><br><b>Работа:</b></font>
<br><div class="content_right_about">Карьера: </div>'.$user["career"].'';
}


echo'<form name="sender" action="/user_danni/edit" method="POST" target="hiddenframe" enctype="multipart/form-data">
<div class="set">
<a href="#sweeties">
Карьера:
<i class="fa fa-plus"></i>
</a>
<div class="contentredaction">
Работа:<br>
<p><textarea rows="10" cols="45" name="career" class="career"  
type="text" maxlength="100"  value=""></textarea></p>';
?>
<script>
$('.career').val("<?php echo $user['career'];?>");
</script>
<?php
echo'
<input type="submit" name="enter" value="Сохранить" class="saveredactionprofile" name=id1">
</form>
<iframe id="hiddenframe" name="hiddenframe" style="display: none"></iframe>

laimas 26.12.2015 20:41

Когда просите помощи в клиентском коде, показывайте результирующий html-код страницы, по которому вам нужен ответ, а не РНР код. И отвечайте на вопросы:

1) у вас список личных данных?
2) щелчок по выбранному в списке в iframe помещает одно поле формы?
3) форма отправляется, то есть каждое значение личных данных редактируется и обновляется отдельно?
4) после приема формы нужно обновить это значение и в списке?

И сразу, если все так, почему не одной формой все данные пользователя?

zgmoru 26.12.2015 21:56

1) Да.
2) Если я понял вопрос правильно, то всё записано одним iframe, т.е. все данные обновляет один iframe.
3) Да
4) Да
<div class="contentredaction" style="display: block;">
Работа:<br>
<p><textarea rows="10" cols="45" name="career" class="career" type="text" maxlength="100" value=""></textarea></p><script>
$('.career').val("Hello123");
</script>
</div>

Извиняюсь если что-то не то скидываю, или что-то не допонимаю.

laimas 27.12.2015 12:05

Даже и не знаю как вопросы задать. Было показано три изображения, на которых выбрано (отмечено) что-то из параметров, и к нему поле формы, а так как видно одно поле, то и возникает вопрос - у вас что чем-то (?) производится выбор параметра данных для редактирования, например, "Работа", после чего сервер отдает форму в Iframe, эти данные редактируются, и отправляются, а нужно изменить другой параметр, он выбирается и сервер в iframe помещает форму уже для этого параметра? То есть каждый параметр личных данных редактируется отдельно, и есть код который выбирает параметр в списке (отмечает его) и вызывает форму?

Решений то этому может быть туева туча, и вам либо предложат пример решающий задачу одним из способов, но совсем без учета и верстки вашей, и существующего кода. Будет сами разбираться что к чему и адаптировать его в свой код. Либо вы показываете html-структуру этого списка и код ею управляющий, который желательно оставить.

Я же не гадалка, угадать не могу как у вас работает, из представленного видно обновление одного параметра сервером, что в общем то не обязательно, можно отправить сразу все, все и обновлять.

Rise 27.12.2015 13:48

Цитата:

Сообщение от zgmoru (Сообщение 401540)
или что-то не допонимаю.

<textarea rows="10" cols="45" name="career" class="career" type="text" maxlength="100">Hello123</textarea>

$('.career').val("Hello123");

melst 28.12.2015 14:23

Здравствуйте.
Можно всунусь в обсуждение?
Недавно занимался подобным вопросом. Чтобы отправить без перезагрузки и получить обратно результат нужно воспользоваться AJAX
$.post и возврат в function (data) В $.post нужно указать путь к файлу обработчика. Это решение справляется с задачей и записи в БД и выводом без перезагрузки страницы.
Если не по теме, то прошу прощения.


Часовой пояс GMT +3, время: 08:23.