更新表格,我做错了什么?

时间:2014-06-03 10:38:46

标签: php mysql forms

我为我的MySQL数据库创建了一个更新表单但由于某种原因它没有更新我的数据库。它没有错误,但没有做任何事...... 有人能告诉我我做错了吗?

*** EDIT

更新了脚本,但它仍然无效......

    <html>
    <head>
        <link rel="stylesheet" type="text/css" href="css/layout.css"/>
    </head>
    <body>
        <div id="menu">
            <div id="menu_wrapper">
                <ul>
                    <li>Configuratiebeheer<img src="afb/pijltje.png" width="10"/></a>
                        <ul>
                            <li><a href="configuratiebeheer_hardware.php">Lijst hardware</a></li>
                            <li><a href="hardware_toevoegen.php">Hardware toevoegen</a></li>
                            <li><a href="hardware_verwijderen.php">Hardware verwijderen</a></li>
                        </ul>
                    </li>
                </ul>
            </div>
        </div>      
<?php
            $connect=mysql_connect("localhost", "root","");
            mysql_select_db("helpdesk_middenpolder", $connect);
            $id=$_GET['id'];
            $q="SELECT * FROM hardware WHERE hardwareID=$id";

            $r=mysql_query($q);
            echo  "<form method='post'>";
            echo    "<table border='1'>";
            echo    "<th>merknaam</th><th>producttype</th><th>hardwaretype</th>";
            while   ($x=mysql_fetch_array($r)){
                echo "<tr>";
                echo "<td>";
                echo "<input type='text' value='".$x['merknaam']."'>";
                echo "</td>";
                echo "<td>";
                echo "<input type='text' value='".$x['producttype']."'>";
                echo "</td>";
                echo "<td>";
                echo "<input type='text' value='".$x['hardwaretype']."'>";
                echo "</td>";
                echo "</tr>";
            }
            echo "</table>";


?>
<?php
            if(isset($_POST['updatehardware'])){ 
            $query = "UPDATE hardware SET merknaam='".$_POST['merknaam']."', producttype='".$_POST['producttype']."', hardwaretype='".$_POST['hardwaretype']."' WHERE hardwareID=".$id."";
            mysql_query($query);
            }
            ?>
<?php
mysql_close($connect);
?>


    <input type="submit" name="updatehardware" value="Hardware updaten">
    </form>
    </body>
</html>

提前致谢!

8 个答案:

答案 0 :(得分:2)

试试这个。在表单中包含文本字段。

<html>
    <head>
        <link rel="stylesheet" type="text/css" href="css/layout.css"/>
    </head>
    <body>
        <div id="menu">
            <div id="menu_wrapper">
                <ul>
                    <li>Configuratiebeheer<img src="afb/pijltje.png" width="10"/></a>
                        <ul>
                            <li><a href="configuratiebeheer_hardware.php">Lijst hardware</a></li>
                            <li><a href="hardware_toevoegen.php">Hardware toevoegen</a></li>
                            <li><a href="hardware_verwijderen.php">Hardware verwijderen</a></li>
                        </ul>
                    </li>
                </ul>
            </div>
        </div>      
<?php
            $connect=mysql_connect("localhost", "root","");
            mysql_select_db("helpdesk_middenpolder", $connect);
            $id=$_GET['id'];
            $q="SELECT * FROM hardware WHERE hardwareID=$id";


            $r=mysql_query($q);
            echo  "<form method='post'>";
            echo    "<table border='1'>";
            echo    "<th>merknaam</th><th>producttype</th><th>hardwaretype</th>";
            while   ($x=mysql_fetch_array($r)){
                echo "<tr>";
                echo "<td>";
                echo "<input type='text' value='".$x['merknaam']."'>";
                echo "</td>";
                echo "<td>";
                echo "<input type='text' value='".$x['producttype']."'>";
                echo "</td>";
                echo "<td>";
                echo "<input type='text' value='".$x['hardwaretype']."'>";
                echo "</td>";
                echo "</tr>";
            }
            echo "</table>";

        mysql_close($connect);
