使用Post Method的表单不会发送信息

时间:2017-03-07 22:50:37

标签: php html post xampp

我正在编写一个简单的HTML / PHP网站,并且我使用post方法从表单发送信息,但它不会工作 我的第一页HTML代码是:

    <div id="registrati">
    <section id="main">
        <h2 class="title">Per Registrarti completa questi form</h2>
        <form name="reg" method="post" onsubmit='return Control()'  action="Server_Add_User.php" > <!--provarlo su un pc senza problemi di xampp tutti i post vanno così-->
            <p>Sesso <input type="radio" name="sesso" value="m" checked="checked"> Uomo
            <input type="radio" name="sesso" value="f"> Donna
            <p>Nome: <input type="text" id="nome" name="nome" placeholder="Inserisci nome"></p>
            <p>Cognome: <input name="cognome" type="text"  placeholder="Inserisci cognome"></p>
            <p>Data di nascita (formato GG/MM/AAAA): <input type="text" name="data" placeholder="Inserisci Data di nascita"></p>
            <p>Luogo di nascita: <input type="text" name="luogo" placeholder="Citt&agrave di nascita"></p>
            <p>Nazionalit&agrave: <input type="text" name="nazionalita" placeholder="Nazionalit&agrave"></p>
            <p>Telefono: <input type="text" name="telefono" placeholder="Inserisci il tuo numero"></p>
            <p>Indirizzo: <input type="text" name="indirizzo" placeholder="Inserisci il tuo indirizzo"> </p>
            <p>Mail: <input type="text" name="mail" placeholder="Inserisci mail"></p>
            <p>Password: <input type="password" name="pwd" placeholder="Inserisci password"></p>
            <p>Ripeti Password: <input type="password"  name="pwd2" placeholder="Ripeti password"></p>

</div>

<div id="pagamento">
    <section id="main">
        <h2 class="title">Inserisci i dati di pagamento</h2>
            <p>Tipo di carta: <input type="text" name="tipo" placeholder="Visa, MasterCard, ..." size="20"></p>
            <p>Numero Carta: <input type="text" name="numero" placeholder="Numero Carta" size="20"></p>
            <p>Nome Titolare: <input type="text" name="nome_t" placeholder="Nome del titolare" size="20"></p>
            <p>Cognome Titolare: <input type="text" name="cognome_t" placeholder="Cognome del titolare" size="20"></p>
            <p>Data di scadenza: <input type="text" name="data_s" placeholder="MM/AA" size="20"></p>
            <p>Codice Segreto: <input type="text"  name="code_s" placeholder="Codice a 3 cifre" ></p>
            <p> <a href='ToS.php'><h3>Accetto i Termini di Utilizzo</a> <input type="checkbox" name="term"></p></h3>
            <br>
            <br>
        <br>
        <input type="submit" value="Completato" style="height:50px; width: 400px">
        </form>
        <br>
    </section>

</div>

然后在Server_add_User.php

    <?php
    include 'Function.php';
    //checkifcookie();
    //goToHTTPS();

    if(!empty($_POST))
{
    $mail = htmlentities($_POST["mail"]);
    $pwd = htmlentities($_POST["pwd"]);
    $nome = htmlentities($_POST["nome"]);
    $cognome= htmlentities($_POST["cognome"]);
    $data= htmlentities($_POST["data"]);
    $luogo= htmlentities($_POST["luogo"]);
    $nazionalita= htmlentities($_POST["nazionalita"]);
    $telefono= htmlentities($_POST["telefono"]);
    $indirizzo= htmlentities($_POST["indirizzo"]);
    $tipo= htmlentities($_POST["tipo"]);
    $numero= htmlentities($_POST["numero"]);
    $nome_t= htmlentities($_POST["nome_t"]);
    $cognome_t= htmlentities($_POST["cognome_t"]);
    $data_s= htmlentities($_POST["data_s"]);
    $code_s= htmlentities($_POST["code_s"]);
    $sesso= htmlentities($_POST["sesso"]);
    $error = '0';


    if ($pwd !="" && $mail !="" && $nome!="" && $cognome !="" && $data!="" && $luogo !="" && $nazionalita !="" && $telefono !="" && $indirizzo !="" && $tipo !="" && $numero!="" && $nome_t!="" &&
        $cognome!="" && $data_s!="" && $code_s!="")
    {

        $error = addUser($sesso,$nome,$cognome,$data,$nazionalita,$telefono,$mail, $pwd,$tipo,$numero,$nome_t,$cognome_t,$data_s,$code_s,$luogo,$indirizzo);

         if($error=='0')
         {
             session_start();
             control_session($mail);
             $_SESSION['mail']=$mail;

                    header("refresh:3;url=index.php");
         }
        else{
            $error = "Ci sono problemi con il server";
            header("refresh:3;url=Forza_Registrazione_C.php");
            }
    }
    else
    {
        $error = "I dati inseriti non sono validi ";
        header("refresh:2;url=Forza_Registrazione_C.php");
    }
}


    else 
    {
        $error = print_r($_POST);

    }


