【问题标题】:Issue with PHP in Safari but not in ChromeSafari 中的 PHP 问题,但 Chrome 中的问题
【发布时间】:2016-03-05 22:19:17
【问题描述】:

我早些时候在这篇帖子here 中收到了答案和解决方案,因此(几乎)完成了我的学校任务。

然而,在选择浏览器时,我发现了另一个问题。

当我在 Safari 中查看 overview.php 时,它看起来像这样:

正如您在图片中看到的那样,每当我使用 Safari 进行输入时,前五行中的所有信息都会显示为空格,但下一行(在底部)包含所有正确的信息。

当我使用谷歌浏览器时,我一点问题都没有,你可以在这里看到:

所以我的问题是,我的代码的哪一部分让 Safari 执行空条目?

我的代码:

index.html - 我的标准 HTML 表单所在的页面。

<!DOCTYPE html>
<html lang="da">

<html>
  <head>

    <title>Mobiloversigten</title>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="stylesheet.css">

  </head>

<body>

    <form name="formular" id="formular" method="post" action="process.php" enctype="multipart/form-data" autocomplete="on">

        <fieldset>

            <legend>Enhedsoplysninger</legend>
            <div><label>Producent: <input type="text" name="manufactor" id="manufactor" required="required" size="30"></label></div>
            <div><label>Produktnavn: <input type="text" name="product" id="product" required="required" size="30"></label></div>
            <div><label>Farve: <input type="text" name="color" id="color" required="required" size="30"></label></div>
            <label>Hukommelse:
                <div>    
                    <select size="1" name="memory" id="memory">
                        <option>8GB</option>
                        <option>16GB</option>
                        <option>32GB</option>
                        <option>64GB</option>
                        <option>128GB</option>
                    </select>
                </div>
            </label>
            <div><label>Skærmstørrelse <input type="number" name="displaysize" id="displaysize" min="0" step="0.1" size="30"></label></div>   
            <div><label>Produktbillede: <input type="file" name="productphoto" id="productphoto" required="required" size="30"></label></div>

        </fieldset>

        <div><input type="submit" id="ok" value="Indsend"><input type="reset" id="nulstil" value="Nulstil"></div>

    </form>

</body>

</html>

process.php - 正在保存 index.html 中的条目的页面。

<!DOCTYPE html>
<html lang="da">

<html>
<head>

  <title>Mobiloversigten</title>
  <meta charset="UTF-8">
  <link rel="stylesheet" href="stylesheet.css">

</head>

<body>

<div class= "logo">

    <img src="Mobilsiden.png" alt="Mobilsiden Logo" style="width:20%;height:20%;">

</div>

    <div class="boks">

        <h1>Enheden er registreret</h1>

    <div class="linie"></div><br>

        <div class="centerbuttons">
            <a href="index.html" class="myButton">Tilføj ny enhed</a>
            <a href="overview.php" class="myButton">Vis enheder</a>
        </div>

<?php

$manufactor = $_POST['manufactor'];
$product = $_POST['product'];
$color = $_POST['color'];
$memory = $_POST['memory'];
$displaysize = $_POST['displaysize'];
$productphoto = $_FILES['productphoto']['name'];


if($_FILES){
        if(strlen($_FILES['productphoto']['type'])==9)
        $name=$product . ".".$rest = substr($_FILES['productphoto']['type'], -3);
        else
        $name=$product . ".".$rest = substr($_FILES['productphoto']['type'], -4);

        move_uploaded_file($_FILES['productphoto']['tmp_name'], $name);

        }

$user_data = "$manufactor, $product, $color, $memory, $displaysize, $name \r\n";
$mobile_data = "Producent: ,Produktnavn: ,Farve: ,Hukommelse: ,Skærmstørrelse: ";

$fh = fopen("data.txt", "a")   or die("Filen kunne ikke oprettes");
fwrite($fh, $user_data)         or die("Kunne ikke skrive til filen");
fclose($fh);

$fj = fopen("mobile.txt", "w")  or die("Filen kunne ikke oprettes");
fwrite($fj, $mobile_data)       or die("Kunne ikke skrive til filen");
fclose($fj);

