Я разрабатывал поле для редактирования своего сайта, где пользователи могут иметь множество цен для разных «пакетов» определенного продукта. Я хочу, чтобы пользователи могли заказывать пакеты в любом порядке. Поэтому я перечисляю продукты, используя счетчик (эти ИИ по таблице цен). Если кто-то скажет мне, что я делаю это глупо, и сообщите мне о гораздо лучшем дизайне, я был бы признателен.Лучший способ ввода динамических полей?
<?php
$UserID = mysqli_real_escape_string($connection, $_SESSION['userID']);
$PID = mysqli_real_escape_string($connection, $_SESSION['ePID']);
$findpricesstmt = mysqli_prepare($connection, "SELECT * FROM products WHERE UserID = ? and PID= ?");
mysqli_stmt_bind_param($findpricesstmt, 'ii', $UserID, $PID);
mysqli_stmt_execute($findpricesstmt);
$findpricesresult = mysqli_stmt_get_result($findpricesstmt);
$findpricesrow = mysqli_fetch_assoc($findpricesresult);
if(mysqli_num_rows($findpricesresult) == 0) {
echo('You currently have no prices for this product, meaning it is deactivated. To continue sales, add a price and click reactivate.');
}
else{
$_SESSION['count'] = 50;
while($_SESSION['count'] > 0)
{
$count = mysqli_real_escape_string($connection, $_SESSION['count']);
$count1stmt = mysqli_prepare($connection, "SELECT * FROM prices WHERE Count = ? and UserID = ? and PID= ?");
mysqli_stmt_bind_param($count1stmt, 'iii', $count, $UserID, $PID);
mysqli_stmt_execute($count1stmt);
$count1result = mysqli_stmt_get_result($count1stmt);
if(mysqli_num_rows($count1result) != 0) {
include '../includes/orderpackmanu.php';
}
$_SESSION['count']--;
}
}
?>
В orderpackmanu.php, у меня есть:
<?php
$count = mysqli_real_escape_string($connection, $_SESSION['count']);
$displayprimanustmt = mysqli_prepare($connection, "SELECT * FROM prices WHERE Count = ?");
mysqli_stmt_bind_param($displayprimanustmt, 'i', $count);
mysqli_stmt_execute($displayprimanustmt);
$displayprimanuresult = mysqli_stmt_get_result($displayprimanustmt);
if(mysqli_num_rows($displayprimanuresult) != 0) {
$displayprimanurow = mysqli_fetch_assoc($displayprimanuresult);
$price = $displayprimanurow['price'];
$units = $displayprimanurow['units'];
$ppu = $displayprimanurow['ppu'];
$dispcode = $displayprimanurow['dispcode'];
}
?>
<div>
<div style="width:55%;float:left;text-align:center;">
<?php if(isset($price)){ echo $price . "$ for "; } if(isset($units)){ echo $units; } ?>
<br>
<?php if(isset($ppu)){ echo $ppu . "$ per unit"; } ?>
</div>
<div style="width:40%;float:left;">
<input class="orderinput" type="text" name="<?php if(isset($count)){ echo $count; } ?>" placeholder="<?php if(isset($dispcode)){ echo $dispcode; } ?>" maxlength="30">
</div>
<div style="clear:both;"></div>
<br>
</div>
Мой вопрос конкретно о вводе имени (хотя любое «общее» решение этой конструкции также является приемлемым). Если я пойду с этим форматом, и у каждого входа есть собственное имя dispcode
для имени, есть ли простой способ сделать процесс ввода? Или кто-нибудь скажет мне, почему то, что я делаю, в корне неверно, и как это исправить.
Первое, что привлекло мое внимание, НЕ сочетает 'escape_string' с' bind_param'. Весь смысл 'bind_param' заключается в том, чтобы устранить необходимость в escape-строке: данные обрабатываются как данные, а не часть строки запроса. – Passerby
@Passerby Какая причина не использовать их обоих? Даже если это повторяется. –
Они не «повторяющиеся»; Это разные вещи. Предположим, что вы хотите вывести '' WTF'', в традиционном стиле escape, вы делаете 'SELECT '(escape ("' WTF '')) '; ', которые заканчиваются' SELECT' '' WTF '' '; '; но в стиле привязки вы делаете SELECT?; bind ("WTF '"); ', к которому БД анализируется как:' SELECT?', где ** данные ** '' '' 'WTF''. Если вы объедините их, БД будет анализироваться как 'SELECT?', Где данные '?' Есть '' '' WTF '' ''. – Passerby