?>
<?php
    if(isset($_POST['updatehardware'])){ 
        $query = "UPDATE hardware SET merknaam='".$_POST['merknaam']."', producttype='".$_POST['producttype']."', hardwaretype='".$_POST['hardwaretype']."' WHERE hardwareID='".$id."'";
        }
        mysql_query($query);
?>



    <input type="submit" name="updatehardware" value="Hardware updaten">
    </form>
    </body>
</html>

并使用$_POST[]获取输入字段中的值..

答案 1 :(得分:1)

您需要将查询更改为POST值:

if(isset($_POST['updatehardware'])){ 
    $query = "UPDATE hardware SET merknaam='".$_POST['merknaam']."', producttype='".$_POST['producttype']."', hardwaretype='".$_POST['hardwaretype']."' WHERE hardwareID='".$id."'";
    }
    mysql_query($query);

还为yuour表单元素设置名称

<input type='text' value='".$x['merknaam']."' name="merknaam">

答案 2 :(得分:1)

  1. 您正在使用mysql_close($ connect);而不是尝试更新,请执行mysql_close($ connect);更新后。

  2. 此外,您的表单不包含“提交”按钮以外的其他字段。

  3. 您的表单输入值与之前相同,因此即使您使用这些值更新 - 您也不会看到差异。

  4. 您正在发帖但是在这里您从GET $id=$_GET['id'];获取了ID,您需要添加&#39; id&#39;表格上的字段BTW。

  5. 在更新查询中,使用POSTed变量而不是DB中检索到的值。

  6. 所以看到差异:

    <?php
    $connect=mysql_connect("localhost", "root","");
    mysql_select_db("helpdesk_middenpolder", $connect);
    
    $id = $_POST['id']; 
    
    $q="SELECT * FROM hardware WHERE hardwareID = $id";
    
    $r=mysql_query($q);
    
    echo "<form method='post'>";
    echo "<table border='1'>";
    echo "<th>merknaam</th><th>producttype</th><th>hardwaretype</th>";
    
    while   ($x=mysql_fetch_array($r)){
        echo "<tr>";
        echo "<td>";
            echo "<input type='text' value='".$x['merknaam']."'>";
        echo "</td>";
    
        echo "<td>";
            echo "<input type='text' value='".$x['producttype']."'>";
        echo "</td>";
    
        echo "<td>";
            echo "<input type='text' value='".$x['hardwaretype']."'>";
        echo "</td>";
        echo "</tr>";
    }
    echo "</table>";
    echo '<input type="hidden" name="id" value="' . $id . '">';
    echo '<input type="submit" name="updatehardware" value="Hardware updaten">';
    echo "</form>";
    
    if(isset($_POST['updatehardware'])){ 
    $query = "UPDATE hardware SET merknaam='".$_POST['merknaam']."', producttype='".$_POST['producttype']."', hardwaretype='".$_POST['hardwaretype']."' WHERE hardwareID='".$id."'";
    }
    
    mysql_query($query);
    
    mysql_close($connect);
    
    ?>
    

    另请注意,在第2个答案最佳here

    中解释使用表格内的表格很困难

答案 3 :(得分:1)

请记住,您需要通过单引号括起varchars和除数字类型之外的其他类型 如果硬件ID不是varchar,请执行此操作

$query = "UPDATE hardware SET merknaam='$_POST['merknaam']', producttype='$_POST['producttype']', hardwaretype='$_POST['hardwaretype']' WHERE hardwareID=$id ";

其他

$query = "UPDATE hardware SET merknaam='$_POST['merknaam']', producttype='$_POST['producttype']', hardwaretype='$_POST['hardwaretype']' WHERE hardwareID='$id' ";

答案 4 :(得分:0)

您在表单标记中没有输入元素。

将开头表格标签移到输入标签上方

