Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
<?php
require('../scripts/x_connect.php');
if(isset( Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['CountryID'])) {
// Create Country
if(!isset( Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['CountryID'])) {
if(isset( Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['CountryName'])) {
$CountryName = Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['CountryName'];
}
if(isset( Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['Gross'])){
$Gross = Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['Gross'];
}
$stmt = oci_parse($conn, "INSERT INTO COUNTRY (COUNTRYNAME, GDP) VALUES (:CountryName, :GDP)");
oci_bind_by_name($stmt, ":CountryName", $CountryName);
oci_bind_by_name($stmt, ":GDP", $Gross);
oci_execute($stmt);
$Affected = oci_num_rows($stmt);
oci_commit($conn);
oci_free_statement($stmt);
oci_close($conn);
// echo $Gross;
// echo $CountryName;
if(count($Affected) > 0){
header("Location: ../viewCountries.php?Success=$CountryName has been created!");
} else {
header("Location: ../viewCountries.php?Danger=$CountryName hasn't been created!");
}
// Update Country
} else {
if(isset( Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['CountryID'])) {
$CountryID = Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['CountryID'];
}
if(isset( Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['CountryName'])) {
$CountryName = Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['CountryName'];
}
if(isset( Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['Gross'])){
$Gross = Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]POST['Gross'];
}
$stmt = oci_parse($conn, "UPDATE COUNTRY SET COUNTRYNAME = :CountryName, GDP = :GDP WHERE COUNTRYID = :CountryID");
oci_bind_by_name($stmt, ":CountryID", $CountryID);
oci_bind_by_name($stmt, ":CountryName", $CountryName);
oci_bind_by_name($stmt, ":GDP", $Gross);
oci_execute($stmt);
$Affected = oci_num_rows($stmt);
oci_commit($conn);
oci_free_statement($stmt);
oci_close($conn);
// echo "CountryID" . ' ' . $CountryID . "<br>";
// echo "GDP" . ' ' . $Gross . "<br>";
// echo "Country Name" . ' ' . $CountryName . "<br>";
// echo "Rows Affected" . ' ' . $Affected;
if(count($Affected) > 0){
header("Location: ../viewCountries.php?Success=$CountryName has been updated!");
} else {
header("Location: ../viewCountries.php?Danger=$CountryName hasn't been updated!");
}
}
} else {
// Delete Country
if(isset( Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]GET['CountryID'])) {
$CountryID = Проверяйте имя отправленного параметра, например isset ($ _ POST ['CountryID']), а не только isset ($ _ POST).
Таким образом, следующее должно работать.
[110]GET['CountryID'];
$stmt = oci_parse($conn, "DELETE FROM COUNTRY WHERE COUNTRYID = :CountryID");
ocibindbyname($stmt, ":CountryID", $CountryID);
oci_execute($stmt);
$Affected = oci_num_rows($stmt);
oci_commit($conn);
oci_free_statement($stmt);
oci_close($conn);
if(count($Affected) > 0){
header("Location: ../viewCountries.php?Success=Country has been deleted!");
} else {
header("Location: ../viewCountries.php?Danger=Country hasn't been deleted!");
}
}
}
?>
Это звучит мне, как будто Вы ответили на все важные вопросы. У нас было подобное обсуждение на работе недавно, и мы не совсем решены все же.
Однако одна вещь, которую мы изучили, состоит в том, чтобы сослаться на двоичные файлы, для получения всех преимуществ, которые Вы отмечаете, но создали двоичные файлы общей системой сборки, откуда исходный код находится в общем месте, доступном всех машин разработчика (по крайней мере, если они находятся в сети на работе), так, чтобы любая отладка могла на самом деле погрузиться в код библиотеки при необходимости.
Однако на той же ноте, мы также отметили много базовых классов с соответствующими атрибутами, чтобы заставить отладчик пропустить их полностью, потому что любая отладка Вас делает в Ваших собственных классах (на уровне, который Вы разрабатываете), только было бы весьма больше обычного размера кодом из основных библиотек. Таким образом, когда Вы совершаете нападки эти Шаг В сочетание клавиш отладки на классе библиотеки, Вы повторно появляетесь в следующую часть кода на Вашем текущем уровне, вместо того, чтобы иметь необходимость пробраться через тонны кода библиотеки.
В основном, я определенно голосую (в ТАК терминах) за Ваши комментарии о хранении доказанного кода библиотеки с глаз долой для нормального разработчика.
кроме того, если я загружаю файл глобального решения, который содержит все проекты и в основном, просто все, ReSharper 4, кажется, имеет некоторую коронарную проблему, поскольку Visual Studio практически прибывает в бездействие.
По-моему, самая большая проблема с использованием ссылок проекта состоит в том, что оно не предоставляет потребителям общую базовую линию для их разработки. Я предполагаю, что библиотеки изменяются. Если это так, создание их и обеспечение, что они являются имеющими версию, дадут Вам легко восстанавливаемую среду.
Не выполнение это будет означать, что Ваш код загадочно повредится, когда ссылочный проект изменится. Но только на некоторых машинах.
Я склонен рассматривать общие библиотеки как это как сторонние ресурсы. Это позволяет библиотеке иметь свои собственные процессы сборки, тестирование QA, и т.д. Когда QA (или кто бы ни) "благословляет" выпуск библиотеки, это копируется в центральное расположение, доступное всем разработчикам. Тогда до каждого проекта решить версию библиотеки для потребления путем копирования двоичных файлов в папку проекта и использования двоичных ссылок в проектах.
Одна вещь, которая важна, состоит в том, чтобы создать отладочный символ (pdb) файлы с каждой сборкой библиотеки и сделать доступных также. Другая опция состоит в том, чтобы на самом деле создать локальное хранилище символьной информации в Вашей сети и иметь каждого разработчика, добавляют что хранилище символьной информации к их конфигурации VS. Это позволило бы Вам отлаживать через код и все еще обладать преимуществами использования двоичных ссылок.
Что касается преимуществ Вы упоминаете для ссылок проекта, я не соглашаюсь с Вашей второй точкой зрения. Мне важно, чтобы проекты потребления явно знали, какую версию общей библиотеки они используют и для них, чтобы сделать преднамеренный шаг для обновления той версии. Это - лучший способ гарантировать, что Вы случайно не берете изменения в библиотеке, которые не были завершены или протестированы.
когда Вы не захотите его в своем решении или иметь потенциал для разделения решения, отправьте весь вывод библиотеки в общий, каталог bin и ссылку туда.
я сделал это, чтобы позволить разработчикам открывать трудное решение, которое только имеет Домен, тесты и веб-проекты. Наши сервисы победы, и материал Silverlight и библиотеки веб-элементов управления находятся в отдельных решениях, которые включают проекты, в которых Вы нуждаетесь при рассмотрении тех, но nant может создать все это.
Я полагаю, что Ваш вопрос на самом деле о том, когда проекты сочетаются в том же решении; причина, являющаяся этим, проектирует в том же решении, должен иметь ссылки проекта друг другу, и проекты в различных решениях должны иметь двоичные ссылки друг на друга.
я склонен думать, что решения должны содержать проекты, которые разрабатываются тесно вместе. Такой как Ваши блоки API и Ваши реализации тех API.
Близость относительна, как бы то ни было. Разработчик для приложения, по определению, тесно связан с приложением, однако Вы не хотели бы иметь разработчика и приложение в том же решении (если они во всем комплексе, который является). Вы, вероятно, хотели бы разработать разработчика против ответвления программы, которая объединяется с промежутками далее расположенная с интервалами независимо, чем нормальная ежедневная интеграция.
Я думаю, что, если проект не является частью решения, Вы не должны включать его там..., но это - просто мое мнение
, я разделяю его понятием в коротком