是否有编写下面代码的简写方法?
if (($tstat=='no_prices')&&($l1stat=='no_prices')&&($l2stat=='no_prices')&&($l3stat=='no_prices'))
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用下面的代码,但是当其中一个变量不等于'no_prices'时它就做了一些事情.
if (($tstat && $l1stat && $l2stat && $l3stat)=='no_prices')
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
为了检查字符串是否没有引起问题,我尝试将0替换为"no_prices",将1替换为其他值,但结果是相同的.
直到最近我才意识到这一点,但在编写javascript代码时我使用了Allman风格.
根据http://encosia.com/in-javascript-curly-brace-placement-matters-an-example/,我应该使用K&R风格.这是因为在某些情况下,将花括号放在下一行会导致问题.对我来说,问题是我变得非常喜欢奥尔曼风格而宁愿不改变.
所以,我的问题
是不是因为在javascript中放置大括号,allman样式会导致错误?jquery怎么样?
是否有任何技巧可以让我使用Allman风格而不会因花括号而出现问题?
使用这些样式是否还有其他问题?
我使用以下jquery将metatag插入到html文档中.
<script type="text/javascript">
if(screen.width>=320 && screen.width<=767){
$('head').append('<meta id="viewport" name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">');}
</script>
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想在不使用jquery的情况下插入元标记.任何人有任何想法我怎么能这样做?
我相信我可能需要使用document.getElementByTagName,但我不知道如何.
为了防止你想知道,我将metatag插入到我的html中,以便用iphone来观看网站.不幸的是,width = device-width不是一个选项,因为它与我的ipad版本不兼容.
质询
细节
我正在使用
该脚本使用异步ajax请求多次获取和设置joomla变量.我在会话中存储的数据是一个数组.间歇性地,一些阵列数据丢失了.一旦用户登录并使用脚本,它似乎会更加一致.
说实话,我不确定问题是什么,但我开始认为我的代码正在遭遇竞争条件.我认为Joomla可能会在完成编写之前尝试读取会话信息,或者只是没有设置.缺失的信息似乎是随机选择的,并且间歇性地发生数据丢失.
SCRIPT1
脚本1使用异步ajax请求来获取/设置Joomla会话变量.这将被多次调用.由于设计原因,在ajax响应成功之前,不能再次调用脚本1.
$.ajax(
{ cache:false,
url: 'script2.php',
data: { 'change': change},
dataType: 'json',
success: function(data)
{
//do something
}
});
Run Code Online (Sandbox Code Playgroud)
这是我在脚本2中用来访问Joomla和获取/设置会话数据的代码的粗略概念.
SCRIPT2
<?php
//some code omitted for brevity
$app = &JFactory::getApplication('site');/
$app->initialise();
$nottimedout=false;
$session = JFactory::getSession();
$jquizstart = date( 'Y-m-d H:i:s', time() ); //<<-- time of access
$nottimedout = $session->has('jtimedout');
if ($nottimedout==true)
{
$jqid = $session->get('jqid'); //<<-- get array …Run Code Online (Sandbox Code Playgroud) 细节
我可以使用用户状态变量来存储和检索Joomla会话中的数据.
示例设置变量
$app =& JFactory::getApplication();
$app->setUserState( 'myvar', $myvarvalue );
Run Code Online (Sandbox Code Playgroud)
但我也可以使用JFactory/getSession在会话中存储和检索变量.
示例设置变量
$session =& JFactory::getSession();
$session->set('myvar', $myvarvalue);
Run Code Online (Sandbox Code Playgroud)
问题
这两种方法有什么区别?我什么时候应该使用另一个?
我正在关注一个简单的ajax> php>这里发布的mysql示例http://openenergymonitor.org/emon/node/107
我只能显示第一行的信息.我的桌子是这样设置的
--------------
| id | name|
--------------
| 1 | Pat |
| 2 | Joe |
| 3 | Rob |
--------------
Run Code Online (Sandbox Code Playgroud)
PHP代码
$result = mysql_query("SELECT * FROM $tableName"); //query
$array = mysql_fetch_row($result); //fetch result
echo json_encode($array);
Run Code Online (Sandbox Code Playgroud)
剧本
$(function ()
{
$.ajax({
url: 'api.php', data: "", dataType: 'json', success: function(data)
{
var id = data[0]; //get id
var vname = data[1]; //get name
$('#output').html("<b>id: </b>"+id+"<b> name: </b>"+vname);
}
});
});
Run Code Online (Sandbox Code Playgroud)
行1
如果我把var id = data[0]; …
细节
我有一个测验(我们称之为测验1).Quiz1每次生成时都使用相同的词表.如果用户需要,他们可以跳过单词来完成测验.我想将这些跳过的单词存储在mysql中,然后再对它们进行统计.
起初我打算将错过的单词作为字符串存储在一列中.每个单词都用逗号分隔.
|testid | missedwords | score | userid |
*************************************************************************
| quiz1 | wordlist,missed,skipped,words | 59 | 1 |
| quiz2 | different,quiz,list | 65 | 1 |
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于,我希望在每个测验结束时显示统计数据,这些统计信息包含了参加quiz1的用户最常错过的单词.
我假设如上所述将错过的单词存储在一列中对于此目的而言是低效的,因为我需要提取信息然后计算它 - (可能使用php计算 - 除非我将计算的数据存储在单独的表中).
然后我想也许我需要为遗漏的单词创建一个单独的表.下表的优点是它应该很容易计算下表中的单词.
|Instance| missed word |
*****************************
| 1 | wordlist |
| 1 | missed |
| 1 | skipped |
Run Code Online (Sandbox Code Playgroud)
另一种方法我可以用tally创建一个表,并在每次quiz1时更新它.
Testid | wordlist| missed| skipped| otherword|
**************************************************
Quiz1 | 1 | 1| 1| 0 |
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是每个测验需要一个不同的表,因为每个测验都会使用不同的单词.此外,信息丢失是因为仅保留了计数而不是相关数据,例如哪个用户错过了哪些单词.
题
你会用哪种方法?为什么?欢迎使用替代方法来完成这项任务.如果您发现我的逻辑中存在任何缺陷,请随时指出它们.
编辑 用户可以根据自己的喜好重复测验.他们的信息不会更新,而是为他们重新进行的每个测验创建一个新实例.
我正在使用Jquery,Ajax和PHP来尝试发送一个要在mysql数据库中编写的变量.正在进行Ajax请求,但php没有获取变量.我不知道为什么会这样.
使用firebug和console.log()我可以看到对write_results.php进行了POST
如果我检查响应它说
注意:未定义的索引:第2行的E:\ write_results.php中的testscore
这是我的PHP
<?php
$testscore=$_POST['testscore']; //get testscore from Ajax
include 'DB.php';
$con = mysql_connect($host,$user,$pass);
$dbs = mysql_select_db($databaseName, $con);
if (isset($_POST['testscore'])) {
$addClient = "INSERT INTO variables (`id` ,`name`) VALUES (NULL,'$testscore')";
mysql_query($addClient) or die(mysql_error());
}
?>
Run Code Online (Sandbox Code Playgroud)
这是我的ajax脚本
<script type="text/javascript">
$(document).ready(function() {
testscore ="tryagain"; //testvalue to enter into the mysql database
$.ajax({
type: "POST",
url: "write_results.php",
data: testscore,
success: function(){
$('#box2').html("success");
}
})
});
</script>
Run Code Online (Sandbox Code Playgroud)
我的问题
细节
我正在为新的或续订的许可证到期进行一次插入.到期时间为自插入日期起2年.如果检测到重复,则将更新该条目,使得到期时间等于剩余的到期时间加上2年.
关于重复项,在下面的示例中,应该只有一行包含user_id = 55和license = commercial.
表: licence_expiry
--------------------------------------------------------
| user_id | licence | expiry |
--------------------------------------------------------
| 55 | commercial | 2013-07-04 05:13:48 |
---------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
user_id(int11),license(varchan50),expiry(DATETIME)
我想在mysql中你会写这样的东西(请注意我还没有检查代码是否在mysql中运行.)
INSERT INTO `licence_expiry`
(`user_id`, `licence`, `expiry`)
VALUES
(55, commercial, NOW()+ INTERVAL 2 YEAR)
ON DUPLICATE KEY UPDATE
`expiry` = `expiry` + INTERVAL 2 YEAR
Run Code Online (Sandbox Code Playgroud)
问题:如何使用PDO执行此操作?我已经写了一个粗略的概述,我认为我将使用,但我不知道为ON DUPLICATE KEY UPDATE的到期值写什么.
$sql = "INSERT INTO $table (user_id, licence, expiry)
VALUES (
:user_id,
:licence,
:expiry)
ON DUPLICATE KEY UPDATE expiry …Run Code Online (Sandbox Code Playgroud) 细节
我想利用mysql的空间扩展,所以我试图使用bindParam将经度和纬度存储在数据类型为POINT的mysql表中。不幸的是,我不断收到错误 SQLSTATE[23000]:完整性约束违规:1048 列“位置”不能为空。
我已经检查过经度和纬度有值。所以问题必须出在我的代码上,但我看不出我做错了什么。
这是我正在使用的代码。
$location=$latitude." ".$longitude;
$sql = "INSERT INTO my_geodata SET location = PointFromText('POINT(:location)')";
//INSERT INTO my_geodata SET location = PointFromText('POINT(-41 12)');
try
{
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':location', $location, PDO::PARAM_STR);
$stmt->execute();
$dbh = null;
}
catch(PDOException $e)
{
echo $error=$e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
题
我究竟做错了什么?如何使用 PDO 和 bindParam 将经度和纬度插入到 mysql 表(使用 POINT 数据类型)中?
变化
基于 AgreeOrNot 的回答,实现这一点的一种稍微不同的方法是
$location = 'POINT(' . $latitude . " " . $longitude . ')';
$sql = "INSERT INTO my_geodata (location) VALUES (PointFromText(:location))";
Run Code Online (Sandbox Code Playgroud)