<html>
<head>
<link rel="stylesheet" type="text/css" href="css/layout.css"/>
</head>
<body>
<div id="menu">
    <div id="menu_wrapper">
    <ul>
        <li>Configuratiebeheer<img src="afb/pijltje.png" width="10"/></a>
        <ul>
            <li><a href="configuratiebeheer_hardware.php">Lijst hardware</a></li>
            <li><a href="hardware_toevoegen.php">Hardware toevoegen</a></li>
            <li><a href="hardware_verwijderen.php">Hardware verwijderen</a></li>
        </ul>
        </li>
    </ul>
    </div>
</div>
<form method="post">
<?php
        $connect=mysql_connect("localhost", "root","");
        mysql_select_db("helpdesk_middenpolder", $connect);
        $id=$_GET['id'];
        $q="SELECT * FROM hardware WHERE hardwareID=$id";


        $r=mysql_query($q);

        echo    "<table border='1'>";
        echo    "<th>merknaam</th><th>producttype</th><th>hardwaretype</th>";
        while   ($x=mysql_fetch_array($r)){
        echo "<tr>";
        echo "<td>";
        echo "<input type='text' value='".$x['merknaam']."'>";
        echo "</td>";
        echo "<td>";
        echo "<input type='text' value='".$x['producttype']."'>";
        echo "</td>";
        echo "<td>";
        echo "<input type='text' value='".$x['hardwaretype']."'>";
        echo "</td>";
        echo "</tr>";
        }
        echo "</table>";

    mysql_close($connect);
?>
<?php
    if(isset($_POST['updatehardware'])){ 
    $query = "UPDATE hardware SET merknaam='".$x['merknaam']."', producttype='".$x['producttype']."', hardwaretype='".$x['hardwaretype']."' WHERE hardwareID='".$id."'";
    }
    mysql_query($query);
?>


    <input type="submit" name="updatehardware" value="Hardware updaten">
    </form>
    </body>
</html>

答案 5 :(得分:0)

您错误地包含form

输入元素必须包含表单元素(例如<input /><select /> ...等)

像这样改变,

<form method="post">
  <!-- while loop stuff -->

  <input type="submit" name="updatehardware" value="Hardware updaten">
</form>

