2016-01-01 1 views
0

Это, наверное, глупый вопрос.Как предотвратить запись IDE (PhpStorm) в DB при редактировании кода? И переменная призрака

Я взламываю код, переучивая mySQL и PHP. Я начинаю с простой формы и простой страницы обработки, на которой есть следующий код.

$firstName=$_GET['firstName']; 
$sql = $pdo->prepare("insert into person (firstName) values (:firstName)"); 
$sql->bindParam(":firstName", $firstName); 
$sql->execute(); 

Моя проблема заключается в том, что когда я изменить страницу формы или страницу обработки на всех (даже отступы или изменить одну букву текста) проверки отладчика и INSERT заявления «пожары». Поэтому у меня есть десятки ненужных записей в БД.

Есть ли способ сделать это просто «огнем», когда я делаю фактический submit из формы? Очевидно, я могу сломать соединение с БД, но, скорее, поражает всю точку кривой обучения, на которой я нахожусь.

Благодарен за любые мысли.

Я отправляю связанный с ним вопрос о переменной-призраке, но думал, что я должен держать их отдельно. Ghost variables in PhpStorm.

+0

Я не могу себе представить, что PhpStorm выполняет код на редактирование. Может быть, вы обновите свою страницу, чтобы увидеть изменения? Когда вы используете 'GET' для обновления базы данных, он будет вставлять строку на каждую перезагрузку страницы. Попытайтесь изменить свой код, чтобы изменения БД выполнялись только на 'POST' –

+0

В режиме отладки он обновляет страницы (-ы), чтобы вы могли видеть ошибки - очень полезно. Не видел, как изменение метода формы с GET на POST изменило бы ситуацию, и, к сожалению, это не имело никакого значения. SELECT, безусловно, «загорается» при любой загрузке страницы. – BeNice

+0

@OldMauiMan Вы используете плагин LiveEdit и в отладочной сессии? Это единственное объяснение, которое я могу придумать - когда вы редактируете свою страницу, LiveEdit пытается ее обновить .. и поскольку это файл PHP, он будет повторно выполнять его. Вот почему вы должны делать то, что @GennadiyLitvinyuk заявили в своем ответе: 1) использовать только запросы 'GET' для отображения ваших данных; 2) используйте «POST» для сохранения новых/измененных данных 3), если вам нужно отображать результаты после пост-перенаправления на страницу, которая будет подана с помощью запроса «GET». – LazyOne

ответ

1

При использовании LiveEdit плагин из PhpStorm вы должны позаботиться о правильной реализации GET и POST запросов.

HTTP-протокол определяет GET -type-запросы как idempotent, а POST s могут иметь побочные эффекты. На простом английском языке это означает, что GET используется для просмотра чего-либо, не меняя его, а POST используется для изменения чего-либо.

Например, страница продукта должна использовать GET, так как обновление страницы не должно изменяться на бэкэнд, тогда как форма, которая делает проверку (сберегательный заказ, принятие платежа, сокращение остатков), должна использовать POST.

В вашем случае вы должны сначала проверить POST:

<?php 

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $firstName = $_POST['firstName']; 
    $sql = $pdo->prepare('insert into person (firstName) values (:firstName)'); 
    $sql->bindParam(':firstName', $firstName); 
    $sql->execute(); 
} 
+0

Извините, что не следует этому вообще. Только GET и/или POST я отправляю данные с «формы» на страницу «процесс». Если я редактирую страницу процесса, когда в базу данных добавляется больше информации, независимо от того, использую ли я ПОСТ или GET. Единственное место GET/POST используется как 'метод' для' form'. Я полагаю, что могу переписать форму и передать JSON через ... Но у меня была аналогичная проблема с Dreamweaver. Кажется, отладка «перерабатывает» всю страницу, ведущую к утверждению 'INSERT'. – BeNice

+0

Неважно, какой редактор вы используете - вы должны обновлять базу данных только на 'POST'. –

+0

OK Я понимаю, что вы говорите, но у меня все еще есть проблема. Также вызов в базу данных НЕ выполняется вызовом формы, который выполняется объектом PDO, поэтому GET или POST передают только переменные (основное отличие заключается в формировании URL-адреса). Я не вижу, как вопрос P/G повлияет на вызов PDO, поскольку все P/G делает передачу переменной с одной страницы на другую. В чем-то вроде запроса AJAX да, я вижу разницу, но здесь, в очень традиционной настройке HTML-формы, я действительно не вижу разницы, и, как я сказал, это НЕ ОТЛИЧАЕТ проблему, которую я испытываю. – BeNice

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