【问题标题】:$_POST does not echo a query$_POST 不回显查询
【发布时间】:2016-06-10 01:05:03
【问题描述】:

该页面基本上是一种用于将新产品添加到数据库中的产品表中的表单。表格还必须包括图片上传。该函数应该在将任何数据插入数据库之前回显查询。但是,每次我按下提交按钮时,它都不会显示查询,并且表单只会自行重置。我尝试了不同的解决方案,但它们不起作用。我将表单操作更改为新的 php 页面,但仍然无法正常工作。我还尝试使用两种不同的浏览器,并尝试显示错误代码。代码中有什么乱七八糟的地方吗?

 <!DOCTYPE>
        <?php
        include("../includes/db.php");

        ?>
        <html>
        <head>
        <title>Insert a Product</title>
        <script src="//tinymce.cachefly.net/4.3/tinymce.min.js"></script>
        <script>tinymce.init({selector:'textarea'});</script>
        </head>
        <body>

        <form name="submit" action="insert_product.php"method="POST"enctype="multipart/from-data">

    <table align="center" width="800">


    <tr align="center">
    <td colspan="8"><h4>Insert New Post Here</h4></td>
    </tr>


    <tr>
    <td align="right"><b>Product Title:</b></td>
    <td><input type="text" name="pro_name" /></td>
    </tr>



    <tr>
    <td align="right"><b>Product Price:</b></td>
    <td><input type="text" name="price"/></td>
    </tr>

    <tr>

    <td align="right"><b>Product Image:</b></td>
    <td><input type="FILE" name="product_image" id="product_image"/></td>
    </tr>

    <tr>
    <td align="right"><b>Product Color:</b></td>
    <td><input type="text" name="Color"/></td>
    </tr>

    <tr>
    <td align="right"><b>Product Location:</b></td>
    <td>
    <select name="location">
    <option>Select a Location</option>
    <?php

    $get_location = "select * from location";

    $run_location = mysqli_query($conn, $get_location);

    while ($row_location=mysqli_fetch_array($run_location)){
    $Loc_name = $row_location['Loc_name'];
    $location_id = $row_location['location_id'];
    echo "<option value='$location_id'>$Loc_name</option>";

    }
    ?>

    </select>
    </td>
    </tr>

    <tr>
    <td align="right"><b>Product Supplier:</b></td>
    <td><input type="text" name="pro_supplier"/></td>
    </tr>

    <tr>
    <td align="right"><b>Product Cost:</b></td>
    <td><input type="text" name="cost"/></td>
    </tr>

    <tr>
    <td align="right"><b>Product Keywords:</b></td>
    <td><input type="text" name="pro_keywords"/></td>
    </tr>
    <tr>
    <td align="right"><b>Product Description:</b></td>
    <td><textarea name="Pro_desc" cols="20" rows="10"/></textarea></td>
    </tr>




    <tr align="center">

    <td colspan="7"><input type="submit" name="submit" value="Insert Product Now"/></td>
    </tr>

    </form>


    </body>





    </html>

    <?php






    if (isset($_POST['submit']) && isset($_FILES['product_image'])){


    $pro_name = $_POST['pro_name'];
    $price = $_POST['price'];
    $Color = $_POST['Color'];
    $cost = $_POST['cost'];
    $pro_desc = $_POST['pro_desc'];
    $pro_keywords = $_POST['pro_keywords'];

    $product_image = $_FILES['product_image']['name'];
    $product_imgtmp = addslashes (file_get_contents($_FILES['product_image']['tmp_name']));



    echo $insert_product =
    "insert into products
    (pro_name, price, Color, cost, Pro_desc, pro_keywords, product_image)
    VALUES
    ('$pro_name','$price','$Color','$cost','$pro_desc','$pro_keywords','$product_image')";


    if ($conn->query($insert_product) === TRUE) {
    echo "New record created successfully";
    } else {
    echo "Error: " . $insert_product . "<br>" . $conn->error;
    }

    }



    ?>

【问题讨论】:

  • action="insert_product.php"method="POST"enctype="multipart/from 需要空间我的朋友空间
  • 您正在回显赋值操作的结果,因此您将看到的只是true。要查看您的查询,请将 sql 分配给 $insert_product,然后分配给 echo $insert_product
  • 另外,查看准备好的语句并绑定占位符,您的代码容易受到 SQL 注入的影响
  • 这是一个该死的错字 from-data 应该读作enctype="multipart/form-data - 表单表单而不是from 并且错误报告会给你一些关于它的东西。 php.net/manual/en/function.error-reporting.php 未定义的索引 blah blah blah
  • 为您的 if (isset($_POST['submit']) &amp;&amp; isset($_FILES['product_image'])){...} 添加了 else { echo "it broke..."; } 会显示“它坏了”。

