2014-09-18 1 views
0

Я сделал php-скрипт, который создаст заголовок и текст и загрузит его в мою базу данных (mysql). Когда я нажимаю, отправьте сценарий и создайте 1 строку справа, а затем, как 3-5 пустых строк.Создание новых строк в mysql при обновлении страницы, почему?

То же самое происходит, когда я обновляю страницу (пустая форма), 2 новых пустых строки показывает в моей базе данных?

Как это решить?

<?php 
$con=mysqli_connect("xxx"); 
// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

// escape variables for security 
$rubrik = mysqli_real_escape_string($con, $_POST['rubrik']); 
$editor = mysqli_real_escape_string($con, $_POST['editor1']); 
$date = date("Yyyy-mm-dd"); 

$sql="INSERT INTO News (title, full_content, author, date_added) VALUES ('$rubrik', '$editor', 'admin', '2014-09-18')"; 

if (!mysqli_query($con,$sql)) { 
    die('Error: ' . mysqli_error($con)); 
} 

mysqli_close($con); 
?> 
     <form method="post" onSubmit=window.location="index.php"> 
     Rubrik: <br/><input type="text" name="rubrik"><br/> 
     Nyhetstext:<br/> <textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10"> 
         </textarea><br/> 
     <input type="submit" value="Publicera nyhet"> 
     </form> 
+2

введите код вставки внутри 'if (isset ($ _ POST))' –

ответ

0

Вы должны проверить, если $ _SERVER [ 'REQUEST_METHOD'] является POST и только затем выполнить инструкцию INSERT.

<?php 
if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    $con=mysqli_connect("xxx"); 
    // Check connection 
    if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

    // escape variables for security 
    $rubrik = mysqli_real_escape_string($con, $_POST['rubrik']); 
    $editor = mysqli_real_escape_string($con, $_POST['editor1']); 
    $date = date("Yyyy-mm-dd"); 

    $sql="INSERT INTO News (title, full_content, author, date_added) VALUES ('$rubrik', '$editor', 'admin', '2014-09-18')"; 

    if (!mysqli_query($con,$sql)) { 
    die('Error: ' . mysqli_error($con)); 
    } 

    mysqli_close($con); 
} 
?> 
+0

thx! он работает сейчас –

1

Оберните свой код php вокруг условия, чтобы проверить, отправлена ​​ли форма. Нравится:

<?php 

     if(isset($_POST['submit')){ 
      $con=mysqli_connect("xxx"); 
      // Check connection 
      if (mysqli_connect_errno()) { 
       echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
      } 

      // escape variables for security 
      $rubrik = mysqli_real_escape_string($con, $_POST['rubrik']); 
      $editor = mysqli_real_escape_string($con, $_POST['editor1']); 
      $date = date("Yyyy-mm-dd"); 

      $sql="INSERT INTO News (title, full_content, author, date_added) VALUES ('$rubrik', '$editor', 'admin', '2014-09-18')"; 

      if (!mysqli_query($con,$sql)) { 
       die('Error: ' . mysqli_error($con)); 
      } 

      mysqli_close($con); 
     } 
    ?> 
1

Всегда ловить форму подачи. Вы можете использовать isset() с этим:

<?php 

$con = mysqli_connect("xxx"); 
// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

if(isset($_POST['submit'])){ 
    // escape variables for security 
    $rubrik = mysqli_real_escape_string($con, $_POST['rubrik']); 
    $editor = mysqli_real_escape_string($con, $_POST['editor1']); 
    $date = date("Y-m-d"); // put the correct format on the date 

    $sql="INSERT INTO News (title, full_content, author, date_added) VALUES ('$rubrik', '$editor', 'admin', '$date')"; 
    if (!mysqli_query($con,$sql)) { 
     die('Error: ' . mysqli_error($con)); 
    } 
    mysqli_close($con); 
    header('Location: index.php'); // always redirect 
} 

?> 

<form method="post" action=""> 
    Rubrik: <br/><input type="text" name="rubrik"><br/> 
    Nyhetstext:<br/><textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10"></textarea><br/> 
    <input type="submit" name="submit" value="Publicera nyhet" /> 
         <!-- ^^ add a name --> 
</form> 
1

Вашего INSERT запрос выполняется каждый раз, когда страница загружается, установите POST переменный, чтобы проверить, была ли форма была представлена ​​или нет, и почему вы используете событие атрибута window.location для отправки формы, вы можете просто использовать action атрибут и установите это значение как пустое, так и имя файла, в котором вы хотите отправить свои данные.

<form action="" method="post"> 

ИЛИ

<form action="index.php" method="post"> 

Ваша переменная дата тоже неправильно. Для создания даты в формате YYYY-MM-DD написать, как показано ниже

$date = date('Y-m-d'); 

Ваш сценарий может понравиться этот

if(isset($_POST['submit'])) { 
    your post variables and insert query goes here 
} 

Вы также можете вставить скрытый input поле в ваш form тег как так

<form action="" method="post"> 
    <input type="hidden" name="save" value="details"> 
    other HTML code goes here 
</form> 

в этом случае вы проверяете переменную столбца следующим образом

if(isset($_POST['save']) && $_POST['save'] === "details") { 
    your post variables and insert query goes here 
} 

Сначала изучите базовую концепцию PHP от http://www.php.net/ и найдите подходящий вопрос здесь, прежде чем задавать любые вопросы.