Незаполненные значения формы, создающие пустые строки в MySQL через php - PullRequest
0 голосов
/ 11 июля 2011

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

<?php
require("header.php");
require("dbinc.php");
foreach($_POST['card'] as $row=>$cardcounted) 
{
    $model=$_POST['model'];
    $serial=$_POST['serial'][$row];
    $card=$cardcounted;
    $status=$_POST['status'];
    $date=$_POST['date'];
    $location=$_POST['location'];
    $query = mysql_query("INSERT INTO receivers (`id`, `model`, `serial`, `card`, `status`, `date`, `location`) VALUES ('null','$model','$serial','$card','$status','$date','$location')");

    if(!isset($serial[$row]) || $serial[$row] == '') {
        // error message here, redisplay form if desired
    } else {
        // no errors - process data
    } 

    if (!$query)
    {
        die('Error: ' . mysql_error());
    }
}
echo $row+1 . " record(s) added";

mysql_close()
?>

Я добавил в! Isset серийные номера за строкой, чтобы проверять наличие нулевых сообщений, но не уверен, как правильно их включить. я думаю, что я на правильном пути, просто нужно немного подтолкнуть:)

Ответы [ 2 ]

0 голосов
/ 11 июля 2011

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

Поэтому напишите метод, подобный

isValid($postArray) {
  foreach($postArray as $key => $value) {
    if ($value == "") {
       return false;    
    }
  }
  return true;
}

Если имена полей форм и столбцов БД похожи, вы можете использовать

$sql = "INSERT INTO receivers ";
$keys = "(";
$values = "(";
foreach($postArray as $key => $value) {
    if ($value != "") {
       $keys += $key;
       $values += $value;
    }
}

$sql = $sql + $keys +" VALUES "+ $values;
0 голосов
/ 11 июля 2011

Возможно, попробуйте переместить ваш запрос MySQL в ваш else, в данный момент вы вставляете значения в базу данных независимо от того, есть ли у вас ошибки формы или нет.Также вам нужно будет защитить все, что вы вставляете в свою базу данных.Это поездка в SQL-инъекцию прямо сейчас;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...