PHP bug - IF语句使插入运行两次

时间:2017-02-28 19:46:55

标签: php mysql mysqli

您好这一切都是我的帖子所以感谢所有帮助学习PHP和SQL

我有3页,但我认为您需要的唯一页面是 Page 2 ,这就是问题所在,但如果我错了,我会添加所有3页

Page 1 html表单

<form method="POST" action="profile_image_getdata.php" enctype="multipart/form-data">
 <input type="file" name="myimage">
 <input type="submit" name="submit_image" value="Upload">
</form>

Page 2 profile_image_getdata.php(严重名称)

 <?php
session_start();
require_once( "db/db_connection.php" );
require_once( "functions/page_control_func.php" );
require_once( "error/error_set.php" );

if ( $_SERVER[ 'REQUEST_METHOD' ] === 'POST' ) {
    $S_id = $_SESSION[ "id" ];

    $imagename = $_FILES[ "myimage" ][ "name" ];

    //Get the content of the image and then add slashes to it 
    $imagetmp = addslashes( file_get_contents( $_FILES[ 'myimage' ][ 'tmp_name' ] ) );

    //Insert the image name and image content in image_table
    $sql_i = "INSERT INTO image_table_test (`image_ID`, `id`, `name`, `image`) VALUES (NULL, '$S_id', '$imagename', '$imagetmp');";

    /*mysqli_query($insert_image);*/
    $result_i = mysqli_query( $conn, $sql_i );

    if ( mysqli_query( $conn, $sql_i ) ) { //  <----This was my bug
    //if ( $result_i ) { // <----this is my fix
        redirect_to( "profile_image_fetch_image.php?id=$S_id" );
    } else {
        echo "Error: " . $sql_i . "<br>" . mysqli_error( $conn );
    }
} 

我的问题: 在上面如果复制将插入数据库2次。我有2行代码,一行是bug,另一行是修复。但我想了解为什么这行代码:

//if ( mysqli_query( $conn, $sql_i ) ) { //  <----This was my bug

会使我的代码循环,运行两次或插入数据库2次。 修复是替换那行代码使用变量so:

if ( $result_i ) { // <----this is my fix

我花了一段时间才找到,因为我正在寻找不止一次运行的东西,而不是IF语句。

如果答案是&#34;我不知道它是一个错误。&#34;我完全理解,但如果有答案,我想了解任何IF语句如何使某些内容运行多次?我认为IF语句将使用代码,如果它是TRUE,而不是如果它是FALSE。不运行循环。

所以你在这里有完整的图片是最后一页

Page 3 profile_image_fetch_image.php

<?php
header("content-type:image/jpeg");
session_start();
require_once("db/db_connection.php");

if ( $_SERVER[ 'REQUEST_METHOD' ] === 'GET' ) {
    $G_id = $_GET[ 'id' ];

    $sql_S = "SELECT * FROM image_table_test WHERE ID = $G_id;";
    $result_S = mysqli_query( $conn, $sql_S );
    if ( mysqli_num_rows( $result_S ) > 0 ) {
        while ( $row = mysqli_fetch_assoc( $result_S ) ) {
            $image_name = $row[ "name" ];
            $image_content = $row[ "image" ];
            echo $image_content;

        }
    }
}

2 个答案:

答案 0 :(得分:2)

您已将该函数调用两次,因此插入运行两次是正常的。

第一次执行插入时位于$result_i = mysqli_query( $conn, $sql_i );,并将该插入的结果存储到变量$ result_i中。

现在不再检查该插入的结果(存储在$ result_i中),而是再次运行插入并在if ( $result_i ) {检查结果。

您会看到,不是检查第一个插入的结果,而是检查第二个插入的结果。

答案 1 :(得分:0)

您的代码中没有循环。您只需执行两次GC_malloc_explicitly_typed()查询:

INSERT

所以,确实解决方案可以是:

// query executed first time, record added
$result_i = mysqli_query( $conn, $sql_i );   

// query executed second time, record added again
if ( mysqli_query( $conn, $sql_i ) ) { //  <----This was my bug

或者:

// query executed first time, record added
$result_i = mysqli_query( $conn, $sql_i );

// NO second query here
if ( $result_i ) {
    redirect_to( "profile_image_fetch_image.php?id=$S_id" );
} else {
    echo "Error: " . $sql_i . "<br>" . mysqli_error( $conn );
}