我是PHP的新手。现在我有文件上传的问题。 所有文件都被移动,但它没有将文件的名称存储到数据库中。 并没有显示错误。我不知道要解决这个问题。请帮帮我。
<form method="post" action="index.php?insert_ads" enctype="multipart/form-data">
<input type="file" name="b1" id="b1"/>
<b>Link</b></br>
<input type="text" id="b1l" name="b1l" class="form-control"/></br>
<b>Home Small</b> <b style="color: blue;">100 x 100 px</b></br>
<input type="userfile" name="b2" id="b2"/><br>
<b>Link</b></br>
<input type="text" id="b2l" name="b2l" class="form-control"/></br>
<input type="submit" name="submit" value="Publish"/>
</form></br>
<?php
if(isset($_POST['submit'])){
$b1 = $_FILES['b1']['name'];
$tmp1 = $_FILES['b1']['tmp_name'];
$b1l = $_POST['b1l'];
$b2 = $_FILES['b2']['name'];
$tmp2 = $_FILES['b2']['tmp_name'];
$b2l = $_POST['b2l'];
move_uploaded_file($tmp1,"ads/$b1");
move_uploaded_file($tmp2,"ads/$b2");
$insert_posts = "insert into ads (b1,b2) value ('$b1','$b2')";
$run_posts = mysql_query($insert_posts);
}
?>
答案 0 :(得分:0)
尽管使用mysql_query
或注入攻击存在任何问题,但仍有许多问题可能会出错。
一个选项是查询正在执行,但您尚未正确分配$b1
和$b2
个变量。如果将行添加到数据库,但行是空的(例如,SELECT b1, b2 FROM db.ads
“返回'',''
行),则会出现这种情况;在这种情况下,您可能只是没有提取来自$ _FILES变量的name
属性正确。您可以运行var_dump($_FILES);
以查看有关它的更多信息,并找出需要获取的内容。
另一种可能性是查询未执行。同样,这可能有几个原因 - 可能(不知何故)它没有达到代码中的那一点。您可以这样测试:
$insert_posts = "insert into ads (b1,b2) value ('$b1','$b2')";
echo $insert_posts; // if this shows up, you're running the next line also
$run_posts = mysql_query($insert_posts);
另一个选择是您的error reporting级别没有捕获错误。可能的原因是您没有连接到数据库 - 根据mysql_query文档......
如果未找到或建立连接,则会生成E_WARNING级别错误。
E_WARNING级别错误将允许程序继续执行,除非您已将程序配置为表现不同。
最后,您可能会遇到语法错误(事实上您似乎也是这样 - VALUES
,而不是VALUE
);根据文档,mysql_query
在出错时返回false
- 它不会引发错误。
您可以通过测试false并使用mysql_error
函数来获取错误来实现此目的:
$run_posts = mysql_query($insert_posts);
if ($run_posts === false) {
trigger_error("Error in SQL!\n" + mysql_error(), E_USER_ERROR);
}