2015-12-01 5 views
4

У меня проблема со значением по умолчанию для $ _POST []; Итак, у меня есть html-форма с текстовыми полями, и информация отправляется на php-скрипт. PHP-скрипт имеет SQL-запрос, который отправляется в мою базу данных. Но если мой текстовый файл в форме html пуст, запрос не имеет значения. Поэтому я хочу установить свой пост в значение по умолчанию 0, чтобы оно возвращало значение по крайней мере.

Так вот пример HTML формы (Это не мой actuall сценарий. Просто пример.

<form action="testscript.php" method="POST"> 
    <input type="id" name="ID"/> 
    <input type="text" name="test"/> 
    <input type="submit" value="Send"/> 
</form> 

Ok так что этот сценарий будет посылать как идентификатор и тест Textboxes всегда будет иметь числовое значение. И он посылает информацию testscript.php

Вот testscript.php пример

$conn = mysqli_connect('host', 'dbuser', 'dbpass', 'dbname'); 
    $id = $_POST['id']; 
    $test = $_POST['test']; 
    $sql = "INSERT INTO test_table (id, test) VALUES ($id, $test)"; 

    if (mysqli_query($conn, $query)) { 
     echo "Success"; 
    } else { 
     echo "Failed" . mysqli_error($conn); 
    } 

Хорошо, так что теперь, если я представить мой HTML формы PHP скрипт без inserti нг любой текст в текстовые поля запроса будет выглядеть следующим образом

INSERT INTO test_table (id, test) VALUES (,) 

Но запрос должен быть, как этот

INSERT INTO test_table (id, test) VALUES (0, 0) 

Зв Я знаю, что могу использовать атрибут value в теге html, но тогда значение будет видно в текстовом поле, и я этого не хочу.

И я знаю, что я могу сделать если Постулаты, чтобы значение по умолчанию, как этот

if (isset($_POST['test'])) { 
    $test = $_POST['test']; 
} else { 
    $test = 0; 
} 

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

Итак, есть ли способ установить значение по умолчанию для всех текстовых полей без использования, если statment в php или атрибуте value в форме html?

+5

вы уязвимы для [SQL-инъекций] (http://bobby-tables.com), и да, если вы хотите сделать безопасную базу данных, вы прочитаете эту ссылку, и вы также найдете решение проблемы «Я не хочу проверять 100 полей самостоятельно». –

+2

Вы можете сократить это выражение тройным, и именно так это делается большинством из нас, потому что вам нужно проверить 'isset ($ _ POST ['test']) в любом случае, чтобы избежать неопределенных указательных уведомлений. '$ test = isset ($ _ POST ['test'])? $ _POST ['test']: 0; ' –

+0

Я уверен, что даже пустые входы вернут true на' isset ($ _ POST ['test']) ', вы можете проверить на'! Empty ($ _ POST ['test']) ' – VIDesignz

ответ

5

Я знаю, что это похоже на боль, но вы ДОЛЖНЫ проверить, что все входы действительны. Вы можете упростить количество кода, используя трёхмерный оператор вроде этого.

$id = isset($_POST['id']) ? $_POST['id'] : 0; 
$test = isset($_POST['test']) ? $_POST['test'] : 0; 

.... 

И нет, это не займет часов даже с сотнями из них.

Чтобы сделать это немного менее болезненный код вы можете использовать силу зацикливания с variable variables

самым болезненной частью PHP будет создавать массив со всех своих именами полого

$fields = array('id', 'test', 'extra', 'more', ..., 'one_hundred'); 

Затем проходным этот массив создает имена переменных и в то же время экранирует строки - если они есть - в противном случае устанавливается значение 0 (ноль). Вы могли бы хотеть/нужно установить "" (пустую строку)

foreach($fields as $field_name) 
{ 
    ${$field_name} = isset($_POST[$field_name]) ? mysqli_real_escape_string($conn, $_POST[$field_name]) : 0; 
} 

Теперь у вас есть переменные $ ID, $ тест, $ дополнительно, $ более, ...., $ one_hundred доступны для использования ,

+0

Okey, но im также использует mysqli_real_escape_string для ввода текста. Так как я могу использовать его с этим? $ text = mysqli_real_escape_string (isset ($ _ POST ['text'])? $ _POST ['text']: 0); Как это? –

+0

@ user3055512, проверьте мой расширенный ответ – DFriend

+0

О, спасибо! Я попробую это –

0

Если Флажки имеют уникальные имена, то вам необходимо проверить их на стороне сервера, чтобы увидеть, если они на самом деле имеют значение в них один за другим, используя тройной

isset($_POST["test"]) ? $_POST["test"] : 0

Однако, если ваши флажки в виде массива:

<input type="checkbox" name="courses[]" value="1"> 
<input type="checkbox" name="courses[]" value="2 > 

Тогда вы могли бы сделать следующее:

foreach($_POST['courses'] as $course) { 
    echo $course; // etc etc etc 
} 

Вы также можете установить значения по умолчанию для базы данных.

Другое примечание: ваш код подвержен SQL-инъекции. Хотя вопрос, который у вас есть, может быть просто примером, вы можете просто иметь в виду, что лучше и безопаснее обращаться к базе данных см. PDO соединений.

+0

Благодарим за сообщение. Я знаю о PDO, но я новичок в php, поэтому сначала хочу изучить стандартный PHP-код перед тем, как попробовать PDO. И моя форма имеет текстовые входы, а не флажки. Могу ли я сделать то же самое для ввода текста? –

+0

@ user3055512 да, вы можете; это та же идея. – Dimitri

+0

Хорошо. Спасибо. Я попробую –

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