MySQL — где поставить PHP-скрипт для формы заказа?

Привет, ребята, я использую Dreamweaver, и я следовал этому уроку. http://www.htmlgoodies.com/beyond/webmaster/projects/article.php/3530691

Это не очень конкретно с подробностями о том, где разместить PHP-скрипт, поэтому я запутался, если бы мне пришлось разместить его на той же странице или на другой странице. У меня есть orfm.php, который включает в себя форму заказа и JavaScript для расчета. Это работает отлично. После нажатия кнопки «Отправить», действие для этого приводит к submit.html. Но после добавления сценария PHP на той же странице orfm.php для вставки данных в mysql, он не работает так, как должно быть. Должен ли я разместить его на отдельной странице или я ошибаюсь с размещением на той же странице?

вот сценарий:

<?
//uncomment for debugging
//print_r($_POST);

//most sites have magic quotes on
//but if they do not, this code simulates magic quotes
if( !get_magic_quotes_gpc() )
{
if( is_array($_POST) )
$_POST = array_map('addslashes', $_POST);
}//make sure there is data in the name and email fields
if( empty($_POST["Name"]) )
{
$error["name"] = "Name is required.";
$Name = "";
}
else
$Name = $_POST["Name"];

if( empty($_POST["Email"]) )
{
$error["email"] = "Email is required.";
$Email = "";
}
else
$Email = $_POST["Email"];

if( empty($_POST["OtherInfo"]) )
{
$OtherInfo = "";
}
else
$OtherInfo = $_POST["OtherInfo"];

//check to make sure the qty fields are whole numbers
//but only check if there was data entered
if( !empty($_POST["qtyA"]) )
{
if( is_numeric($_POST["qtyA"]) && ( intval($_POST["qtyA"]) == floatval($_POST["qtyA"]) ) )
{
//we have a whole number
}
else
$error["qtyA"] = "Please enter a whole number for Class A Widgets.";
}

if( !empty($_POST["qtyB"]) )
{
if( is_numeric($_POST["qtyB"]) && ( intval($_POST["qtyB"]) == floatval($_POST["qtyB"]) ) )
{
//we have a whole number
}
else
$error["qtyB"] = "Please enter a whole number for Class B Widgets.";
}

if( !empty($_POST["qtyC"]) )
{
if( is_numeric($_POST["qtyC"]) && ( intval($_POST["qtyC"]) == floatval($_POST["qtyC"]) ) )
{
//we have a whole number
}
else
$error["qtyC"] = "Please enter a whole number for Class C Widgets.";
}//we should have at least 1 item ordered in the form
if( empty($_POST["qtyA"]) && empty($_POST["qtyB"]) && empty($_POST["qtyC"]) )
$error["no_qty"] = "Please enter at least 1 item to order.";if( is_array($error) )
{

echo "An error occurred while processing your order.";
echo "<br>\n";
echo "Please check the following error messages carefully, then click back in your browser.";
echo "<br>\n";

while(list($key, $val) = each($error))
{
echo $val;
echo "<br>\n";
}

//stop everything as we have errors and should not continue
exit();

}//we do not need the rest of the form fields as we can just calculate them from the whole numbers
if( !empty($_POST["qtyA"]) )
{
$qtyA = $_POST["qtyA"];
$totalA = $qtyA * 1.25;
}
else
{
$qtyA = 0;
$totalA = 0;
}

if( !empty($_POST["qtyB"]) )
{
$qtyB = $_POST["qtyB"];
$totalB = $qtyB * 2.35;
}
else
{
$qtyB = 0;
$totalB = 0;
}

if( !empty($_POST["qtyC"]) )
{
$qtyC = $_POST["qtyC"];
$totalC = $qtyC * 3.45;
}
else
{
$qtyC = 0;
$totalC = 0;
}

$GrandTotal = $totalA + $totalB + $totalC;//we can store the order in a database as well

$link = @mysql_connect('localhost', 'root', 'password');
if (!$link)
{
echo "Could not connect: " . mysql_error();
}
else
{
mysql_select_db('admin');

$query  = "INSERT INTO order_queue
(  Name ,   Email ,   OtherInfo ,   qtyA ,
totalA ,   qtyB ,   totalB ,   qtyC ,   totalC ,   GrandTotal )";
$query .= " VALUES
('$Name', '$Email', '$OtherInfo', '$qtyA',
'$totalA', '$qtyB', '$totalB', '$qtyC', '$totalC', '$GrandTotal')";
//echo $query . "<br>\n";

$result = mysql_query($query);
mysql_free_result($result);
mysql_close($link);
}
?>

Форма заказа

