- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个项目来使用评级系统评估不同的产品,但由于我是新手,所以我有几个问题。
首先,为了实现这个目标,我创建了一个 ListView ,它允许我使用从该数据库获取的 JSON 代码显示 MySQL 数据库中记录中的信息。
现在的项目是这样的http://jsfiddle.net/c52m6smg/1/ .我的问题如下,我可以通过 AJAX 调用替换 var 信息以从外部文件或本地主机上存储的 php 文件检索 JSON 数据吗?
另一方面,在这个基础上,我可以访问每条记录的信息,但我可以在显示中放置一个评级系统来精确影响显示的寄存器?或者我应该做不同的事情?我一直在搜索,我看到一个可能的选项是创建一个 PHP 文件来检索提供选项的特定记录,例如 localhost/rating/individualjson.php&search=?
。
对不起,如果有什么愚蠢的问题,但我正在努力学习。我不要求完成项目的代码,只要求提供我提出的问题的信息和答案、可能有帮助的类似案例的建议或示例。
最后,我有以下代码可以从数据库中获取所有数据:
这里是 PHP 文件:
<?php
// Error function that stops script processing with die
function error($message){
$output = json_encode(
array(
'result' => 'error',
'msg' => $message
)
);
die($output);
}
// Round to the nearest 0.5
function roundToNearestHalf($number){
return round($number * 2) / 2;
}
// Instantiate database connection
$db = new mysqli('localhost', 'root', 'XXX', 'XXX');
// Check that the connection worked
if($db->connect_errno > 0){
error('Unable to connect to database [' . $db->connect_error . ']');
}
// Verify that we have enough post items
if(count($_POST) > 1){
error('Too many post items received.');
}
// Check that the rating was entered
if(!isset($_POST['rating']) || $_POST['rating'] == ''){
error('No rating value provided.');
}
// Valid the rating amount that was entered.
if(!preg_match("/[0-5](?:\.5)/", $_POST['rating']) && $_POST['rating'] < 0 && $_POST['rating'] > 5){
error('Invalid rating provided.');
}
// Check if the user has rated before
$sql = <<<SQL
SELECT `ratingid`
FROM `ratings`
WHERE `ip` = '{$_SERVER['REMOTE_ADDR']}'
SQL;
if(!$result = $db->query($sql)){
error('There was an error running the query [' . $db->error . ']');
}
// Tell the user that they have voted already.
if($result->num_rows){
error('That IP address has already voted, please try using another IP.');
}
// Store the user's rating.
$rating = $db->escape_string($_POST['rating']);
$sql = <<<SQL
INSERT INTO `ratings`
(`rating`, `ip`)
VALUES ('{$rating}', '{$_SERVER['REMOTE_ADDR']}')
SQL;
if(!$db->query($sql)){
error('Unable to insert rating to database [' . $db->error . ']');
}
// Get the average rating
$sql = <<<SQL
SELECT AVG(`rating`) AS `rating`
FROM `ratings`
SQL;
if(!$result = $db->query($sql)){
error('There was an error running the query [' . $db->error . ']');
}
// Fetch the average rating
$data = $result->fetch_assoc();
$rating = $data['rating'];
// Output the average rating for the front end to handle
$output = json_encode(
array(
'result' => 'success',
'rating' => roundToNearestHalf($rating)
)
);
echo $output;
?>
来自 MySQL 的表:
CREATE TABLE `rating` (
`ratingid` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`rating` FLOAT UNSIGNED NOT NULL,
`time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ip` VARCHAR( 39 ) NOT NULL,
UNIQUE (`ip`)
) ENGINE = INNODB
这里是 js 字段:
var info = [{
"id": "1",
"ISBN": "978487485",
"titol": "20.000 Leguas de viaje Submarino",
"autor": "---",
"any": "1978",
"descripcio": "asdsadasdafsa",
"format": "Book",
"stars": "5"
},
{
"id": "2",
"ISBN": "978848481",
"titol": "Intocable",
"autor": "Philipp",
"any": "1999",
"descripcio": "asdadaf",
"format": "Book",
"stars": "2"
},
{
"id": "3",
"ISBN": "884697989",
"titol": "Baba Ramdev",
"autor": "Patanjali",
"any": "2000",
"descripcio": "Herbal Hand Wash Refill",
"format": "Book",
"stars": "3"
}];
//pageinit event for first page
//triggers only once
//write all your on-load functions and event handlers pertaining to page1
$(document).on("pageinit", "#info-page", function () {
//set up string for adding <li/>
var li = "";
//container for $li to be added
$.each(info, function (i, titol) {
//add the <li> to "li" variable
//note the use of += in the variable
//meaning I'm adding to the existing data. not replacing it.
//store index value in array as id of the <a> tag
li += '<li><a href="#" id="' + i + '" class="info-go">' + titol.titol + '</a></li>';
});
//append list to ul
$("#prof-list").append(li).promise().done(function () {
//wait for append to finish - thats why you use a promise()
//done() will run after append is done
//add the click event for the redirection to happen to #details-page
$(this).on("click", ".info-go", function (e) {
e.preventDefault();
//store the information in the next page's data
$("#details-page").data("info", info[this.id]);
//change the page # to second page.
//Now the URL in the address bar will read index.html#details-page
//where #details-page is the "id" of the second page
//we're gonna redirect to that now using changePage() method
$.mobile.changePage("#details-page");
});
//refresh list to enhance its styling.
$(this).listview("refresh");
});
});
//use pagebeforeshow
//DONT USE PAGEINIT!
//the reason is you want this to happen every single time
//pageinit will happen only once
$(document).on("pagebeforeshow", "#details-page", function () {
//get from data - you put this here when the "a" wa clicked in the previous page
var info = $(this).data("info");
//string to put HTML in
var info_view = "";
//use for..in to iterate through object
for (var key in info) {
//Im using grid layout here.
//use any kind of layout you want.
//key is the key of the property in the object
//if obj = {titol: 'k'}
//key = titol, value = k
info_view += '<div class="ui-grid-a"><div class="ui-block-a"><div class="ui-bar field" style="font-weight : bold; text-align: left;">' + key + '</div></div><div class="ui-block-b"><div class="ui-bar value" style="width : 75%">' + info[key] + '</div></div></div>';
}
info_view += '<span data-id="'+info['id']+'" class="stars s-'+info['stars']+'" data-default="'+info['stars']+'">0 stars</span>';
//add this to html
$(this).find("[data-role=content]").html(info_view);
});
$(function(){
$('body').on({
mousemove: function(e){
var $this = $(this);
// Calculate number of stars
var currentMousePosition = e.pageX - $this.offset().left;
var width = $this.width();
var rounded = Math.round((currentMousePosition/width)*10);
var starNumber = rounded/2;
// Remove + add Classes + Store current rating
$this.removeClass().addClass('stars s-' + starNumber).attr('data-rating', starNumber);
},
mouseleave:function(){
var $this = $(this);
$this.removeClass().addClass('stars s-' + $this.attr('data-default'));
},
click: function(){
var $this = $(this);
//Hide the current rating selector
$this.replaceWith($('<div>', {
'class': 'loading'
}));
// Send the request
$.post('rating.php',{
rating: $this.attr('data-rating')
}, function(d){
// Handle response
if(d.result == 'error'){
alert(d.msg);
} else {
$this.removeClass().addClass('stars s-' + d.rating).attr('data-default', d.rating)
$('.loading').replaceWith($this);
}
}, 'json');
}
}, '.stars');
});
谢谢!!
最佳答案
好的,我已经对你的 fiddle 做了一些修改,你可以找到我的版本here
请注意我已经删除了
<span class="stars s-2.5" data-default='2.5'>
0 stars
</span>
来自您的 html
的部分并将其添加到 javascript
在$(document).on("pagebeforeshow", "#details-page", function () {
下功能
因为在您的原始代码中,所有产品只有一组星标,但通过此更改,每个产品都有一组星标。
然后我添加了"stars":
info
的键数据集,以便每条记录都有自己的速率值,然后添加一个 data-id
属性为 <span>
对于星星并将值添加到 data-default
属性。
有了它,您可以使用它的 data-id
访问每个产品的费率和 data-rating
属性。
希望这可以解决您的问题,请将结果更新给我们。
关于php - JSON 单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29520707/
我在 JavaScript 文件中运行 PHP,例如...... var = '';). 我需要使用 JavaScript 来扫描字符串中的 PHP 定界符(打开和关闭 PHP 的 )。 我已经知道使
我希望能够做这样的事情: php --determine-oldest-supported-php-version test.php 并得到这个输出: 7.2 也就是说,php 二进制检查 test.
我正在开发一个目前不使用任何框架的大型 php 站点。我的大问题是,随着时间的推移慢慢尝试将框架融入应用程序是否可取,例如在创建的新部件和更新的旧部件中? 比如所有的页面都是直接通过url服务的,有几
下面是我的源代码,我想在同一页面顶部的另一个 php 脚本中使用位于底部 php 脚本的变量 $r1。我需要一个简单的解决方案来解决这个问题。我想在代码中存在的更新查询中使用该变量。 $name)
我正在制作一个网站,根据不同的情况进行大量 PHP 重定向。就像这样...... header("Location: somesite.com/redirectedpage.php"); 为了安全起见
我有一个旧网站,我的 php 标签从 因为短标签已经显示出安全问题,并且在未来的版本中将不被支持。 关于php - 如何避免在 php 文件中写入
我有一个用 PHP 编写的配置文件,如下所示, 所以我想用PHP开发一个接口(interface),它可以编辑文件值,如$WEBPATH , $ACCOUNTPATH和 const值(value)观
我试图制作一个登录页面来学习基本的PHP,首先我希望我的独立PHP文件存储HTML文件的输入(带有表单),但是当我按下按钮时(触发POST到PHP脚本) )我一直收到令人不愉快的错误。 我已经搜索了S
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: What is the max key size for an array in PHP? 正如标题所说,我想知道
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我在 MySQL 数据库中有一个表,其中存储餐厅在每个工作日和时段提供的菜单。 表结构如下: i_type i_name i_cost i_day i_start i_
我有两页。 test1.php 和 test2.php。 我想做的就是在 test1.php 上点击提交,并将 test2.php 显示在 div 中。这实际上工作正常,但我需要向 test2.php
我得到了这个代码。我想通过textarea更新mysql。我在textarea中回显我的MySQL,但我不知道如何更新它,我应该把所有东西都放进去吗,因为_GET模式没有给我任何东西,我也尝试_GET
首先,我是 php 的新手,所以我仍在努力学习。我在 Wordpress 上创建了一个表单,我想将值插入一个表(data_test 表,我已经管理了),然后从 data_test 表中获取所有列(id
我有以下函数可以清理用户或网址的输入: function SanitizeString($var) { $var=stripslashes($var); $va
我有一个 html 页面,它使用 php 文件查询数据库,然后让用户登录,否则拒绝访问。我遇到的问题是它只是重定向到 php 文件的 url,并且从不对发生的事情提供反馈。这是我第一次使用 html、
我有一个页面充满了指向 pdf 的链接,我想跟踪哪些链接被单击。我以为我可以做如下的事情,但遇到了问题: query($sql); if($result){
我正在使用 从外部文本文件加载 HTML/PHP 代码 $f = fopen($filename, "r"); while ($line = fgets($f, 4096)) { print $l
我是一名优秀的程序员,十分优秀!