答案 6 :(得分:0)

  1. 将控制器与视图分开。至少,在HTML之前移动所有PHP代码。

  2. 使用输入字段的名称,这样您可以轻松区分内容。

  3. 在名称中使用方括号,提交相同的输入,但是针对不同的行/项目。

  4. 总是使用类型转换值,即整数和浮点数,它们会自动删除错误输入的问题。如果您没有使用PDO和绑定参数,请使用mysql_real_escape_string确保用户不会破坏您的数据库。

  5. 保持GET&POST和POST不在函数中,将它们发送到代码的单独部分中的函数。

  6. 对于数据库交互,请使用PDO或MySQLi,以避免出现旧问题。

  7. 如果不解决第6个问题,我的解决方案将如下所示:

    <?php
    
    // This is your "library" of functions
    function getConnection() {
        $connect=mysql_connect("localhost", "root","");
        mysql_select_db("helpdesk_middenpolder", $connect);
        return $connect;
    }
    function endConnection() {
        mysql_close($connect);
    }
    function updateProducts($products) {
        $query = '';
        foreach ($products as $productId => $productData) {
            $query .= "UPDATE hardware SET merknaam='".mysql_real_escape_string($productData['merknaam'])."', producttype='".mysql_real_escape_string($productData['producttype'])."', hardwaretype='".mysql_real_escape_string($productData['hardwaretype'])."' WHERE hardwareID='".(int) $productId."'; ";
        }
        mysql_query($query);
    }
    function getProducts($id) {
        $q = "SELECT * FROM hardware WHERE hardwareID=$id";
        $r = mysql_query($q);
        $products = array();
        while ($x=mysql_fetch_array($r)) {
            $products[] = $x;
        }
        return $products;
    }
    
    // This is your controller
    $connect = getConnection();;
    if (isset($_POST['products'])) {
        updateProducts($_POST['products']);
    }
    $input_id = (isset($_GET['id']) ? (int) $_GET['id'] : 0);
    if ($input_id > 0) {
        $products = getProducts($input_id);
    }
    endConnection();
    
    // This is your view
    ?><html>
        <head>
            <link rel="stylesheet" type="text/css" href="css/layout.css" />
        </head>
        <body>
            <div id="menu">
                <div id="menu_wrapper">
                    <ul>
                        <li>Configuratiebeheer<img src="afb/pijltje.png" width="10"/></a>
                            <ul>
                                <li><a href="configuratiebeheer_hardware.php">Lijst hardware</a></li>
                                <li><a href="hardware_toevoegen.php">Hardware toevoegen</a></li>
                                <li><a href="hardware_verwijderen.php">Hardware verwijderen</a></li>
                            </ul>
                        </li>
                    </ul>
                </div>
            </div>
            <form method="get">
                <h2>Get product by ID</h2>
                <div>
                    <label for="productId">ID</label> <input id="productId" type="text" name="id" value="<?php echo ($input_id > 0 ? $input_id : ''); ?>" />
                </div>
                <input type="submit" value="Get item" />
            </form>
            <?php if (isset($products) && !empty($products)): ?>
            <h2>Products found by ID</h2>
            <form method="post">
                <table border="1">
                    <thead>
                        <tr>
                            <th>ID</th>
                            <th>merknaam</th>
                            <th>producttype</th>
                            <th>hardwaretype</th>
                        </tr>
                    </thead>
                    <tbody>
                    <?php foreach ($products as $product): ?>
                        <tr>
                            <td><?php echo $product['hardwareID']; ?></td>
                            <td><input type="text" name="product[<?php echo $product['hardwareID']; ?>][merknaam]" value="<?php echo $product['merknaam']; ?>" /></td>
                            <td><input type="text" name="product[<?php echo $product['hardwareID']; ?>][producttype]" value="<?php echo $product['producttype']; ?>" /></td>
                            <td><input type="text" name="product[<?php echo $product['hardwareID']; ?>][hardwaretype]" value="<?php echo $product['hardwaretype']; ?>" /></td>
                        </tr>
                    <?php endforeach; ?>
                    </tbody>
                </table>
                <input type="submit" value="Hardware updaten" />
            </form>
            <?php endif; ?>
        </body>
    </html>
    

    Haven没有对这段代码进行过测试,但它应该让你理解你应该开始走向的方式,应该做的,或者至少是道路。

    尝试编写干净的代码,不要害怕使用函数和类,并始终从错误中吸取教训。

答案 7 :(得分:-1)

代码中有很多错误:

  1. 输入标记应该带有<form>标记
  2. 而不是$x['merknaam']查询中的UPDATE,请使用$_POST['merknaam'](其他字段相同);注意SQL注入。
  3. hardwareID可能是INT列;在UPDATE查询中包含值不需要单引号
  4. 更新代码应放在表单
  5. 之前
  6. $id = $_GET['id']附近有一个逻辑错误;以POST方式发布表单将失去$id; SQL注入再次。在表单标记
  7. 中添加<input type="hidden" name="id" value="<?php echo $id; ?>" />
  8. (未成年人)你的DOCTYPE在哪里?
  9. 停止使用已弃用的mysql_*库;请改用PDO / MySQLi。
  10. (次要)您的<title>标记在哪里?以及整个<head>
  11. border='1'已弃用;使用CSS代替
  12. 您执行mysql_query() mysql_close()ini_set('display_errors', '1');会导致错误
  13. 如果您没有看到错误,则必须关闭错误报告;通过mysql_connect()
  14. 将其重新打开
  15. 强烈建议您检查name
  16. 的返回值,检查是否成功建立了mysql连接
  17. (次要)通常您不需要<th>提交按钮,但没关系。
  18. 您的<tr>未被{{1}}
  19. 包围

    解决这些问题。