2016-10-31 10 views
0

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

код, как показано ниже

  <!-- Insert MySQL datbase into HTML  --> 
<?php 
$connection = mysqli_connect("localhost", "root", "", "tru"); 
$query = "SELECT * FROM shouts ORDER BY id Desc LIMIT 8"; 
$shouts = mysqli_query($connection, $query); 
?> 



        <!-- Insert MySQL datbase into HTML  --> 
    <?php while ($row = mysqli_fetch_assoc($shouts)) : ?> 
     <li> <?php echo $row['shout']; ?> <b>&nbspSent at&nbsp</b><?php echo $row['Time']; ?></li> 
      <?php endwhile; ?> 

    </ul> 
    </div> 
    <footer> 
     <form action="index.php" method="post"> 
     <label>Shout Text: </label> 
     <input type="text" name="shout" placeholder="Enter your message here"> 
     <input type="submit" id="submit" value="SHOUT!" > 
    </form> 
     <?php 
        <!-- Insert into MySQL datbase  --> 

$link = mysqli_connect("localhost", "root", "", "tru"); 
$sql = "INSERT INTO shouts (name,shout) VALUES ('$_POST[name]','$_POST[shout]')"; 
if(mysqli_query($link, $sql)){ 
echo "Records added successfully."; 
} else 
{ 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
} 

// close connection 
mysqli_close($link); 
?> 
</footer> 
</div> 
</body> 
</html> 
+1

Имеет смысл только то, что если у вас есть инструкция 'INSERT INTO ...', она добавит новую строку в вашу базу данных. Ваш код делает именно то, что вы написали. В чем проблема? – Dekel

+1

@Dekel - это правильно. каждый раз, когда вы перезагружаете свою страницу, выполняется ваш php-код. вы можете поставить какое-то условие перед тем, как вставить –

+0

, что бы это условие было @FranckNgako –

ответ

0
<?php 

if(isset($_POST["name"])){ 
    $link = mysqli_connect("localhost", "root", "", "tru"); 
    $sql = "INSERT INTO shouts (name,shout) VALUES ('$_POST[name]','$_POST[shout]')"; 
    if(mysqli_query($link, $sql)){ 
     echo "Records added successfully."; 
    } 
    else 
    { 
     echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
    } 

    // close connection 
    mysqli_close($link); 
} 

С, если sentece вы его решить. Он добавит только запись, если переменная name POST iset.

+0

, я бы хотел отлаживать код .1) сначала укажите правильную конечную скобку, если isset line ['name'] в настоящее время [ 'name') .2) удалить, что я не знаю, как PHP будет интерпретировать его. Bcas - это не то, как мы компилируем php. –

+0

Ошибка была удалена так, как вы сказали использовать isset. Но вместе с этим мне пришлось также удалить последнюю строку кода, которая была mysqli_close ($ link); В противном случае возникает ошибка, указывающая на предупреждение: mysqli_close() ожидает, что параметр 1 будет mysqli, null указан в C: \ xampp \ htdocs \ tru \ index.php в строке 57 ... Я думаю, что это плохая привычка не закрывать mysqli ссылка. У вас есть какой-то выход из этого @ Eric Liebstreich –

+0

Кстати спасибо за предоставленную эту логику @ Eric Liebsreich –

0

Вы безоговорочно указали insert, так что это отчасти ожидается. Итак, каково должно быть условие? Естественно, при загрузке страницы вы не хотите, чтобы insert крик, только на POST. Таким образом, вы должны проверить запрос, является ли сообщение:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // insert the row 
} 

Но даже если это POST, вам нужно проверить, является ли он действительным, поэтому проверьте имя и крикнуть:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    if ((isset($_POST["name"])) && (isset($_POST["shout"])) && ($_POST["name"]) && ($_POST["shout"])) { 
     //insert the row 
    } 
} 

Смотреть но для SQL injection.

+0

Спасибо, что это работает сейчас ... но для этого мне нужно удалить последнюю строку кода то есть закрыть соединение. Строка: Warning: mysqli_close() ожидает, что параметр 1 будет mysqli, null указан в C: \ xampp \ htdocs \ tru \ index.php в строке 57 –

+0

@HNSingh, соединение, вставка и отключение должны находиться внутри, если показано в этом Ответ. Вторая проблема заключалась в том, что вы пытаетесь закрыть соединение, которое вы не открыли. Это произошло, когда вы загрузили страницу в браузере, условие if было ложным и $ link не был инициализирован. Если ответ был полезен, вы можете принять его, нажав на галочку. –

Смежные вопросы