나는 여기서 너트하려고한다. 나는 PHP로 $_POST
을 시도하는 폼의 체크 박스 배열을 가지고있다. 확인란을 제외한 모든 게시물이 내 게시물에 잘 표시됩니다. 확인란이 DO 게시이지만 잘못된 순서로 표시됩니다. 예를 들어, 내가 checkbox[0]
과 checkbox[2]
을 원할 때 나는 실제로 checkbox[0]
과 checkbox[1]
을 얻습니다.PHP 체크 박스 문제
isset
을 비롯한 여러 가지 방법으로 확인란의 값을 가져 왔지만 여전히 동일한 문제가 있습니다. 확인란을 실제로 선택하면 데이터베이스에 저장 될 체크 박스 값이 on
이어야합니다.
내 코드는 다음과 같습니다. $in_production
이 확인란입니다. 필요한 경우 확인란을 생성하는 코드도 제공 할 수 있습니다.
미리 감사드립니다.
if ($_GET['action'] == 'Edit_Product'){
include("../dbinfo.php");
$q_id = $_GET['q_id'];
for ($i = 0; $i < count($_POST['p_id']); $i++){
$result = mysql_query('SELECT * FROM products WHERE q_id = '.$q_id);
$num = mysql_num_rows($result);
$p_id = ($_POST['p_id'][$i]);
$in_production = ($_POST['in_production'][$i]);
$p_name = ($_POST['p_name'][$i]);
$p_price = ($_POST['p_price'][$i]);
$p_name_conflict = FALSE;
for ($ii = 0; $ii < $num; $ii++){
$row = mysql_fetch_array($result);
$p_name_conflict_check = $row['p_name'];
$p_id_conflict_check = $row['p_id'];
if($p_name_conflict_check == $p_name &&
$p_id_conflict_check != $p_id){
$p_name_conflict = TRUE;
}
}
if ($p_name_conflict == FALSE){
$query = "UPDATE products SET p_name='$p_name',
p_price='$p_price', in_production='$in_production',
last_modified=CURDATE() WHERE p_id = '$p_id'";
mysql_query($query);
}
else{
$update_failures =+1;
}
}
mysql_close($link);
if($update_failures == 0){
header("Location: Products_Updated.html");
}
elseif ($update_failures != 0){
header("Location: Products_Exist.php?update_failures=".$update_failures);
}
}
P. 나는 이유를 모르지만 코드 블록 아이콘이 현재는 존재하지 않으므로 ... 내 코드가 모두 아름답지는 않다. 또한, 내 코드가 엄청나게 비효율적이라는 것을 알고 있지만, 지금 당장이 코드를 작동 시키려고하고있다가 나중에 미세 조정하십시오. 나는 효율성 제안에 대해서도 개방적이지만이 질문에 대한 나의 주요 목표는 아니다.
편집 : 여기에 HTML에서 양식을 ...
<form id="form" name="form" method="post" action="/Management/Products/Product_Management.php?action=Edit_Product&q_id=<?php echo "$q_id" ?>">
<?php
include("../dbinfo.php");
$result = mysql_query('SELECT * FROM products WHERE q_id =' . $q_id);
$num = mysql_num_rows($result);
mysql_close($link);
for ($i = 0; $i < $num; $i++){
$row = mysql_fetch_array($result);
$p_id = $row['p_id'];
$p_name = $row['p_name'];
$p_price = $row['p_price'];
$in_production = $row['in_production'];
$date_added = $row['date_added'];
$last_modified = $row['last_modified'];
if($in_production == 'on'){
$checked = 'checked';
}
else{
$checked = '';
}
echo "<div>Product ID# " . $p_id . "<label style=\"font-style:italic\"> (Originally added on " . $date_added . ", last modified on " . $last_modified . ")</label></div><br/>";
echo "<input id=\"p_id" . $p_id . "\" class=\"text\" type=\"hidden\" name=\"p_id[]\" value=\"" . $p_id . "\"/>";
echo "<label>Product Name *</label><br/>";
echo "<div><label style=\"font-style:italic\">(Product still in production <input type=\"checkbox\" name=\"in_production[]\"" . $checked . " style=\"width:15px\"/>)</label></div>";
echo "<input id=\"p_name" . $p_id . "\" class=\"text\" type=\"text\" name=\"p_name[]\" maxlength=\"20\" onfocus=\"on_focus(this)\" onblur=\"on_blur(this)\" value=\"" . $p_name . "\"/><br/><br/>";
echo "<label>Product Price *</label><br/>";
echo "<div><label style=\"font-style:italic\">(Without taxes)</label></div>";
echo "<input id=\"p_price" . $p_id . "\" class=\"text\" type=\"text\" name=\"p_price[]\" maxlength=\"6\" onkeypress=\"return currency(this, event)\" onchange=\"currency_format(this)\" onfocus=\"on_focus(this)\" onblur=\"on_blur(this)\" value=\"" . $p_price . "\"/><br/><br/><br/><br/>";
}
?>
<input class="button" type="button" value="Submit" onclick="product_edit_form_check()"/><br/><br/>
</form>
나는이 시도를 줄 것이다,하지만 내 질문은 왜 다른 모든 게시물이 잘 작동하는지 ('checkbox [0]')와 같은 확인란에 필요한 대괄호 사이에있는 숫자입니다. 대괄호 사이에 숫자가 없으면 (이'other_inputs [])')? – ubiquibacon
이것은 효과가 있고 쉬운 수정 이었지만 위에서 설명한 내 의견에서와 같이 확인란이있는 대괄호와 다른 입력이 아닌 대괄호 사이에 숫자를 지정해야하는 이유는 무엇입니까? HTML을 모든 입력에 대해 똑같은 방식으로 생성했습니다 ... 이치에 맞지 않습니다! – ubiquibacon
알 수 있듯이 p_id, p_name 및 p_price는 확인란이 아니므로 아무 것도 입력하지 않아도 배열이 * 완전히 * 게시됩니다. Sohnee가 이미 지적했듯이 체크 박스가 선택되지 않으면 체크 박스가 제출되지 않으므로 HTML에 인덱스를 제공하지 않으면 체크 박스 [] - 배열의 번호가 다시 매겨집니다. – Select0r