?>

</div>

</body>

</html>

overview.php - 显示之前保存的文本文件中的条目的页面。

<!DOCTYPE html>
<html lang="da">

<html>

<head>

    <title>Mobiloversigt</title>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="stylesheet.css">

</head>

<body>

    <div class= "logo">

        <img src="Mobilsiden.png" alt="Mobilsiden Logo" style="width:20%;height:20%;">

    </div>

    <div class="boks">

    <h1>Tilføjede enheder</h1>

    <div class="linie"></div><br>

    <?php

    $info = explode(",", file_get_contents("mobile.txt"));
    $retrieved_string = file_get_contents("data.txt");

    $retrieved_array = explode("\n", $retrieved_string);

    $count=count($retrieved_array)-1;

    for($y = 0; $y < $count; $y++){
    $user_data_array = explode(",",$retrieved_array[$y]);
    for($x = 0; $x <= 4; $x++){
        echo "<p>$info[$x]</p><p2>$user_data_array[$x]</p2><br>";
}       echo "<img src=\"$user_data_array[5]\"><br><br>";
        echo "<div><span class=\"linie\"></span></div><br><br>";
}


?>        

    </div>
</body>
</html>  

我知道这是一篇很长的帖子,但我只是想确保可能的解决方案制造商对我的代码有完整的概述。我希望这不是问题。

由于我是 PHP 新手,如果可能的话,我希望得到一个更易于理解的答案:-)

提前致谢!

【问题讨论】:

  • 这不是 php 问题,因为 php 执行后端并且不受浏览器选择的影响 - 它只是根据收到的请求提供输出。所以你的问题是html/css。您是否使用开发者工具检查过浏览器中的元素?
  • 感谢您的评论@Tristan。不,我还没有真正做到这一点,因为我还没有完全进入 Safari 的那部分。然而。我可以看到,当我使用 Safari 时,它会将空格添加到我的 data.txt 中,因此我的 overview.php 会从该文件中提取空格。
  • 而且更奇怪的是它不会一直发生?当我现在测试它时,我没有收到错误,所以我现在真的很茫然。
  • 如果您发现用户发布的数据会影响显示,那么您需要采取措施对发布的数据进行处理或验证,以确保其适用。例如,您可以在将用户在表单中输入的数据中删除 html 标签、去除空格等,然后再将其插入到文本文件中。
  • 嗯,那么您究竟会建议@Tristan 什么呢?我仍然很困惑为什么我首先会得到这些空白,因为我不会在没有完全填写表格的情况下进行任何提交。Safari 只是简单地自行创建它们 - 我有一些朋友用他们的自己的代码应该或多或少与我的相同,他们遇到同样的问题。我在 Imgur 上发布了我的 data.txt 文件的屏幕截图:i.imgur.com/5ZWMfE4.jpg

标签: php html google-chrome safari


【解决方案1】:

在不先处理数据的情况下将用户提交的数据存储在文本文件中存在一些问题。例如,如果用户输入逗号,,那么在您检索数据时会破坏explode(),或者如果用户输入换行符也会导致问题。

您可以使用一个函数来清除用户提交的任何您认为不受欢迎的字符的数据。

function cleanStr($str) {
    // remove extra whitespace
    $str = preg_replace('/[ \t]+/', ' ', $str);
    // remove linebreaks
    $str = preg_replace( "/\r|\n/", "", $str );
    // remove html tags
    $str = strip_tags($str);
    return $str;
}

使用示例:

$manufactor = cleanStr($_POST['manufactor']);

如果您将文本文件中的数据以 json 格式存储,它将对用户输入更加稳健,因为文本中的逗号不会破坏它。

$user_data = array($manufactor, $product, $color, $memory, $displaysize, $name);
$user_data = json_encode($user_data)." \r\n";

然后以与您当前相同的方式将数据保存到文件中:

$fh = fopen("data.txt", "a")   or die("Filen kunne ikke oprettes");
fwrite($fh, $user_data)         or die("Kunne ikke skrive til filen");
fclose($fh);

然后在要显示数据的时候解码json。

$user_data_array = json_decode($retrieved_array[$y]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多