2019-09-03 20:51:13
市面上好多版本的caipiao项目
最近有个项目是php版本的,要做相关的维护,修改。
客户买了一个现成的,做些修改。问题那个多呀。搞了几天,头大。
不得不说原作者真是low到家了,好吧不批评人家了,还是说说所得吧!
1、php网站问题
因为mysql数据库版本问题导致的各种小问题:sql_mode
a、not null 结果insert时候不给值会错误,没有任何提示的insert失败。STRICT_TRANS_TABLES
b、group by 非强制列。ONLY_FULL_GROUP_BY
附上sql_mode常用值: ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO: 该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。 STRICT_TRANS_TABLES: 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制 NO_ZERO_IN_DATE: 在严格模式下,不允许日期和月份为零 NO_ZERO_DATE: 设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。 ERROR_FOR_DIVISION_BY_ZERO: 在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL NO_AUTO_CREATE_USER: 禁止GRANT创建密码为空的用户 NO_ENGINE_SUBSTITUTION: 如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常 PIPES_AS_CONCAT: 将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似 ANSI_QUOTES: 启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
2、apk问题
客户需求打包apk性质访问,但是也成功遇到了webview版本兼容问题,低版本对js支持不够完美。
webview用的是android系统内置模块,所以不同的android版本对应的webview不一致。
a、webview 39版本,android 5.1;ES6语法不支持。layui倒是支持的不错的。
b、webview版本低导致不能用chrome76远程调试页面,inspect不能成功调试js。
c、alert、confirm不直接原生支持。要webview处理下。
public class MainActivity extends AppCompatActivity { private WebView webView1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView.setWebContentsDebuggingEnabled(true); setContentView(R.layout.activity_main); webView1 = (WebView) findViewById(R.id.webView1); WebSettings webSettings = webView1.getSettings(); webSettings.setJavaScriptEnabled(true); webView1.setWebViewClient(new WebViewClient()); webView1.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); builder.setTitle("") .setMessage(message) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }) .setCancelable(false) .create() .show(); return true; } @Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); builder.setTitle("") .setMessage(message) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.cancel(); } }) .setCancelable(false) .create() .show(); return true; } @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { final EditText et = new EditText(view.getContext()); AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); builder.setTitle("") .setMessage(message) .setView(et) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(et.getText().toString()); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.cancel(); } }) .setCancelable(false) .create() .show(); return true; } }); webView1.loadUrl("http://192.168.0.107"); } }