2016-08-16 92 views
-1

我没有用PHP或SQL以前的经验,所以我没有听清的一切,我已经由以前的各种模板/例子做到了这一点,我管理我的形式连接到数据库,但它创建在我输入数据和记录提交之前记录,然后按提交,我无法弄清楚为什么,当我填写表单并按下提交时,它会把我带到主页,如果它这样做(并且不填写表中的数据),这里是代码和提前谢谢!为什么PHP输入数据之前我按下提交

<html> 
<body> 

<?php 
$servername = "10.253.---.--"; 
$username = "intranet"; 
$password = "----"; 
$dbname = "intranet"; 

// Create connection 
$conn = mysqli_connect($servername, $username, $password, $dbname); 
// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 

$sql = "INSERT INTO AdresarGIS (Adresa, Broj, Mesto, Agent, Komentar) 
VALUES ('$_POST[Adresa]','$_POST[Broj]','$_POST[Mesto]','$_POST[Agent]','$_POST[Komentar]')"; 

if (mysqli_query($conn, $sql)) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 

mysqli_close($conn); 
?> 

    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
     <p> 
     <label for="Adresa">Adresa</label><br/>  
     <input type="text" name="Adresa" /> 
     </p> 
     <p> 
     <label for="Broj">Broj</label><br/>  
     <input type="text" name="Broj" /> 
     </p> 
     <p> 
     <label for="Mesto">Mesto</label><br/>  
     <input type="text" name="Mesto" /> 
     </p> 
     <p> 
     <label for="Agent">Agent</label><br/>  
     <input type="text" name="Agent" /> 
     </p> 
     <p> 
     <label for="Komentar">Komentar</label><br/>  
     <input type="text" name="Komentar" /> 
     </p> 
     <p> 
      <input type="submit" name="submit" value="Pošalji" /> 
     </p> 
    </form> 

</body> 
</html> 
+3

因为您不检查表单是否已提交,因此代码在页面加载时执行 –

+2

ouch,您是否觉得SQL注入尚未完成? –

+0

我该怎么做? ($ _POST [“submit”] ===“submit” 我想像这样: Adresa]”, '$ _ POST [Broj]', '$ _ POST [梅斯托]', '$ _ POST [代理]', '$ _ POST [Komentar]')“; } –

回答

2

因为您不检查表单是否已提交,因此代码在页面加载时执行。有几个方法可以做到这一点,但只是检查是否通过POST方法被请求的页面是最简单的:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    /// your code goes here 
} 

仅供参考,你是大开SQL injections

+0

让我们不要忘记“空()”;-)在“如果不是”。 –

+0

是的,他们需要添加验证,但这超出了最初问题的范围。 :) –

+0

* SI SIGNORE * ;-) –

0

正如在评论中提到的你还没有选中你的form已发布或不是这就是为什么你在你的数据库中得到空白values做到这一点。使用isset

1)使用isset($_POST['submit'])检查表单数据的发布或不

2)另外,请查阅发布瓦莱斯不empty如果empty则显示错误

if(isset($_POST['submit'])){ 
    if(empty($_POST['Adresa']) || empty($_POST['Broj'])|| empty($_POST['Mesto'])|| empty($_POST['Agent'])|| empty($_POST['Komentar'])){ 
     echo "Please fill all fields"; 

    }else { 
$sql = "INSERT INTO AdresarGIS (Adresa, Broj, Mesto, Agent, Komentar) 
VALUES ('$_POST[Adresa]','$_POST[Broj]','$_POST[Mesto]','$_POST[Agent]','$_POST[Komentar]')"; 

if (mysqli_query($conn, $sql)) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 

mysqli_close($conn); 
} 
} 
0
if(isset($_POST['your btn name'])) 
{ 
    //your insert query 
} 
+0

虽然这个代码片断可以解决的问题,[包括说明](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有帮助以提高您的帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要使用解释性注释来挤占代码,因为这会降低代码和解释的可读性! – FrankerZ

+0

好吧为你提供宝贵的指导@FrankerZ – Karthi

0

你必须检查表格是否提交

<?php 
$servername = "10.253.---.--"; 
$username = "intranet"; 
$password = "----"; 
$dbname = "intranet"; 
if(isset($_REQUEST['submit']){ // check if the form is submitted 
    // Create connection 
    $conn = mysqli_connect($servername, $username, $password, $dbname); 
    // Check connection 
    if (!$conn) { 
     die("Connection failed: " . mysqli_connect_error()); 
    } 

    $sql = "INSERT INTO AdresarGIS (Adresa, Broj, Mesto, Agent, Komentar) 
VALUES ('$_POST[Adresa]','$_POST[Broj]','$_POST[Mesto]','$_POST[Agent]','$_POST[Komentar]')"; 

    if (mysqli_query($conn, $sql)) { 
     echo "New record created successfully"; 
    } else { 
     echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
    } 

    mysqli_close($conn); 
} // end if 
?> 
相关问题