?>

对于我的服务器,$ _POST var为空,它直接转到最后一个else并打印Array()

使用Get方法可行。 我的XAMPP配置是Apache:443,8080 - &gt;也许是8080的问题? 感谢

Ps:我只能使用PHP / HTML / JS,没有其他语言, 我尝试了一些像id标签这样的解决方案,但无论如何它都无法工作。

3 个答案:

答案 0 :(得分:1)

从良好的HTML结构,语法和语义开始。

如果可以,请使用 HTML5

<!DOCTYPE html>
<html>   <!-- Add attributes as appropriate. -->
      <head>
          <title>My Registration Form</title>
      </head>
      <body>
      </body>
</html>

部分<section id="main">缺少结束标记。 <form> name="reg"遗漏了它的结束标记。您不应该不按顺序关闭HTML标记。我在main部分看到了一个结束表单标记,但这种格式不正确。另外,我建议使用<label>标记代替段落标记(<p>)来标记您的<input>标记。准备好后,尝试使用CSS margin属性在HTML元素之间留出空格,而不是插入硬分隔符(<br>)。如果您要收集电子邮件地址和电话号码,请记住,有<input type="email"><input type="tel">

如果您确实需要一个表单,请通过两个部分进行分发。这样做。

<div id="registrati">
    <section id="main">
        <h2 class="title">Per Registrarti completa questi form</h2>
        <form name="reg" onsubmit='return Control()' method="post" action="Server_Add_User.php">
            <label for"foo"><input id="foo" name="foo" type="text" value=""></label>
            <!-- Add various input controls with labels. -->

            <input type="hidden" name="token" value="89838374uidhyuifuih389ihfujf">
            <!-- Learn to implement a CSRF token! -->
        </form>
    </section>
</div>

现在对其余控件使用form属性

<div id="pagamento">
    <section id="main">
        <h2 class="title">Inserisci i dati di pagamento</h2>
        <label for="tipo">Tipo di carta: <input id="tipo" type="text" form="reg" name="tipo" placeholder="Visa, MasterCard, ..." size="20"></label>
        <!-- Add various input controls with labels. -->
    </section>
</div>

此外,您还希望每个表单都有自己的令牌来阻止跨站点请求伪造攻击。使用散列函数为令牌生成value。请勿使用 MD5 SHA-1 哈希算法。至少使用SHA-2,Blowfish或至少256 - 512位的东西。使用您可以学习使用的东西。

JavaScript(行为)

解决了一些结构性问题后,我们现在转向行为问题。

onsubmit='return Control()'

我建议您从<form>标记中删除此标记,然后查看$_POST超全局是否为空。如果一切正常(在完成上述更改之后),请重新应用事件处理程序。如果提交表单失败,请处理您的JavaScript。 : - )

PHP:Filter, Validate,并使用PDO准备好的陈述。

您无需执行此操作即可将数据发送到数据库。

$mail = htmlentities($_POST["mail"]);

HTML转义功能通常用作对抗跨站点脚本(XSS)攻击的对策。当用户生成的输入传输回浏览器 时,它们会被 使用。由于数据将进入您的数据库,因此此时无需使用htmlentites()

至少这样做(尽管这样做有其局限性,并且本身并不安全)。

$mail = htmlentities(trim(strip_tags(trim(strip_tags(trim($_POST["mail"]))))));

此外,您可能需要考虑使用mb_strlen($string, 'UTF-8')来确定您正在使用的数据量。

if(mb_strlen($mail, 'UTF-8') <= 254)
{
    //etc ..., but you would want to define this in one place, like in a class method, or function.
}

