Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача переменной из массива PHP в функцию JS (https://javascript.ru/forum/misc/58857-peredacha-peremennojj-iz-massiva-php-v-funkciyu-js.html)

ugg555 14.10.2015 13:36

Передача переменной из массива PHP в функцию JS
 
Здравствуйте!

У меня такая простая функция для события onclick="testFun();" кнопки УДАЛИТЬ.
function qDelete() {

document.location.href = "delete.php?id=<?php echo $row['id']?>";
		                                        }

Переменная $row это массив полученный в PHP командой mysql_fetch_array из базы mySQL.

Не могу понять почему JS его не видит.
Допустим эту сроку JS видит(просто переменная $new):
document.location.href = "delete.php?id=<?php echo $new?>";


Как быть ?

laimas 14.10.2015 14:02

Если этот код обрабатывается как подключаемый к исполняемому файлу, то все будут Ок, но при условии, что переменные определены до подключения. Если этот код в не исполняемом файле, то будет как строка.

ugg555 14.10.2015 14:25

На этом примере id=16, проходя далее оно уже 29 а в функции принимает значение 8


laimas 14.10.2015 14:40

И что? Ваш вопрос звучит так - Не могу понять почему JS его не видит, а это значит нет. Но если есть значение, но не то, то чего вы ожидаете? Вы думаете из куска кода вырванного из контекста, в котором трудно понять чего вы делаете, и На этом примере id=16, проходя далее оно уже 29 а в функции принимает значение 8 тоже все объясняет?

Если ресурс sql вернул несколько строк и <?php echo $row['id']?> (можно короче - <?=$row['id']?>) это проходом в цикле, то не та цифра это и есть результат цикла. А если .... что там у вас "если", только вам да богу известно. Пояснять надо.

ugg555 14.10.2015 16:05

Цитата:

Сообщение от laimas (Сообщение 391941)
Пояснять надо.


Подключаюсь в базе, делаю запрос данных
Из запроса создаю Массив.
Затем while выбираю все записи
Наименование организации
ИНН
Кнопка Изменить и Удалить(кнопки bootstrap 3)
И так 10 раз
<?php

	include_once("db.php");

	$limit = 10;

	$result = mysql_query(" SELECT * FROM reestr
	                    ORDER BY id DESC
	                    LIMIT $limit
	");

	mysql_close();

	while($row = mysql_fetch_array($result))
	{?>
<!-- Здесь форматируется запись типа
Наименование организации
ИНН
Кнопка Изменить и Удалить
И так 10 раз -->
<p>Наименование организации: <strong><?php echo $row['orgname']?></strong></p>
<p>ИНН организации: <strong><?php echo $row['inn']?></strong></p>
<?php echo $row['id']?>
<!-- Модаль КНОПКА -->
<button class="btn btn-info " data-toggle="modal" data-target="#myModalEdit" >Изменить</button>

<!-- Модаль для кнопки РЕДАКТИРОВАТЬ ЗАПИСЬ -->
<div class="modal fade" id="myModalEdit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h4 class="modal-title" id="myModalLabel">Редактирование записи !</h4>
            </div>
            <div class="modal-body">Внести изменения ?
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Отмена</button>
                <button type="button" class="btn btn-primary" onclick="return qEdit();">Редактировать <?php echo $row['id']?></button>
            </div>
        </div>
    </div>
</div>
<!-- Модаль для кнопки РЕДАКТИРОВАТЬ ЗАПИСЬ -->

<!--По клику кнопки (строка 39 данного кода) Изменить появляется модальное окно в котором кнопка Pедактировать выполняет скрипт onclick="return qEdit();" -->
<script>
function qEdit() 
{
//var xxx = "<?php echo $row['id']?>";
//alert(xxx);
document.location.href = "edit.php?id=<?php echo $row['id']?>";
}
</script>

<!--В конце закрываю while -->

<?php } ?>


Прослеживаю переменную см. строки кода выше:
23 строка - результат который нужен мне допустим 16 (у каждой кнопки разный)
39 строка - равен 29 (как выяснил это id последняя запись, так как запрос в запросе к базе есть сортировка от большего к меньшему). Данный результат у всех 10 кнопка
Ну и строки 50,51 если раскоментовать, то рез будет 8

Если строку <?php } ?>
поставить перед тегами скрипта то id будет пуст

laimas 14.10.2015 16:36

Во-первых так делать нельзя, в вы в цикле порождаете 10 функций qEdit(). Во-вторых какого возврата вы ожидаете здесь onclick="return qEdit();", если результат функции переход на новую страницу? Да и кнопке этот возврат пустой звук.

Функцию qEdit() вообще нужно удалить из этого кода, поместив в подключаемый или прописанный вне цикла скрипт. Функция должна принимать аргументом значение $row['id'], которое можно присвоить источникам вызова функции, например, <button id=<?=$row['id']?> type="button" class="btn btn-primary" onclick="qEdit(this.id)">

ugg555 14.10.2015 17:25

Спасибо понял!
Сделал так.
Убрал функцию с цикла
Прописал ваши значения для кнопки
Сама функция такая
<script >
function qEdit(id) 
{
var text1 = id;
var text2 = 'edit.php?id=';
var text0 = text2 + text1; 
//alert(text2 + text1);
document.location.href = text0;
}
</script>


Смешная может быть но JS знаю только неделю)))

Про php сокращение знаю. Пишу пока полное, опыт еще не пришел...

Если есть желание поясните по функции... может короче можно.

И вообще если допустим в теге я напишу onclick="qEdit(this.class)" то она передаст название класса?
А внутри функции его нужно присваивать переменной ?

laimas 14.10.2015 17:41

function qEdit(id) {
    window.location.href = 'edit.php?id='+id;
}


Цитата:

Сообщение от ugg555
И вообще если допустим в теге я напишу onclick="qEdit(this.class)" то она передаст название класса?

Естественно, все что будет передано в функцию будет в ней получено. Зачем только передавать на сервер имя класса. Но если речь о некой другой функции, то "А внутри функции его нужно присваивать переменной ?" - да. И учтите, id=123, это неверно, должно начинаться с буквы. Для валидности можно хранить в data-id="123", а можно и id валидно задать:

<button id="id-<?=$row['id']?>" type="button" class="btn btn-primary" onclick="qEdit(this.id)">


а в функции qEdit(id):

window.location.href = "edit.php?"+id.replace("-","=");


<?=$var?> - это тоже самое, что и <?php echo $var?>, и в старых версиях работает только если разрешен короткий php_тег (<? без php), в новых версиях это работает не зависимо от такого разрешения.


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