【问题标题】:HTML/PHP Form Not Working On Live ServerHTML/PHP 表单在 Live Server 上不起作用
【发布时间】:2015-01-12 17:25:56
【问题描述】:

我的表单中有此代码:

<form id="addForm" action="php/add-article.php" method="POST" enctype="multipart/form-data">
            <table>
                <tr>    
                    <td class="tableLeft">Article Photo:</td>
                    <td class="tableRight"><input id="formPhoto" class="addTextInput" name="photo" type="file" /></td>
                    <td id="validatePhoto"></td>
                </tr>
                <tr>    
                    <td class="tableLeft">Article Photo Alt:</td>
                    <td class="tableRight"><input id="formAlt" class="addTextInput" name="alt" type="text" /></td>
                    <td id="validateAlt"></td>
                </tr>
                <tr>    
                    <td class="tableLeft">Article Title:</td>
                    <td class="tableRight"><input id="formTitle" class="addTextInput" name="title" type="text" /></td>
                    <td id="validateTitle"></td>
                </tr>
                <tr>
                    <td class="tableLeft">Article Body:</td>
                    <td class="tableRight"><textarea id="formArticle" class="addTextInput" rows="6" name="article"></textarea></td>
                    <td id="validateArticle"></td>
                </tr>
                <tr>
                    <td class="tableLeft"></td>
                    <td id="validateSending" class="tableRight"></td>
                </tr>
                <tr>
                    <td class="tableLeft"></td>
                    <td class="tableRight"><input id="formSubmit" class="addSubmitInput" type="submit" value="Add This" /></td>
                </tr>
            </table>
        </form>

这在一个 php 文件 (add-article.php) 中:

<?php
$time = time();
$id= time().''.mt_rand(1000, 9999);
$year = date("Y");
$path = "../images/$year/";

$title = ucwords($_POST['title']);
$article = $_POST['article'];
$alt = $_POST['alt'];

$extension = end(explode(".", $_FILES["photo"]["name"]));

$added = date("Y-m-d H:i:s");
$views = "0";
?>
<?php
$insert_post_sql = "INSERT INTO articles (id, photo, alt, title, article, added, views) VALUES('$id', '.$extension', '$alt', '$title', '$article', '$added', '$views')";
$insert_post_res = mysqli_query($con, $insert_post_sql);
if(mysqli_affected_rows($con)>0){
move_uploaded_file($_FILES["photo"]["tmp_name"],"$path" . $id . "." . $extension);
header("Location: ../article.php?id=$id");
exit();
}
else{
echo "0";
};
?>

当我在我的本地主机上运行它时,一切正常,但当我在我的实时站点上运行它时,它会回显 0 并说照片、alt、标题和文章是未定义的。

有谁知道这可能是什么原因?

【问题讨论】:

  • DB 或 PHP 变量中未定义的值是什么意思?
  • 在服务器错误日志中显示:PHP Notice: Undefined index: title in ...
  • 您需要检查表单是否提交?本地服务器会忽略这种错误,但实时服务器不会。为您的按钮命名并检查按钮是否 isset 。如果您需要详细信息,请告诉我。
  • 在第一行写入 print_r( $_POST ) 以查看发布的数据。并且在使用前最好检查 isset() 是否存在数组中的变量或索引。
  • @WisdmLabs 谢谢,但那不会打印任何东西 - 你觉得表格还好吗?意思是它看起来像一个应该正常工作的表格吗?我在同一服务器上的另一个网站上使用完全相同的表单和 PHP 脚本,并且该脚本完全可以正常工作

标签: php forms file-upload


【解决方案1】:

主要原因应该是move_uploaded_file在生产服务器上指定路径写入权限。

【讨论】:

  • move_uploaded_file 仅在行受到影响并且没有任何内容添加到数据库后才会发生,这不是原因
  • 是的,你是对的,也检查一下:stackoverflow.com/a/16054754/2289750 如果我有任何帮助,因为似乎 _POST vars 没有到达你的 add-article.php。尝试使用 _GET 先看看它是否有效
  • 嗯,我在另一个网站上使用了几乎完全相同的脚本,托管在同一台服务器上,并且可以很好地上传表单数据,所以我认为_POST 不是错误
【解决方案2】:

问题出在您的 sql 语句...它无法在表头上找到照片、alt 等...这就是它返回 0 条记录的原因,因此,根据您的程序要求回显 0...。

【讨论】:

  • 是的,我知道,但为什么找不到它们?它们已通过表单正确发布 - 这适用于我的本地主机,但在我上传时不适用于服务器
  • 好吧,在你将它们插入数据库之前,尝试使用 mysql_real_escape_string 或添加斜杠来转义从表单接收到的数据
  • 并表明您已经选择了连接后查询的数据库
【解决方案3】:

我编辑了您表单的最后一个&lt;tr&gt;

<tr>
   <td class="tableLeft"></td>
   <td class="tableRight"><button id="formSubmit" class="addSubmitInput" type="submit" name="submit">Add This </button></td>
</tr>

现在试试下面的 PHP 代码:

<?php
$time = time();
$id = time() . '' . mt_rand(1000, 9999);
$year = date("Y");
$path = "../images/$year/";

if (isset($_POST['submit'])) {
    $title = ucwords($_POST['title']);
    $article = $_POST['article'];
    $alt = $_POST['alt'];

    $extension = end(explode(".", $_FILES["photo"]["name"]));

    $added = date("Y-m-d H:i:s");
    $views = "0";

    $insert_post_sql = "INSERT INTO articles (id, photo, alt, title, article, added, views) VALUES('$id', '.$extension', '$alt', '$title', '$article', '$added', '$views')";
    $insert_post_res = mysqli_query($con, $insert_post_sql);
    if (mysqli_affected_rows($con) > 0) {
        move_uploaded_file($_FILES["photo"]["tmp_name"], "$path" . $id . "." . $extension);
        header("Location: ../article.php?id=$id");
        exit();
    } else {
        echo "0";
    };
}
?>

让我知道它现在是否适合您。问候。

【讨论】:

  • 现在表单在发帖时卡住了,没有转到post-article.php
  • 你是用javascript还是jquery提交表单??
  • 我正在使用 JQuery 来检查表单内容而不是发布
  • 你可以忽略我在上一个 中所做的编辑并重试吗?
  • 是的,我这样做了,但还是不会发布到数据库中
猜你喜欢
相关资源
最近更新 更多
热门标签