您好这一切都是我的帖子所以感谢所有帮助学习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;
}
}
}
答案 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 );
}