我的PHP代码可以正常工作,但是当我通过instagram或facebook上的链接打开它时,写着,该列“name”不能为空

My PHP code is working correcly but when I open it via link on instagram or facebook, there is written, that column 'name' cannot be null

提问人:Diana Viťazková 提问时间:1/2/2023 最后编辑:Diana Viťazková 更新时间:4/4/2023 访问量:51

问:

该代码在 Web 和移动设备上都可正常工作。问题开始了:如果它通过 instagram 或 facebook 社交页面作为链接打开。

<?php
header("Content-type: text/html; charset=utf-8"); 
$title = "xxxxxx";
require("header.php");



$conn = new PDO('xxxxxxxxxxxxx');
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = $conn->prepare('SELECT COUNT(*) AS `total` FROM sutaz_tabulka WHERE meno = :meno');
$meno = $_POST['meno'];
$sql->execute(array(':meno' => $meno));
$result = $sql->fetchObject();

if ($result->total > 0) 
{
    echo '<div class="dakujem" style="text-align: center; font-size: 30px; margin-top: 200px; padding: 50px 5px; color: white; background-color: rgb(220, 20, 60);">Nedávno ste sa už zapojili do našej súťaže!</div>';     
}
else
{
    $stmt = $conn->prepare("INSERT INTO sutaz_tabulka (meno) VALUES(:meno)");
    $stmt->bindValue(':meno', $meno);
    $stmt->execute(array(':meno' => $meno));
}
?>

我在下面附上错误消息:

致命错误:未捕获的异常“PDOException”,并显示消息“SQLSTATE[23000]:完整性约束冲突:1048 列”meno“不能为空,在 /data/5/8/582bf4f8-549d-48a3-833c-52986c8a8ca5/zapojsavyhraj 中出现消息”SQLSTATE[23000]:完整性约束冲突:1048 列“meno”不能为空 sk/web/post-comment.php:30 堆栈跟踪:#0 /data/5/8/582bf4f8-549d-48a3-833c-52986c8a8ca5/zapojsavyhraj.sk/web/post-comment.php(30):PDOStatement->execute(Array) #1 {main} 扔在 /data/5/8/582bf4f8-549d-48a3-833c-52986c8a8ca5/zapojsavyhraj.sk/web/post-comment 中.php上线 30

php pdo null

评论


答:

0赞 NOMAD 1/2/2023 #1

当您打开此页面时,链接必须为 null,如果通过 AJAX 调用此脚本,则该链接可能包含数据$_POST['meno'];

因此,如果要将此页面作为链接打开,则必须添加条件if isset($_POST['meno']) or if !empty($_POST['meno']):

<?php
    header("Content-type: text/html; charset=utf-8"); 
    $title = "Zapoj sa a vyhraj";
    require("header.php");

    //this condition verifies that POST memo exists
    if (isset($_POST['meno']))
    {
    $conn = new PDO('xxxxxxxxxxxxx');
    $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = $conn->prepare('SELECT COUNT(*) AS `total` FROM sutaz_tabulka WHERE meno = :meno');
    $meno = $_POST['meno'];
    $sql->execute(array(':meno' => $meno));
    $result = $sql->fetchObject();

    if ($result->total > 0) 
    {
        echo '<div class="dakujem" style="text-align: center; font-size: 30px; margin-top: 200px; padding: 50px 5px; color: white; background-color: rgb(220, 20, 60);">Nedávno ste sa už zapojili do našej súťaže!</div>';     
    }
    else
    {
        $stmt = $conn->prepare("INSERT INTO sutaz_tabulka (meno) VALUES(:meno)");
        $stmt->bindValue(':meno', $meno);
        $stmt->execute(array(':meno' => $meno));
    }
    }
    ?>

评论

0赞 Diana Viťazková 1/2/2023
我按照你写的做了,但也没有用。它不起作用,因为当我从手机提交作为链接打开的表单时,“名称”值为 NULL。另一方面,通过网络它可以正常工作。
0赞 NOMAD 1/2/2023
@DianaViťazková是相同的错误消息?
0赞 NOMAD 1/2/2023
是的,这是正常的,因为 if 会阻止 SQL 查询,如果 POST['meno'] 为 null 则阻止成功消息以避免错误。当您正确发送表单时,情况并非如此,因为 POST['meno'] 将具有您在表单输入中输入的值,但如果您直接转到页面,则不会,因为 POST['meno'] 为 null,因为它没有数据。在这种情况下,您可以在 if isset 之外输出成功回显,以便无论如何都显示消息,或者添加回显说请填写表单
0赞 Diana Viťazková 1/2/2023
但是为什么我必须回声说“填写表格”,而我的输入不允许您在不填写表格的情况下提交表格。所以我必须放一些东西,尽管它没有在输出上显示任何内容。(但我仍然在谈论通过此页面上的链接通过移动设备打开网站,而不是直接打开。因为直接网站正在工作)。我不知道你是否理解我。