Tengo la siguiente duda:
Digamos que tengo una página en php en esta dirección localhost/mipagina.php y otra que está en localhost/mipagina2.php y necesito poner un tag <a href="">
que me recargue la misma página poniendo una variable en la url.
Sin embargo ese tag <a>
está en una "plantilla" de header que es la misma para todas las páginas.
Es decir que si pongo <a href="localhost/mipagina2.php">
y estoy en la página 2 me la recarga pero si estoy en mipagina1.php no la recarga, si no que me lleva a la 2 y yo quiero que simplemente me recargue la misma pero con una variable en la url.
Edito para explicar mejor lo que quiero hacer, es algo como esto aunque evidentemente esto está mal pero soy muy novato en tema de jquery y esas cosas...
<a href="#" onclick="myFunction()">Añadir parametro par=2 en la url</p>
<script>
function myFunction() {
document.getElementById("demo").innerHTML = "<?php $_GET['par'] = '2';?>";
}
</script>
По крайней мере в Chrome, location
у него есть свойство search
что позволяет делать точно то, в чем ты нуждаешься:
<a href="#" onclick="location.search='?foo=bar'">Reload</a>
Таким образом ты перезагружаешь страницу добавляя переменную foo
со стоимостью bar
в унифицированный указатель ресурса. Я не знаю, если оно функционирует в других браузерах.
Здесь полный пример для браузеров, которые не выносят свойство search
и для случаев, где уже существовали предварительные параметры:
<html>
<head>
<meta charset="utf-8">
<script>
function refresh() {
var url = location.href.replace(/#$/, '');
if (/\?/.test(url)) {
var partes = url.split('?');
var params = partes[1].split('&');
var paramsfinal = [];
for (var i in params) {
if (!params[i].startsWith('foo=')) {
paramsfinal.push(params[i]);
}
}
paramsfinal.push('foo=bar');
location.href = partes[0] +'?' +paramsfinal.join('&');
} else {
location.href = url +'?foo=bar';
}
}
</script>
</head>
<body>
<p>foo es <?php echo isset($_GET['foo']) ? $_GET['foo'] : '(vacío)'; ?></p>
<a href="#" onclick="refresh()">Recargar</a>
</body>
</html>
Смоги использовать относительный, такой url, который я схватил:
<a href=".">Recargar</a>
И ты не нуждаешься ни в каком типе логики на сервере, чтобы это производить. Тем не менее, чтобы это делать посредством PHP, ты мог бы использовать следующий код:
$pagina_actual = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
У этого однако есть недостаток, которого клиент может изменять стоимость обоих переменных как заблагорассудится, вызывая оказанные не ожидаемые.
Существует возможность это делать посредством javascript:
<a href="javascript:window.location.href=window.location.href">Recargar</a>
Преимущество вышеупомянутой состоит в том, что в случае, если унифицированный указатель ресурса будет содержать параметры, он поддерживает их.
Чтобы производить ее с PHP, поддерживая параметры посланными из-за get, ты мог бы делать нечто похожее:
<?php
// Construir la base de nuestra url
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?" . http_build_query($_GET);
// Comprobar si el parámetro par viene en la url
if (!isset($_GET['par']) || trim($_GET['par']) == '') {
$url .= '&par=2';
}
?>
<a href="<?=$url?>">Recargar</a>
Этот код одинокий в эффекты образца, так как он может быть высоко оптимизированным в условиях результата и безопасности, но так ты сделаешь себе ясную идею, из как делания этого.
PodrГ-схвати использовать ее funciГіn basename () из PHP, чтобы получать имя файла и указывать на твою ссылку в этот файл согласно, где ты был в этом моменте, чем-то asГ-:
<?php
echo '<a href="'.basename(__FILE__).'">Recargar</a>';
?>
Или также ты мог бы использовать javascript, чтобы реализовывать он перезагружает ее.
Я думаю, что лучший выбор - с:
window.location.reload(true)
используя это, таким образом:
<a href="#" onclick="window.location.reload(true)">
Пример
document.getElementById("time").innerHTML = Date();
<html>
<body bgcolor="aqua">
<a title="Reload!" href="#" onclick="window.location.reload(true)">Reload !</a>
<p id="time"></p>
</body>
</html>
Другой выбор, о котором не упомянули, просто с $ _SERVER ['PHP_SELF']:
<a href="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">Recargar</a>
Info безопасности:
Введя любую переменную в HTML (как в этом случае унифицированного указателя ресурса), и что смог быть измененным пользователя, высоко рекомендуется, чтобы ты использовал функцию htmlspecialchars (), предотвращается например атака Cross-Site-Scripting (XSS).
Другого сходного выбора
location.reload();
Также он может быть:
location.reload(true);
Различие состоит, в том, что поместив ему true загружает тебе страницу снова с сервера, это главным образом полезное в IE, так как в каких-то версиях, заняв это, он не освежал страницу.
href
и это изменил в t и # 250; необходимость. Не поддерживает другие пара и # 225; метры, замени целую цепь. – Juan Manuel 19.10.2016, 19:13