【问题标题】:Insert into SQL database via PHP通过 PHP 插入 SQL 数据库
【发布时间】:2015-04-17 20:05:38
【问题描述】:

我的 Java 代码生成如下链接:

addscore.php&name=Namedd&score=0&hash=b61249d0207e4734879578733a86c3d6

一个 PHP 文件 (addscore.php) 应该使用这些信息并使用 sql 查询将其插入数据库。

addscore.php:

<?php
         $db = mysql_connect("host", "root", "password") or die('Could not connect: ' . mysql_error());
         mysql_select_db("db1") or die('Could not select database');

         $score = (int)$_GET['score'];
         $hash = $_GET['hash'];
         $name = mysql_real_escape_string($_GET['name'], $db);
         $timestamp = date("Y-m-d H:i:s");
         $secretKey="mySecretKey";

         $real_hash = md5($score . $hash . $secretKey);

         if($real_hash == $hash) {
             $query = "INSERT INTO highscores (id, date, score, name) VALUES (NULL, '$timestamp', '$score', '$name')";
             $result = mysql_query($query) or die('Query failed: ' . mysql_error());
         }
?>

Java 代码给出错误消息,无法向服务器提交分数。如果我尝试打开给定的 url(见上文),我会收到 Not found 错误。

更新: Java 代码:

        String hash = "";
        String name = nameText.getText();
        try{
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update((name + score + HASH_SALT).getBytes());
            byte byteData[] = md.digest();

            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < byteData.length; i++) {
                sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
            }
            hash = sb.toString();
        } catch (Exception e) {
            hash = "";
        }


        try {
            String urlParameters = PARAM_NAME + name + PARAM_SCORE + score + PARAM_HASH + hash;
            URL url = new URL(HIGHSCORES_ADD + urlParameters);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.getInputStream();
            urlConnection.disconnect();
        } catch (Exception e){
            Gdx.app.log( "HighScores", "Could not submit score" + e.getMessage());
        } finally {
            ((Game)Gdx.app.getApplicationListener()).setScreen(new MainMenu());
        }

【问题讨论】:

  • 高分表的id列是否可以为空?
  • 链接不应该是addscore.php?name...而不是addscore.php&amp;name...吗?
  • 更好地查看生成链接的 Java 代码。如果不仔细检查,PHP 代码看起来可以工作。
  • 我已经添加了java代码。
  • 如果您的 id 字段是自动递增的并且主要尝试删除 id 和 null 参数。离开mysql添加id值

标签: java php sql sql-insert


【解决方案1】:

你的地址应该是

addscore.php?name=Namedd&score=0&hash=b61249d0207e4734879578733a86c3d6

注意网址中的第一个&amp;

确保在您的 Java 代码中 ? 介于 HIGHSCORES_ADDurlParameters 之间

当你修复了保存数据时如果仍然有错误 一个好主意是将您的 $query 保存在文本或日志文件中,并尝试在 phpmyadmin 中检查查询

您必须注意的另一件事是 您的插入是通过 php 而不是 java !更新您的问题主题

【讨论】:

  • 我已经尝试过这个改变。它给出了没有查询失败消息的空白屏幕。它不会向数据库添加记录。
  • 确保您的查询在文本或日志文件中记录查询,并直接在 phpmyadmin 中尝试。
  • 我试图用这个来保存它: $fp = fopen('info.txt','w'); fwrite($fp,序列化($query));但不创建输出文件。
  • $filename = "path to your file"; $f = fopen($filename, "w"); fwrite($f, $query); fclose($f);
  • string.substring(string.length() - 1)检查HIGHSCORES_ADD最后一个字符,如果不等于?,请更改您的代码HIGHSCORES_ADD + "?" + urlParameters
猜你喜欢
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多