1

我一直在尝试为一些在线游戏制作我的记分牌系统,它可以正常工作,所以我添加了一个 HTML 表单,它与连接到我的 sql 数据库的 php 脚本交互,并在我的 sql 记分牌表中插入一个带有百分比的名称,如果我通过 phpMyAdmin 手动添加名称/百分比,它可以在记分牌上完美运行,但是当我制作要求用户插入他的姓名然后用百分比将他的姓名添加到记分牌中的 html 表单时,IT 不会添加, 所以这是我的 html 表单。

<center><form method="post" action="">
<font color="green">Your name Max length is 15</font> <input type="text" name="username" maxlength="15">
<button style="background-color:red; name="Enter" type="submit" value="HTML">Enter</button></center>
</form>

我的 PHP 表单

<?php
if (isset($_POST['username'])) 
{
$getname = $_POST['username'];
$percentage = "10";
$link = mysqli_connect("myhost","myusername","mypw","mydatabase") or die("Error " . mysqli_error($link));

$query = "INSERT INTO scoreboard (name,percent) VALUES ('$getname','$percentage');" or die("Error in the consult.." . mysqli_error($link));

$result = mysqli_query($link, $query);
}
?>

记分板是我的表的名称,列是名称/百分比,名称接受文本,百分比接受整数,提前致谢:)。

4

3 回答 3

2

我测试了您的代码,发现您的提交按钮是问题之一,包括不正确地放置分号:

$query = "INSERT INTO scoreboard (name,percent) VALUES ('$getname','$percentage');"

应该读为:

$query = "INSERT INTO scoreboard (name,percent) VALUES ('$getname','$percentage')";

使用以下表格和 PHP 测试

<form method="post" action="">
<center>
<font color="green">Your name Max length is 15</font>
<input type="text" name="username" maxlength="15">
<input type="submit" name="submit" value="Submit">
</center>
</form>

<?php
if (isset($_POST['username']))
{
$link = mysqli_connect("myhost","myusername","mypw","mydatabase") or die("Error " . mysqli_error($link));
// $getname = $_POST['username'];
$getname = mysqli_real_escape_string($link,$_POST['username']);
$percentage = "10";
$query = ("INSERT INTO scoreboard (name,percent) VALUES ('$getname',$percentage)");
$result = mysqli_query($link, $query);
if(!$result){
  printf("Error message: %s", mysqli_error($link));
}
else {
echo "Data properly inserted with the value of <b>$getname</b> and <b>$percentage</b>";
     }
}
?>

注意:您最好使用下面的代码来检查该字段是否为空。否则,在没有任何内容的情况下单击提交按钮,将在 DB 中生成一个带有空白名称字段的条目。

if (empty($_POST['username'])) {

die("<div align='center'>Enter your name</div>");

}

else

{
// rest of code

另外,正如 Hanky 웃 Panky 所说,您应该像我的工作示例中那样清理变量:

$getname = mysqli_real_escape_string($link,$_POST['username']);

这是一个更安全(参数化)的方法,取自SO here的示例

快速说明:如果您要使用$percentage = 10;而不是$percentage = "10";

那么你将需要使用$stmt->bind_param("si", $unsafe_variable,$percentage);,否则你的百分比将被视为一个字符串,而不是一个整数,并且将被抛出一个错误。s是为了stringi是为了integer

<form method="post" action="">
<center>
<font color="green">Your name Max length is 15</font>
<input type="text" name="username" maxlength="15">
<input type="submit" name="submit" value="Submit">
</center>
</form>

<?php
if (empty($_POST['username'])) {
die("<div align='center'>Enter your name</div>");
}
else
{
    $mysqli = new mysqli("myhost","myusername","mypw","mydatabase");
    // Check that connection was successful.

    if($mysqli->connect_errno > 0) {
      die('Connection failed [' . $mysqli->connect_error . ']');
    }

    $percentage = "10";
    $unsafe_variable = $_POST["username"];
    $stmt = $mysqli->prepare("INSERT INTO scoreboard (name,percent) VALUES (?,?)");
    // TODO check that $stmt creation succeeded
    // "s" means the database expects a string
    $stmt->bind_param("ss", $unsafe_variable,$percentage);
    $stmt->execute();
    $stmt->close();
    $mysqli->close();
    echo "<div align='center'>Data written to DB</div>";
}
?>
于 2013-09-30T03:48:54.210 回答
1

每当对任何函数的正确用法有疑问时,请首先从 php.net 寻求帮助,它的页面上有很多关于此的示例。看一下

http://www.php.net/manual/en/mysqli.real-escape-string.php

http://php.net/mysqli_error

http://www.php.net/manual/en/mysqli.query.php

首先清理您的输入值

$getname = mysqli_real_escape_string($link,$_POST['username']);
$percentage = 10;

然后

$query = "INSERT INTO scoreboard (name,percent) VALUES ('$getname',$percentage)";
$result = mysqli_query($link, $query);
if(!$result){
  printf("Error message: %s", mysqli_error($link));
}   
于 2013-09-30T02:54:11.727 回答
0

这条线需要固定

$query = "INSERT INTO scoreboard (name,percent) VALUES ('$getname','$percentage');" or die("Error in the consult.." . mysqli_error($link));

我把它改成了这个

$query = "INSERT INTO scoreboard VALUES ('$getname','$percentage')";

然后添加or die("Error in the consult.." . mysqli_error($link));到您的查询行。

您的变量中间有一个编译器换行符,您不需要说明命名值的顺序,您只需将值放在正确的位置,它会自动按顺序添加它们。

于 2013-09-30T02:36:32.663 回答