随后的MySQL查询搞砸了数据库

时间:2014-06-02 07:11:14

标签: php html mysql sql

编辑 解决问题

因此,在尝试使用PHP在我正在创建的网站上实现非常基本的MySQL查询功能时遇到了一个棘手的问题。

我是PHP / HTML的新手,所以这可能是一个非常简单的解决方案,但我用Google搜索并找不到任何东西。

所以在我的数据库中,我有一个名为Teams的表,其中包含字段“name”和“continent”,它们都是char(20)字段。

在这个网页上,我有一张表格,显示某个大陆的所有团队名称。 (此功能目前正常工作)

问题在于此表下的一个部分,该部分允许用户输入他们希望更新的团队的当前名称(更改团队名称/大陆)并输入团队的新名称或更改其大陆。

第一个字段(当前名称)是必需的,以便SQL UPDATE知道要更新的记录,其他两个字段(新名称和新大陆)是可选的。

新名称字段是文本字段,新的大陆字段是下拉菜单。

这些下面有一个提交按钮,用于更新记录。

目前,更改团队名称的方式非常有效,但每当我尝试更新团队的大陆时,它都不会更改大陆,而是将团队名称更改为“”,或者基本上将空白名称更改为

这是我的代码:

<div class="alter-teams">
    Update Team:
    <div>
        Enter the current name of the team you want to update in the first box.
        <br />
        Enter the new name and / or select the new continent.
        <form method="post">
            Current Team Name: <input type="text" name="teamname" required="" />
            <br />
            New Team Name: <input type="text" name="newteamname" r />
            <br />
            New Continent: <select name="continent" />
            <option value="Asia" selected="">Asia</option>
            <option value="Europe">Europe</option>
            <option value="North America">North America</option>
            <option value="South America">South America</option>
            </select>
            <br />
            <input type="submit" name="updateteam" value="Update Team" />
        </form>
    </div>
</div>

<?php
    if(isset($_POST['updateteam']))
    {
        //set up table variablew
        $table = mysql_select_db("cs275_anzianoa", $DBCNX);
        if(!$table){
            echo 'Table Fail';
        }

        //get input from HTML form(s)
        $teamname = $_POST['teamname'];
        $newteamname = $_POST['newteamname'];
        $continent = $_POST['continent'];

        //perform UPDATE function
        if(isset($newteamname))
        {
            $query = 
            "UPDATE Teams SET name = '$newteamname' WHERE name = '$teamname'";
            $result = mysql_query($query);
            if(!$result){
                echo 'Update Query Fail' . mysql_error();
            }
        }


        if(isset($continent))
        {
            $query =
            "UPDATE Teams SET continent = '$continent' WHERE name = '$teamname'";
            $result = mysql_query($query);
            if(!$result)
            {
                echo 'Update Query Fail' . mysql_error();
            }
        }

        //refresh page      
        echo "<script>location.reload();</script>";
    }
?>

注意:下拉列表的默认值为亚洲,因为此网页目前显示亚洲所有团队。

感谢阅读。

1 个答案:

答案 0 :(得分:0)

感谢用户Ryan Vincent,我能够解决我的问题。

问题在于我执行查询的顺序。我首先更改名称,然后尝试更改大陆,但是对大陆的更改取决于团队的名称。因此,在第一个查询被触发后,第二个查询在更改正确的团队时遇到了问题。

另外,我的

if(isset($newteamname))

没有按预期工作,因为如果它是一个空字符串,它不会返回NULL。因此,如果我将第二个框留空,它将用空字符串覆盖团队名称。

因此,我将其更改为

if($newteamname !== '') 

以下是完整的,有效的代码:)

<!-- Update Team -->
<div class="alter-teams">
    Update Team:
    <div>
        Enter the current name of the team you want to update in the first box.
        <br />
        Enter the new name and / or select the new continent.
        <form method="post">
            Current Team Name: <input type="text" name="teamname" required="" />
            <br />
            New Team Name: <input type="text" name="newteamname" r />
            <br />
            New Continent: <select name="continent" />
            <option value="Asia">Asia</option>
            <option value="Europe">Europe</option>
            <option value="North America" selected="">North America</option>
            <option value="South America">South America</option>
            </select>
            <br />
            <input type="submit" name="updateteam" value="Update Team" />
        </form>
    </div>
</div>

<?php
    if(isset($_POST['updateteam']))
    {
        //set up table variable
        $table = mysql_select_db("cs275_anzianoa", $DBCNX);
        if(!$table){
            echo 'Table Fail';
        }

        //get input from HTML form(s)
        $teamname = $_POST['teamname'];
        $newteamname = $_POST['newteamname'];
        $continent = $_POST['continent'];

        //perform UPDATE function
        if(isset($continent))
        {
            $query =
            "UPDATE Teams SET continent = '$continent' WHERE name = '$teamname'";
            $result = mysql_query($query);
            if(!$result)
            {
                echo 'Update Query Fail' . mysql_error();
            }
        }

        if($newteamname !== '')
        {
            $query = 
            "UPDATE Teams SET name = '$newteamname' WHERE name = '$teamname'";
            $result = mysql_query($query);
            if(!$result){
                echo 'Update Query Fail' . mysql_error();
            }
        }


        //refresh page      
        echo "<script>location.reload();</script>";
    }
?>