【问题标题】:PHP mySQL Update pagePHP mySQL 更新页面
【发布时间】:2013-04-18 05:24:23
【问题描述】:

我正在尝试在 php 和 mysql 中制作一个简单的产品页面(无需登录或类似的东西)。 到目前为止,一切都很好地显示在我的产品页面上,我可以从我的管理页面中很好地删除/添加。从那里我试图弄清楚如何创建一个编辑功能。 因此,为了方便起见,我制作了一个基于 productid 从 mysql 表中填充的表单(edit2.php?id=X),然后发布到 edit.php 并希望更新数据库。 到目前为止,重用旧代码不起作用,不知何故我希望它会那么简单。

这是我的添加产品(有效):

<?php
session_start();
if(isset($_POST) && isset($_POST['hp']) && empty($_POST['hp'])) {
    if(
isset($_SESSION['token']) &&
$_SESSION['token'] == $_POST['token']
) {
        mysql_connect('localhost', 'test_admin', 'test');
        mysql_select_db('test_product');
        $data = array_map('mysql_real_escape_string', $_POST);
        $query = "
            INSERT INTO products (
                product_name, price, description, image
            ) VALUES (
                '{$data['product_name']}',
                '{$data['price']}',
                '{$data['description']}',
                '{$data['image']}'
            )
        ";
        if(mysql_query($query)) {
            echo '<p>Your information was successfully saved.</p>';
            unset($_SESSION['token']);
        } else {
            echo '<p>There was an error storing your data, please try again later.</p>';
        }
    } else {
        echo '<p>Your data has already been saved.</p>';
    }
} else {
    echo '<p>Error.<br />Please try again later.</p>';
}
?>

这是我的更新(它只是抛出一个语法错误或“错误存储您的数据”:

<?php

        mysql_connect('localhost', 'test_admin', 'test');
        mysql_select_db('lbriedis_product');


        $data = array_map('mysql_real_escape_string', $_POST);
        $query = "UPDATE products WHERE id = ".$pageid." (
                product_name, price, description, image
            ) VALUES (
                '{$data['product_name']}',
                '{$data['price']}',
                '{$data['description']}',
                '{$data['image']}'
            )
        ";
        if(mysql_query($query)) {
            echo '<p>Your information was successfully saved.</p>';
            unset($_SESSION['token']);
        } else {
            echo '<p>There was an error storing your data, please try again    later.</p>';
            echo mysql_error(); //Used for development and testing only
        }
?>

当我尝试使用会话验证时出现会话错误,可能是因为我在管理页面上启动了会话(添加产品表单在 admin.php 上,编辑和删除是链接)? 尽管如此,我暂时删除了会话检查,因为我在更新部分更加挣扎。

此外,我不确定将 $pageid 传递给更新查询的最佳方式,以获取 'update where id = $pageid.我有一个带有值的隐藏字段(请参阅编辑表单),如何正确引用它?

编辑表单(值显示正确,因此 id = $pageid 在这里工作:

<?php
        $dol = "$";
        $pageid = (int)$_GET['id']; 
        mysql_connect('localhost', 'lbriedis_admin', 'xxxxxx123');
        mysql_select_db('lbriedis_product');
    $result = mysql_query("SELECT * FROM products WHERE id = ".$pageid."");
    if($result){
  $data = mysql_fetch_assoc($result);
}


    ?>

<form id="inputForm" method="post" action="edit.php">


    <fieldset>

   <label>Pool name:</label>
 <?php
   echo '<input type="text" name="product_name" value="'.$data['pool_name'].'" />';
     ?> 

    <label>Price:</label> <br>
     <?php
   echo '$&nbsp;<input type="text" name="price" value="'.$data['price'].'" />';
    ?>  <br />
    <label>Description:</label>
      <?php
   echo '<textarea name="description">'.$data['description'].'</textarea>';
    ?>

 <label>Image:</label></label>
  <?php
   echo '<input type="text" name="image" value="'.$data['image'].'" />';
    ?>  
    <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>" />
     <input type="text" id="hp" name="hp" />
     <?php
   echo '$&nbsp;<input type="hidden" name="$pageid" value="'.$pageid.'" />';
    ?>  

    <br>
    <input type="submit" name="submit" value="Update" />

    </fieldset>
</form>

【问题讨论】:

    标签: php mysql database session


    【解决方案1】:

    您的update 查询有不正确的sintax

        $query = "UPDATE products WHERE id = ".$pageid." (
                product_name, price, description, image
            ) VALUES (
                '{$data['product_name']}',
                '{$data['price']}',
                '{$data['description']}',
                '{$data['image']}'
            )
    

    正确的语法应该是

        $query="UPDATE products SET
                product_name = '".$data['product_name']."', 
                price ='".$data['price']."',
                description = '".$data['description']."',
                image = '".$data['image']."'
                WHERE id = '".$pageid."'
    

    【讨论】:

    • 你从哪里得到 $pageid?
    • 你在问我吗?它在原始脚本中$pageid = (int)$_GET['id'];
    【解决方案2】:

    改变这个

    name="$pageid"
    

    name="pageid"
    

    并像这样访问它

    $data = array_map('mysql_real_escape_string', $_POST);
    $query = "UPDATE products WHERE id = {$data['pageid']} (
    

    问题是在edit.php 中无法访问$pageid。并且您已将 $pageid 分配给 name 属性,每个产品都会有所不同。

    把查询改成这个

    $query="UPDATE products SET
            product_name = '{$data['product_name']}', 
            price ='{$data['price']}',
            description = '{$data['description']}',
            image = '{$data['image']}'
            WHERE id = '{$data['pageid']}'
    

    【讨论】:

    • 干杯。 id 通过了,但更新仍然无法正常工作:存储您的数据时出错,请稍后再试。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'WHERE id = 21 (product_name, price, description, image) VALUES ('test' at line 1 附近使用正确的语法
    • @LukeBriedis 检查查询并让我知道是否有任何错误...:)
    • 干杯,工作。关于如何解决 session_start 问题的任何想法(因为我在 admin.php 上有添加表单,并单击 edit.php?id= 链接似乎正在使用它进行第一次会话,所以现在我无法获得与我的编辑页面进行的会话:(
    • 在每一页的顶部写上session_start();。它会解决你的问题。
    • 干杯。我没有意识到我不仅仅是在开始一个会话,我还在无缘无故地制作一个新的令牌。哈哈:(
    【解决方案3】:

    将您的更新查询替换为以下内容:-

    $query = "UPDATE products 
      set product_name=$data['product_name'],
          price = $data['price'],
          description = $data['description'] ,
          image = $data['image']
          where id =". $pageid ;
    

    【讨论】:

      猜你喜欢
      • 2019-04-06
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多