【问题标题】:MySQL: Changing a value in a columnMySQL:更改列中的值
【发布时间】:2015-05-09 21:10:01
【问题描述】:

说实话,这个标题几乎可以解释自己。我正在尝试将我的删除列从 0 更改为 1,具体取决于从我的列表播放器下拉列表中选择的播放器。

我的 listPlayers.php 文件正在 100% 工作。玩家在下拉列表中显示良好。 我应该补充一点,错误发生在我的 $sql 变量中。

<?php
include 'dbconnect.php';
$sql = "UPDATE players SET Delete = 1 WHERE playersID = $_POST[playersIDHidden]";

if(! mysql_query($sql, $conn))
{
    echo "Error " . mysql_error();
}

else
{
    if(mysql_affected_rows() != 0)
    {
        echo $_POST[pName] . " has been deleted <br>";
        echo "Person ID: " . $_POST ['playersID'] . "<br>";
        echo "Players Name: " . $_POST ['pName'] . "<br>";

        echo "Deletion complete";
    }

    else
    {
        echo "No records were changed";
    }
}

mysql_close($conn);
?>

<form action = "viewPlayers.php" method = "POST" />
    <input type = "submit" value = "View Players">
</form>

最后是我的 listPlayers.php,它在下拉列表中显示了我的玩家姓名。

<?php
include "dbconnect.php"; //Opening Database Connection

$sql = "SELECT * FROM `players` WHERE `Delete` = 0;";

if (!$result = mysql_query($sql, $conn))
{
    die('Error in querying the database' . mysql_error());
}

echo "<br><select name = 'listPersons' id = 'listPersons' onclick = 'populate()'>";

while ($row = mysql_fetch_array($result))
{
    $id = $row['playersID'];
    $pName = $row['playersName'];
    $dob = $row['playersDateOfBirth'];
    $dob = date  ("d-m-Y", strtotime($dob));

    $allText = "$id, $pName, $dob";
    echo "<option value = '$allText'> $pName </option>";
}

echo "</select>";
mysql_close($conn);
?>

抱歉,这篇文章比较长。我通常能够修复 99% 的未定义错误。这个让我迷路了。

干杯!

【问题讨论】:

  • “这可能是因为我的 playerID 文本框被禁用了吗?” - 在没有禁用的情况下尝试一下,看看你会得到什么结果。
  • 有道理。它可以工作,但不允许编辑文本框。有什么方法可以让文本框保持启用状态,但仍然不允许用户编辑它们?
  • 您可以随时尝试使用隐藏属性。
  • 我会使用 hidden 属性,但是当我在 listPlayers 下拉列表中选择一个球员时,球员数据将在“删除”发生之前显示在相应的文本框中。不幸的是,在这种情况下,隐藏是行不通的。

标签: php sql undefined-index


【解决方案1】:

使用您禁用的文本框向用户显示它。

使用另一个隐藏字段来保存玩家 ID。

用您的脚本填充它们,然后您可以在需要删除时使用隐藏字段中的值。

为了清楚起见,我将向您展示您的 HTML 可能是什么样的 - 这是脚本:

<script>
    function populate()
    {
        var select = document.getElementById("listPersons"); 
        var result = select.options[select.selectedIndex].value;

        var personDetails = result.split(", ");
        document.getElementById("playersID_display").value = personDetails[0];
        document.getElementById("playersID").value = personDetails[0];
        document.getElementById("pName_display").value = personDetails[1];
        document.getElementById("pName").value = personDetails[1];
....

和html:

<form name = "myForm" action = "deletePlayer.php" method = "POST">    
    <p>
        <label for> Players ID:
            <input type = "text" name = "playersID_display" id = "playersID_display" disabled/>
            <input type = "hidden" name = "playersID" id = "playersID" />
        </label>
    </p>

    <p>
        <label for> Players Name:
            <input type = "text" name = "pName_display" id = "pName_display" disabled/>
            <input type = "hidden" name = "pName" id = "pName" />
        </label>
    </p>

    <p>
        <label for> Date of Birth:
            <input type = "date" name = "DoB_display" id = "DoB_display" disabled/>
            <input type = "hidden" name = "DoB" id = "DoB" />
        </label>
    </p>

    <input type = "Submit" value = "Delete" class = "button" onClick = "return confirm('Are you sure you want to delete this player?')"/>

</form>     

请注意,我为 HTML 输入元素维护了字段的唯一名称和唯一的 ID。我也更喜欢 type="hidden" 而不是将 hidden 放在 &lt;input ... hidden /&gt; 元素的末尾 - 我不熟悉这种语法,所以我使用我喜欢的方式。

显然,您的脚本必须单独更新这些字段中的每一个。

【讨论】:

  • 好的,好主意。我现在把它写出来,这样我就有了两个输入框,如下图。但是当我单击删除时,我的 sql 语法出现错误。第 1 行的 " 有问题。但第一行有我的起始 php 标签。&lt;form name = "myForm" action = "deletePlayer.php" method = "POST"&gt; &lt;p&gt; &lt;label for&gt; Players ID: &lt;input type = "text" name = "playersID" id = "playersID" disabled/&gt; &lt;input type = "text" name = "playersID" id = "playersID" hidden/&gt; &lt;/label&gt; &lt;/p&gt;
  • 当 SQL 报告错误时,不是脚本中的 # 行,而是 SQL 查询中的 # 行。您遇到的具体错误是什么?
  • You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 在 deletePlayer.php 文件中显示此错误
  • 我没有在我的回答中提到它,但 mysql_* 已被弃用 - 你真的应该使用 mysqli_* 或 PDO 和准备好的语句。
  • 哪个查询导致了错误?以及哪个脚本 - 我在您在问题中发布的各种脚本之间迷路了......
猜你喜欢
  • 1970-01-01
  • 2013-03-16
  • 2018-12-27
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
相关资源
最近更新 更多