$ _POST不回显查询

时间:2016-02-26 17:30:40

标签: php html mysql forms submit

该页面基本上是一种向数据库中的products表添加新产品的表单。表单也必须包含图片上传。该函数应该在将任何数据插入数据库之前回显查询。但是,每次按下提交按钮时,它都不会显示查询,并且表单只会自行重置。我尝试了不同的解决方案,但他们没有工作。我将表单操作更改为新的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;
    }

    }



    ?>

2 个答案:

答案 0 :(得分:3)

编辑:再次检查代码并使用更精确的牙齿之后,又注意到了一些错误。请参阅下面的修改

首先,在这里输入一个拼写错误,from而不是form

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

应该读作:

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

然后,您的<form name="submit">和提交按钮<input type="submit" name="submit"都具有submit的相同名称属性。

  • name="submit"移除<form>发生冲突。

在条件语句中添加else{ echo "Something went wrong..."; }后,就会从get go开始进入。

错误报告也会帮助你。

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

  • 不同的MySQL API不会混用。
  

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

您的条件声明:

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

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

如果该文件“未设置/为空”,您可能希望在此处使用||(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 stickler:

<!DOCTYPE>不是正确的doctype声明,应该被视为<!DOCTYPE html>作为HTML5支持的最低限度方法。

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

<强>脚注:

您目前的代码向SQL injection开放。使用mysqli_* with prepared statementsPDOprepared statements

编辑:

进一步查看您的代码:

<textarea name="Pro_desc"$_POST['pro_desc']。注意name属性中的大写P

那些POST数组又区分大小写;错误报告会让你感到有些担忧,undefined index pro_desc

它应该是:

  • $_POST['Pro_desc']

专业提示:在整个代码中使用相同的letter-case约定。您可以快速迷失使用混合大小写变量,它们区分大小写。我的偏好一直是使用变量,数组等所有小写字母。

  • 小心。

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

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

Rerences:

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

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

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

答案 1 :(得分:0)

首先在表单代码中创建空格:

<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;