您还可以计算成功控件的数量,以确保每次至少提交一个最小数量。最重要的是,您可以使用正确的控件名称定义一个数组。然后,使用循环,您可以确保提交的控件是正确的。毕竟,如果a)未达到正确控制数量的最小数量,或b)尚未提交正确的控制,为什么还要继续处理。在这方面,让我向您介绍我的朋友isset()

请阅读我对此问题的回答以获取更多信息。

Basic PHP Security Stuff

现在,至于你的测试,以确保某些字段不等于空字符串,这是一件好事,但也许你可以从这个过程中做出user defined function。让函数返回truefalse,或者只返回超级复合词AND的结果。 :-)你仍然可以做更多的检查,但你最终会到达那里。

最后,为了帮助阻止 SQL注入攻击 ,请使用PDO预处理语句将用户数据发送到您的数据库。了解如何使用PDO。你会很高兴,因为htmlentites()没有帮助你将用户输入发送到你的数据库。

会话

每次返回服务器时都要注意使用相同的会话ID。了解会话固定并实施session_regenerate_id()。 通常,它通常在session_start()之后调用,就像这样

session_start();
session_regenerate_id();

但是,您可以使用一些决策逻辑来改进这种操作方式。

    if (session_status() === PHP_SESSION_NONE) {
        session_start();
    } elseif (session_status() === PHP_SESSION_ACTIVE) {
        session_start();
        session_regenerate_id();
    } else {
        throw new \RuntimeException('The PHP session did not start.');
    }

答案 1 :(得分:0)

你使用控制功能我无法看到这个的定义!但是如果控制返回真实表格提交正确! 所以改变你的问题并给我们更多信息,我改变了我的答案

答案 2 :(得分:0)

您的加价不对。所以你的请求实际上并没有发送。我使用代码编辑器来查找和修复问题。假设您以一种形式发送和验证注册和付款数据。请亲自看看差异。

<form name="reg" method="post" onsubmit='return Control()' action="Server_Add_User.php"> <!--provarlo su un pc senza problemi di xampp tutti i post vanno così-->
<div id="registrati">
    <section id="main">
        <h2 class="title">Per Registrarti completa questi form</h2>

            <p>Sesso <input type="radio" name="sesso" value="m" checked="checked"> Uomo
                <input type="radio" name="sesso" value="f"> Donna
            <p>Nome: <input type="text" id="nome" name="nome" placeholder="Inserisci nome"></p>
            <p>Cognome: <input name="cognome" type="text" placeholder="Inserisci cognome"></p>
            <p>Data di nascita (formato GG/MM/AAAA): <input type="text" name="data" placeholder="Inserisci Data di nascita"></p>
            <p>Luogo di nascita: <input type="text" name="luogo" placeholder="Citt&agrave di nascita"></p>
            <p>Nazionalit&agrave: <input type="text" name="nazionalita" placeholder="Nazionalit&agrave"></p>
            <p>Telefono: <input type="text" name="telefono" placeholder="Inserisci il tuo numero"></p>
            <p>Indirizzo: <input type="text" name="indirizzo" placeholder="Inserisci il tuo indirizzo"></p>
            <p>Mail: <input type="text" name="mail" placeholder="Inserisci mail"></p>
            <p>Password: <input type="password" name="pwd" placeholder="Inserisci password"></p>
            <p>Ripeti Password: <input type="password" name="pwd2" placeholder="Ripeti password"></p>

    </section>
</div>

<div id="pagamento">
    <section id="main">
        <h2 class="title">Inserisci i dati di pagamento</h2>
        <p>Tipo di carta: <input type="text" name="tipo" placeholder="Visa, MasterCard, ..." size="20"></p>
        <p>Numero Carta: <input type="text" name="numero" placeholder="Numero Carta" size="20"></p>
        <p>Nome Titolare: <input type="text" name="nome_t" placeholder="Nome del titolare" size="20"></p>
        <p>Cognome Titolare: <input type="text" name="cognome_t" placeholder="Cognome del titolare" size="20"></p>
        <p>Data di scadenza: <input type="text" name="data_s" placeholder="MM/AA" size="20"></p>
        <p>Codice Segreto: <input type="text" name="code_s" placeholder="Codice a 3 cifre"></p>
        <p><a href='ToS.php'><h3>Accetto i Termini di Utilizzo</h3></a> <input type="checkbox" name="term"></p>
        <br>
        <br>
        <br>
        <br>
        <input type="submit" value="Completato" style="height:50px; width: 400px">
    </section>
</div>
</form>