2016-12-05 3 views
-2

Я делаю страницу обратной связи, но она производит некоторые ошибки. Я не понимаю, что не так. Пожалуйста, помогите мне выяснить, где я делаю неправильно. , когда я отправить форму ошибка уходит и производить правильный результат, но когда я обновить страницу он производит то же ошибки сновапытается сделать обратную связь страница

<?php 
$name = $_POST['name'];  // error undefined index name 
$suggestion = $_POST['suggest']; // error undefined index suggest 
$opinion = $_POST['opinion']; // error undefined index opinion 
$submit = $_POST['submit']; // error undefined index submit 

if(isset($submit)){ 
    $sql= mysqli_query($con,"insert into feedback (name,suggestion,opinion) values ('$name','$suggestion','$opinion')"); 
    if($sql==true){?> 
     <div class="alert alert-info"> 
     Thankyou for your suggestions. we will notify the admins. 
</div> 
<?php 
    } 

} 


?> 
<body> 
<div class="feedback"> 

<form action="feedback.php" method="post"> 
<h1> Help us improve our website</h1> 
<h2>Please drop your suggestion below</h2> 

    <div class="form-group"> 
    <label >Your Name:</label> 
    <input type="text" class="form-control" name="name" required> 
    </div> 
    <div class="form-group"> 
    <label for="comment">Your suggestion</label> 
    <textarea class="form-control" name="suggest" rows="5" id="comment" required ></textarea> 
    </div> 
    <p>Were you satisfy with this website?</p> 
    <label class="checkbox-inline"> 
     <input type="checkbox" name="opinion"value="1"> yes 
    </label> 
    <label class="checkbox-inline"> 
     <input type="checkbox" name="opinion" value="2"> no 
    </label> 
    <label class="checkbox-inline"> 
     <input type="checkbox" name="opinion" value="3"> may be 
    </label> 
    <br /><br /> 
    <button type="submit" name="submit" class="btn btn-primary">Submit</button> 

</form> 


</div> 
</body> 
+0

Вы открыты для инъекций SQL. Используйте параметризованные запросы. http://php.net/manual/en/mysqli.quickstart.prepared-statements.php – chris85

ответ

-1

Это потому, что параметры, передаваемые с постом метода связаны только с конкретным запросом страницы , Когда вы обновляете страницу, браузеры обычно спрашивают, хотите ли вы снова отправлять формы, иначе запрос отправляется без дополнительных данных.

-1

Ваша проблема в том, что говорит об ошибке: ваш массив $ _POST пуст, когда страница загружена первой, и она не пуста (так что вы не получите ошибку), когда у вас есть POSTED.

заменить объявления переменных следующим образом, чтобы убедиться, что они должным образом объявлены упаковывают массив $ _POST пуст:

$name = isset($_POST['name']) ? $_POST['name'] : "";  
$suggestion = isset($_POST['suggest']) ? $_POST['suggest'] : ""; 
$opinion = isset($_POST['opinion']) ? $_POST['opinion'] : ""; 
$submit = isset($_POST['submit']) ? $_POST['submit'] : ""; 

if(isset($submit) && $submit != ""){ 
    // your insert code here 
} 
+0

woops..forgot the issets вокруг них. – coderodour

+0

И NOWWWWWW ??? – coderodour

+0

Да, сейчас выглядит. Не мой голос. – chris85

0

Когда первоначально рендеринга страницы, это не удалось найти индекс (т.е. значение.) Для $ _POST массив (имя, предложение и т. Д.). Это потому, что нет данных $ _POST, пока вы не представите форму. Когда вы отправляете форму, $ _POST содержит данные, включая эти индексы, поэтому он может успешно отображать страницу.

Вы должны проверить, установлена ​​ли переменная или нет. Что-то в этих строках сделают это:

if (isset($_POST["name"]) { 
    $name = $_POST["name"]; 
} 

Вы можете сделать это для каждой переменной.

Я также рекомендую включить это в условие отправки, так как он должен проверять только эти данные, если форма была отправлена.

Кроме того, вы должны изучить использование подготовленных инструкций или входную санитацию, поскольку вы настраиваете SQL-инъекцию с помощью запроса mysqli.