标签: php html mysql forms submit


【解决方案1】:

第一次在表单代码处创建空格:

<form name="submit" action="insert_product.php" method="POST" enctype="multipart/from-data">

然后在您的 PHP 代码上不要回显该操作,即

改变这个

 echo $insert_product =
    "insert into products
    (pro_name, price, Color, cost, Pro_desc, pro_keywords, product_image)
    VALUES
    ('$pro_name','$price','$Color','$cost','$pro_desc','$pro_keywords','$product_image')";

到此

$insert_product =
        "insert into products
        (pro_name, price, Color, cost, Pro_desc, pro_keywords, product_image)
        VALUES
        ('$pro_name','$price','$Color','$cost','$pro_desc','$pro_keywords','$product_image')";
echo $insert_product;

【讨论】:

  • 他在尝试调试 SQL 语句时仍会想回应这一​​点
  • 我现在添加了回声@RobGudgeon
【解决方案2】:

编辑:在再次查看代码并使用更细的齿梳后,发现了更多错误。请参阅我的编辑:也在下方。

首先,这里有一个错字,是from 而不是form

enctype="multipart/from-data"
                   ^^^^

应该是这样的:

enctype="multipart/form-data"
                   ^^^^

那么您的&lt;form name="submit"&gt; 和提交按钮&lt;input type="submit" name="submit" 都具有submit 的相同名称属性。

  • &lt;form&gt; 中删除name="submit"这是一个冲突。

在您的条件语句中添加else{ echo "Something went wrong..."; } 从一开始就会陷入其中。

错误报告也可以帮助您。

现在,我们不知道db.php 中的任何内容。由于您使用 MySQLi API 进行查询,因此它的连接必须是相同的,mysqli_ 而不是 mysql_ 或 PDO,如果是这样的话。

  • 不同的 MySQL API 不会混合使用。

“但是,每次我按下提交按钮时,它都不会显示查询”

你的条件语句:

if (isset($_POST['submit']) 
 && isset($_FILES['product_image']))

正在检查是否同时按下了提交AND-&amp;&amp; 文件已设置。

如果该文件曾经“未设置/为空”,您可能希望在此处使用 || (OR)。

对于用户提供的输入,最好使用条件!empty()

  • 因此,请确保满足这两个条件。

可以改为:

if ( isset($_POST['submit']) ){

    // do something in here

 if( !empty($_FILES['product_image']) ){

    // do something else in here
 }
 else{
    // you can do stuff here too for an empty file condition
    }

 }

HTML 贴纸:

&lt;!DOCTYPE&gt; 不是正确的 doctype 声明,应将 &lt;!DOCTYPE html&gt; 作为 HTML5 支持的最低方法。

否则,请参阅以下所有有效类型:


脚注:

您当前的代码对SQL injection 开放。使用mysqli_* with prepared statements,或PDOprepared statements


编辑:

进一步查看您的代码:

&lt;textarea name="Pro_desc"$_POST['pro_desc']。注意名称属性中的大写P 吗?

这些 POST 数组再次区分大小写;错误报告会给你一些关于它的东西,undefined index pro_desc

它应该读作:

  • $_POST['Pro_desc']

专业提示:在整个代码中使用相同的字母大小写约定。您很快就会迷失在使用混合大小写变量中,而且它们区分大小写。我的偏好一直是对变量、数组等使用全部小写字母。

  • 请小心。

另外,如果您尝试将上传的文件作为二进制文件插入数据库中,则需要使用 mysqli_real_escape_string() 转义该数据,并将您的列设置为 BLOB 或 LONGBLOB,具体取决于文件的大小。

还要确保没有文件上传限制大小限制。

参考:


error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:显示错误应该只在暂存阶段完成,而不是在生产阶段。

【讨论】:

  • 我在这里尽我所能。其余的掌握在 OP 手中。
  • 我怎么知道这是@Fred 在看了第一行之后的回答?
  • @HankyPanky 你知道我的风格 ;-)
猜你喜欢
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
相关资源
最近更新 更多