Без описания |
Поиск в теме | Версия для печати |
Lera |
Отправлено: 05 Июня, 2007 - 07:19:50
|
Newbie
Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2007
Карма 0
|
Здравствуйте, уважаемые форумчане!
Сначала хочу поблагодарить организаторов этого форума и сайта, так как неоднократно пользовалась имеющейся здесь информацией, и свой первый сайт написала с помощью уроков на "ТвойВеб".
Хочу попросить помощи. Сейчас создаю сайт е-коммерс, все делаю по учебнику, так как сама почти ничего не понимаю в РНР, пользуюсь Dreamweaver. Возникла такая проблема: пишу страничку, где посетители могут добавлять товары в корзину. Есть, к примеру, 10 товаров, выбор делается с помощью чекбоксов, и потом все выделенное должно отправляться одной кнопкой "Купить" в БД. Но почему-то делается только одна запись в БД. Уже несколько дней бьюсь над этой задачей, и никак! Очень надеюсь на вашу помощь.
Код формуляра:
CODE:<?php if(isset($_SESSION['MM_Username'])); {?>
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
<?php do { ?>
<img src="<?php echo $row_montages['img']; ?>" alt="<?php echo $row_montages['nom']; ?>">
<input type="checkbox" name="article" value="<?php echo $row_montages['nom']; ?>">
<?php } while ($row_montages = mysql_fetch_assoc($montages)); ?>
<input type="hidden" name="client" value="<?php echo $_SESSION['MM_Username'];?>">
<input type="submit" value="Commander">
<input type="hidden" name="MM_insert" value="form1">
</form>
<?php }?>
И код скрипта вставки записи в БД:
CODE:<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO bp_panier (client, article) VALUES (%s, %s)",
GetSQLValueString($_POST['client'], "text"),
GetSQLValueString($_POST['article'], "text"));
mysql_select_db($database_bp, $bp);
$Result1 = mysql_query($insertSQL, $bp) or die(mysql_error());
$insertGoTo = "panier.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
?>
Пожалуйста, посмотрите где ошибка, сама не справляюсь! Заранее благодарю! |
|
|
Furax |
Отправлено: 05 Июня, 2007 - 23:59:29
|
Бледнотик
Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007
Откуда: Иркутск, Сибирь, СССР
Карма 32
|
Lera
У тебя все чекбоксы идут под одним именем (article). Добавь нумерацию, например так:
CODE:<?php if(isset($_SESSION['MM_Username'])); {?>
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
<?php for ($i=0; mysql_fetch_assoc($montages)); $i++) { ?>
<img src="<?php echo $row_montages['img']; ?>" alt="<?php echo $row_montages['nom']; ?>">
<input type="checkbox" name="article[<?php echo $i; ?>]" value="<?php echo $row_montages['nom']; ?>">
<?php } ?>
<input type="hidden" name="client" value="<?php echo $_SESSION['MM_Username'];?>">
<input type="submit" value="Commander">
<input type="hidden" name="MM_insert" value="form1">
</form>
<?php } ?>
Ну и во втором скрипте сделай скидку на то, что у тебя article - это уже массив, надо, соответственно, в цикле (foreach) по нему пройтись и добавить все содержащиеся в нём запросы...
Кстати, у тебя, похоже, первый вызов mysql_fetch_assoc был до кода, который ты привета - его в случае моего кода надо будет убрать... |
|
|
Furax |
Отправлено: 06 Июня, 2007 - 08:08:17
|
Бледнотик
Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007
Откуда: Иркутск, Сибирь, СССР
Карма 32
|
Lera
Пардон, очепятался... Конечно же, надо писать так:
CODE:<?php if(isset($_SESSION['MM_Username'])); {?>
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
<?php for ($i=0; $row_montages=mysql_fetch_assoc($montages)); $i++) { ?>
<img src="<?php echo $row_montages['img']; ?>" alt="<?php echo $row_montages['nom']; ?>">
<input type="checkbox" name="article[<?php echo $i; ?>]" value="<?php echo $row_montages['nom']; ?>">
<?php } ?>
<input type="hidden" name="client" value="<?php echo $_SESSION['MM_Username'];?>">
<input type="submit" value="Commander">
<input type="hidden" name="MM_insert" value="form1">
</form>
<?php } ?> И переменная $row_montages в начале ничего содержать не должна...
Lera пишет:совсем ничего не понимаю в РНР
Не расстраивайся! Я сам ещё только учусь, а конец света всё ближе... Эх... Что-то я не то сказал!
Насколько я понимаю, писать во втором скрипте надо как-нибудь так:
CODE:<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
mysql_select_db($database_bp, $bp);
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
foreach ($_POST['article'] as $article)
{
$insertSQL = sprintf("INSERT INTO bp_panier (client, article) VALUES (%s, %s)",
GetSQLValueString($_POST['client'], "text"),
GetSQLValueString($article, "text"));
$Result1 = mysql_query($insertSQL, $bp) or die(mysql_error());
}
$insertGoTo = "panier.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
?> Этот скрипт должен добавлять несколько записей в БД... Или надо только одну с номерами articles через запятую?.. |
|
|
Lera |
Отправлено: 14 Июня, 2007 - 05:31:39
|
Newbie
Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2007
Карма 0
|
Furax, у меня снова затруднение возникло. Посмотри, пожалуйтса, как исправить.
Случайно обнаружила на этой же странице с чекбоксами, если нажимаешь кнопку "Купить" не выбрав ни одного чекбокса, сверху на странице выводится ошибка выполнения foreach. Вот этого:
CODE:foreach ($_POST['article'] as $article)
Я сделала так:
CODE:if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
if ($article=="")
{
echo "Veillez choisir des montages en cochant les cases\n";
exit();
}
foreach ($_POST['article'] as $article)
Теперь выводится сообщение о том, что нужно сначала выбрать артикль, а потом уже нажимать "Купить", но это выглядит совсем некрасиво, и я не знаю как сделать возврат к форме и вообще ко всей странице. |
|
|
Furax |
Отправлено: 14 Июня, 2007 - 10:04:37
|
Бледнотик
Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007
Откуда: Иркутск, Сибирь, СССР
Карма 32
|
Lera
В самом начале файла со скриптом добавления записи напиши:
CODE:<?php
if (!isSet($_GET['article']))
header('Location: адрес');
?>
Важно, чтобы перед этим скриптом не было ни пустой строки, не даже пробела. Куда будешь перенаправлять - на меленькую страничку с предупреждением и приглашением попробовать ещё раз или же просто обратно на страницу ввода - решать тебе. Можно сделать и как-нибудь так:
CODE:<php
if (isSet($_GET['article']))
{
//Здесь наш скрипт добавления...
}
else
{
//Вывод предупреждения...
}
Наконец, можно перенаправлять первым способом на страницу с чекбоксами, но передавать дополнительно параметр GET, скажем, error=nooneselected. Тогда на странице с чекбоксами где-нибудь в начале добавляем что-нибудь вроде:
CODE:<?php
if (isSet($_GET['error'] && ($_GET['error']=='nooneselected'))
{ ?>Ошибка: вы не выбрали статьи/книжки/альбома/товара (нужное подчеркнуть)! <?php } ?> |
|
|
|
Поиск в теме | Версия для печати |
Страниц (2): [1] 2 » |
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0) |
« PHP/Perl » |
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
|
|
|