2014-02-12 5 views
0

Это мой первый проект «Созданный с нуля» PHP/MySQL. Я построил очень простую форму HTML с той же строке повторяется несколько раз:Вставка нескольких значений var в ту же таблицу mysql

<h2 style="margin-top:0">Current Projects</h2>  
    Project: <input name="project1" type="text" size="40" value="1" /> 
    Status: <input name="status1" type="text" size="40" value="1" /> 
    Estimated Completion: <input name="estCompletion1" type="text" size="12" value="1" /><br /> 

    Project: <input name="project2" type="text" size="40" value="2" /> 
    Status: <input name="status2" type="text" size="40" value="2" /> 
    Estimated Completion: <input name="estCompletion2" type="text" size="12" value="2" /><br /> 

    Project: <input name="project3" type="text" size="40" value="3" /> 
    Status: <input name="status3" type="text" size="40" value="3" /> 
    Estimated Completion: <input name="estCompletion3" type="text" size="12" value="3" /><br /> 

Я пытаюсь написать все это в одной таблице базы данных, в то же время, но в разных рядах.

$sql = "INSERT INTO current_project (date, est_completion, project_name, status) 
VALUES (NOW(), '$estCompletion1', '$project1', '$status1'), 
     (NOW(), '$estCompletion2', '$project2', '$status2'), 
     (NOW(), '$estCompletion3', '$project3', '$status3')"; 

Проблема с этим заключается в том, что он вставляет данные из переменной, даже если она равна нулю. Поэтому, если пользователь вводит данные только в первую строку полей (project1, status1 и т. Д.), Остальные 2 вставляют пустую строку.

Есть ли способ, возможно, использовать 'if isset()', чтобы у меня не было пустых полей в моей базе данных?

+0

вы пытались создать свой SQL запрос динамически - проверка значений перед конкатенации строки на остальных? Отредактировано, чтобы сказать - да, с if isset() я бы проверял каждую запись перед добавлением строки в запрос sql – wribit

+0

Кажется, что проще вставить одну строку за раз, поэтому вам не придется беспокоиться о других строках, если они не заполнено. Кто-то может заполнить строки 1 и 3 и оставить строку 2 пустой, чтобы вызвать проблему. –

+0

r lo - Я пробовал делать каждый отдельно, но он только записывает последний в базу данных, игнорируя предыдущие. – danzo

ответ

0

Стройте SQL динамически.

Что-то вроде этого:

$inserts = Array(); 
for($i=1; $i<=3; $i++) { 
    if (!$_POST["project".$i] && !$_POST["status".$i] && !$_POST["estCompletion".$i]) continue; 
    $inserts[] = "(NOW(), '".$_POST["estCompletion".$i]."', '".$_POST["project".$i]."', '".$_POST["status".$i]."')"; 
} 
if (Count($inserts)>0) { 
    $sql = "INSERT INTO current_project (date, est_completion, project_name, status) 
    VALUES (" . implode("), (", $inserts) . ")"; 
} 

На данный момент $ SQL должен иметь полный запрос SQL только те строки, где были представлены все три поля.

+0

К сожалению, это не работает для меня. Я не получаю ошибку PHP, но ничего не публикует в базе данных, и она не переходит к thankyou.php. – danzo

+0

Out выложите '$ sql' и проверьте, сколько значений вы пытаетесь вставить. И какие значения. Может быть вам нужно 'addslashes()' – cyadvert

0

Если вы хотите проверить значение размещенной переменной, то оно равно нулю, всегда используйте empty() метод.

Для получения дополнительной информации: Посетите php.net

for($i=1; $i<=3; $i++) { 
     $estCompletion= $_POST["estCompletion".$i]; 
     $project= $_POST["project".$i]; 
     $status= $_POST["status".$i]; 

     if (!empty($estCompletion) && !empty($project) && !empty($status)) 
     {  
      $sql = "INSERT INTO current_project (date, est_completion, project_name, status) VALUES (NOW(), '".$estCompletion."', '".$project."', '".$status."')"; 
     } 

    unset($estCompletion, $project, $status); 
    } 
+0

Спасибо Pankaj! Я получаю то, что вы здесь делаете, и мне это нравится! Единственная проблема заключается в том, что он по-прежнему просто вставляет последнюю строку в базу данных, а не все три строки (если они не пусты или не курсируют). Также я получил ошибку, потому что в коде отсутствует закрывающая фигурная скобка. – danzo

+0

@danzo Согласно вашему предложению, я отредактировал сценарий. – Pank

+0

Благодарим за редактирование. Проблема в том, что скрипт вставляет только последнюю строку. Он должен писать 3 строки (если все три не пустые). Если все три строки заполнены, он вставляет только последний. Как нам заставить его прокручивать скрипт, чтобы вставить каждую строку? – danzo

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