У меня есть форма в html:
<form>
<label><input type="hidden" name="pNameChange" value=""></label>
</form>
и я хочу получить значение этого ввода в php, не отправив его в форме.
это мой javascript:
var pName= null;
$(document).ready(function(){
$('img').click(function(){
pName= $(this).attr("name");
console.log(pName);
});
});
Мой php:
$pName = isset($_POST['pNameChange']) ? $_POST['value'] : '';
что я хочу. вы нажимаете на картинку,
1. Значение атрибута name изображения будет сохранено в переменной pName
(javascript),
2.it затем переходит в форму и изменяет значение формы на переменную pName
(javascript),
3.php берет значение формы (которое теперь должно быть равно pName
),
4. затем сохраняет его в переменную $pName
(php).
5. Я также хочу, чтобы $pName
(php) глобально использовался на всех страницах веб-сайта.
редактировать
это моя индексная страница:
<?php
$pName = isset($_POST['pNameChange']) ? $_POST['value'] : '';
$db_connection = mysqli_connect('localhost','root','',"project_online_planner");
if (!$db_connection){
die('Failed to connect to MySql:'.mysql_error());
}
$query="SELECT * FROM project limit 5 ";
$results = mysqli_query($db_connection,$query);
$intro=mysqli_fetch_assoc($results);
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Project planner online</title>
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
<script type="text/javascript" src="ppo.js"></script>
<link rel="stylesheet" href="ppo.css"/>
</head>
<body>
<div id="bgNav">
<div id="login">
<a href="register.php">Register</a>
<a href="login.php">Log in</a>
</div>
<nav id="nav">
<a href="index.php">Home</a>
</nav>
</div>
<h2 class="titlePage">Home</h2>
<div id="bgTile">
<?php
while($row = mysqli_fetch_array($results))
{
$project = $row["name"];
echo nl2br("<a href='project.php'>" ."<img name=\"$project\" width='100px' alt='Procject name' height='100px' class='tile' src=". $row['image'] ."/>". "</a>");
}
?>
<a href="allprojects.php"><div class="tile" id="tileM"><h2>Meer</h2></div></a>
</div>
<form>
<label><input type="hidden" name="pNameChange" value=""></label>
</form>
</body>
</html>
что я хочу: нажмите на изображение, после чего вы получите сообщение на страницу проекта, где (php) $pName
равно значению (javascript) pName
страница проекта:
<?php
$newRecord = null;
$pName = isset($_POST['pNameChange']) ? $_POST['value'] : '';
$db_connection = mysqli_connect('localhost','root','',"project_online_planner");
if (!$db_connection){
die('Failed to connect to MySql:'.mysql_error());
}
//insert into database
if(isset($_POST['insertComments'])){
include('connect-mysql.php');
$username = $_POST['username'];
$comment = $_POST['comment'];
$sqlinsert = "INSERT INTO user_comments (username, comment, project) VALUES ('$username', '$comment', '$pName')";
if (!mysqli_query($db_connection, $sqlinsert)){
die('error inserting new record');
}
else{
$newRecord = "1 record added";
}//end nested statement
}
//text from database
$query="SELECT * FROM user_comments where project = '$pName' ";
$results = mysqli_query($db_connection,$query);
$intro=mysqli_fetch_assoc($results);
$query2="SELECT * FROM project where name = '$pName' ";
$results2 = mysqli_query($db_connection,$query2);
$intro2=mysqli_fetch_assoc($results2);
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Project planner online</title>
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
<script type="text/javascript" src="ppo.js"></script>
<link rel="stylesheet" href="ppo.css"/>
</head>
<body>
<div id="intro">
</div>
<div id="bgNav">
<nav id="nav">
<a href="index.php">Home</a>
<a class="rightNav" href="register.php">Register</a>
<a class="rightNav" href="login.php">Log in</a>
</nav>
</div>
<div id="projectTile">
<span id="statusCheck"><?php print_r($intro2["status"]); ?></span>
<h2 id="prTitle"><?php print_r($intro2["name"]); ?></h2>
<div id="prPic"><img width="300" height="200" src="<?php print_r($intro2["image"]); ?>"></div>
<div id="prDescription"><?php print_r($intro2["description"]); ?></div>
</div>
<div id="comments">
<?php
while($row = mysqli_fetch_array($results))
{
echo nl2br("<div class='profile_comments'>" . $row['username'] . "</div>");
echo nl2br("<div class='comment_comments'>" . $row['comment'] . "</div>");
}
?>
</div>
<div id="uploadComments">
<form method="post" action="project.php">
<label for="name"><input type="hidden" name="insertComments" value="true"></label>
<fieldset>
<legend>comment</legend>
<label>Name:<input type="text" id="name" name="username" value=""></label><br/>
<label>Comments: <textarea name="comment" id="comment"></textarea></label>
<input type="submit" value="Submit" id="submitComment">
</fieldset>
</form>
</div>
<?php
echo $newRecord;
?>
<form>
<label><input type="hidden" name="pNameChange" value=""></label>
</form>
</body>
</html>
HTML:
у вас есть больше 1 изображения на странице? его лучше, если вы добавите ID в изображение. Нет необходимости в форме и скрытых полях для того, что вы хотите сделать.
убедитесь, что у вашего img есть ID, например <img id="imageID"...
JavaScript:
var pName= null;
$(document).ready(function(){
$('#imageID').click(function(){
pName= $(this).attr("name");
$.post("project.php", { pNameChange: pName },
function(data) {
// do something here.
});
});
});
выше код должен работать как ожидалось. Теперь в project.php> $ _POST ['pNameChange'] должно получиться значение pName (имя изображения attr).
Я не понимаю, чего вы хотите, когда вы сказали $ pName, доступный по всему миру на всех страницах. Пожалуйста, уточните далее, может быть, он хранит его как cookie/session?
РЕДАКТИРОВАТЬ:
Рассмотрите возможность использования сеанса для значения pName... путем простого запуска/возобновления сеанса в начале файла:
<?PHP
session_start();
а потом...
установить/обновить значение:
if(isset($_POST["pNameChange"]))
$_SESSION["pName"] = $_POST["pNameChange"];
а затем используйте $_SESSION["pName"]
вместо $pName
на всех страницах.
Попробуйте метод Ajax в jQuery, надейтесь, что он решает вашу проблему
https://api.jquery.com/jQuery.ajax/
или
На самом деле, для этого вам не нужен AJAX, все ваши index.php
name
изображения в project.php
поэтому попробуйте:
В index.php
:
<form name='form1' method="post" action='project.php'> <!-- form attributes given -->
<label><input type="hidden" name="pNameChange" value=""></label>
</form>
Javascript:
var pName= null;
$(document).ready(function(){
$('img').click(function(){
//onclick of image, we will save the image name into the hidden input
//and submit the form so that it goes to project.php
$('input[name="pNameChange"]').val($(this).attr("name"));
$('form1').submit()
});
});
И в вашем project.php
:
//now project.php can get the posted value of 'pNameChange'
//There is no input field with 'name'->'value', so $_POST['value'] is invalid.
$pName = isset($_POST['pNameChange']) ? $_POST['pNameChange'] : '';
И если вам нужно это значение на нескольких страницах, глобальное не будет работать, используйте сеансы.
ok, этот "дополнительный" ответ должен сосредоточиться только на сеансе. используйте коды для конца клиента из моего предыдущего ответа и попробуйте это на сервере.
index.php Страница:
<?php
session_start();
$pName = isset($_SESSION['pNameChange']) ? $_SESSION['pNameChange'] : '';
project.php Страница:
<?php
session_start();
$newRecord = null;
$pName = isset($_SESSION['pNameChange']) ? $_SESSION['pNameChange'] : null;
if(is_null($pName) && isset($_POST['pNameChange'])) {
$_SESSION['pNameChange'] = $_POST['pNameChange'];
$pName = $_POST['pNameChange'];
}
Надеюсь, поможет