<form method="POST" action="submitted.php" onsubmit="return Validate(this)" name="ofrm">
<p>Please tell us who you are (<font color="#FF0000">red</font> denotes required information):</p>
<table border="0" cellpadding="0" width="550" id="table1">
<tr>
<td width="340" align="right"><font color="#FF0000">Name</font></td>
<td width="10">&nbsp;</td>
<td width="200"><input type="text" name="Name" size="30" tabindex="1"></td>
</tr>
<tr>
<td width="340" align="right"><font color="#FF0000">Email</font>
(Your confirmation will be sent here): </td>
<td width="10">&nbsp;</td>
<td width="200"><input type="text" name="Email" size="30" tabindex="1"></td>
</tr>
<tr>
.......//more here
<td>
<input type="submit" value="Submit" name="subButton" tabindex="50">&nbsp;&nbsp;&nbsp;&nbsp;
<input type="reset" value="Reset" name="resetButton" tabindex="50">
</td>
</tr>
</table>
</form>

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

РЕДАКТИРОВАТЬ форма действия сейчас submitted.php Я положил сценарий PHP там. это дает мне эту ошибку:

\n"; echo "Please check the following error messages carefully, then click back in your browser."; echo "\n"; while(list($key, $val) = each($error)) { echo $val; echo "\n"; } //stop everything as we have errors and should not continue exit(); } //we do not need the rest of the form fields as we can just calculate them from the whole numbers if( !empty($_POST["qtyA"]) ) { $qtyA = $_POST["qtyA"]; $totalA = $qtyA * 1.25; } else { $qtyA = 0; $totalA = 0; } if( !empty($_POST["qtyB"]) ) { $qtyB = $_POST["qtyB"]; $totalB = $qtyB * 2.35; } else { $qtyB = 0; $totalB = 0; } if( !empty($_POST["qtyC"]) ) { $qtyC = $_POST["qtyC"]; $totalC = $qtyC * 3.45; } else { $qtyC = 0; $totalC = 0; } $GrandTotal = $totalA + $totalB + $totalC; //we can store the order in a database as well $link = @mysql_connect('localhost', 'root', 'password'); if (!$link) { echo "Could not connect: " . mysql_error(); } else { mysql_select_db('admin'); $query = "INSERT INTO order_queue ( Name , Email , OtherInfo , qtyA , totalA , qtyB , totalB , qtyC , totalC , GrandTotal )"; $query .= " VALUES ('$Name', '$Email', '$OtherInfo', '$qtyA', '$totalA', '$qtyB', '$totalB', '$qtyC', '$totalC', '$GrandTotal')"; //echo $query . "\n"; $result = mysql_query($query); mysql_free_result($result); mysql_close($link); } ?>

-1

Решение

Трудно сделать суждение, не видя стороны разметки / html, но вот несколько указателей:

  • Вы можете отправить страницу себе, используя htmlentities($_SERVER['PHP_SELF']); в атрибуте действия на теге или на другой странице action="submitted.php"
  • Убедитесь, что область ввода name= имена атрибутов соответствуют регистру. Если у вас есть $_POST["test"] в сценарии после поста, то <input name="test" должно быть то же самое, а не <input name="Test"
  • Если вы не можете отладить с помощью IDE, добавьте echo "1"; echo "2"; echo "3"; в порядке выполнения сценария, чтобы увидеть, где останавливается отладка нумерации. Это было бы лучшим местом для начала устранения неполадок.
  echo "1";
if( empty($_POST["Name"]) )
{
echo "2";
$error["name"] = "Name is required.";
$Name = "";
}
else
{
echo "3";
$Name = $_POST["Name"];
echo "4";
}

Не лучший пример, но вы поняли идею. Я обычно делаю это с большим сценарием, который я пытаюсь понять.

  • Перед выполнением INSERT отобразите его как текст, чтобы увидеть, все ли переменные содержат данные. Вы также должны вывести сообщение об ошибке базы данных, используя mysql_query($sql) OR die(mysql_error());, Пожалуйста, попробуйте и используйте PDO или же mysqli_query вместо.
  • Убедитесь, что проверка Javascript не блокирует отправку. удалите валидацию и протестируйте скрипт, чтобы увидеть, отправляет ли он. Если это так, то проблема заключается в коде на стороне клиента.

Надеюсь, это поможет.

1

Другие решения

Не точный ответ, который вы ищете, но несколько вещей, которые должны знать начинающие PHP

  • Ваш код содержит некоторые устаревшие компоненты magic_quotes addslashes MySQL *
  • Вашему коду не хватает проверка ввода
  • Вашему коду не хватает разделение интересов. Все, как HTML, CSS, бизнес-логика, презентационная логика в одном файле
  • Начните использовать хорошую IDE, как Komodo Тихоокеанское летнее время
  • Используйте хороший инструмент отладки, такой как XDebug
  • Наконец, начните использовать хороший фреймворк, такой как Zend, CakePHP CodeIgniter Symphony или любой из тысяч других. Почти все фреймворки включают Form-to-Database в руководство по началу работы
0

По вопросам рекламы [email protected]