仅从MySQL数据库获取最后一条记录。

4

我被一段代码困扰着,想要从MySQL中将数据提取到一个数组中。我有一个表单包含着颜色和尺寸选择框,在触发onclick的Javascript函数时,该函数会创建两个新的选择框。我已经成功地将数据传递到了此Javascript代码中,该代码用于创建新的选择框。然而,我只能从两个表格中获取最后插入的记录。虽然我使用了while循环。 有人可以帮助我吗?在这里,我也得到了所有选择框的名称,如name="color[]",我想将记录插入到包含颜色和尺寸ID的桥接表中。以下是我的代码,请帮帮我..

我来解释一下,每次我点击“添加更多”按钮,它应该创建2个新的下拉列表,一个是颜色,另一个是尺寸,每个下拉列表都应该具有来自数据库的不同数据。因此,每个记录的ID在每个下拉列表中都应该相同,我想在桥接表中添加超过1个记录,其中包括产品ID、颜色ID和大小ID,因此如果我选择了第一个下拉列表中的蓝色和小号尺寸,那么对于第二个下拉列表,我再次选择蓝色和中号尺寸,最后一个下拉列表也是由Javascript函数生成的,我选择的是黑色和大号尺寸。因此,从下拉列表中获取尺寸、颜色的ID,并相应地插入它们。因此,当我显示产品并选择蓝色时,我只能看到在添加产品时添加到蓝色中的大小。希望这可以澄清一切:)

$result=mysql_query("SELECT * FROM color,size");
while($row=mysql_fetch_array($result)) {

    ?>


    <script>
        var room = 1;
        function add_fields() {
            room++;
            var objTo = document.getElementById('room_fileds')
            var divtest = document.createElement("div");
            divtest.innerHTML = '<div class="label">Room ' + room + ':</div><div class="content"><span>Color: <select name="color[]"><option value="<?php echo $row['color_id']; ?>"><?php echo $row['color']; ?></option></select></span><span>Size: <select><option value="<?php echo $row['size_id']; ?>"><?php echo $row['size']; ?></option></select></span></div>';

            objTo.appendChild(divtest)
        }
    </script>

<?php

}

HTML代码

<div id="room_fileds">
    <div>
        <div class='label'></div>
        <div class="content">
            <input type="button" class="btn btn-success" id="more_fields" onclick="add_fields();" value="Add More" /> <br /><br />

            <select name="color[]"  class="form-control">
                <option value="0">Select Color</option>
                <?php
                $result=mysql_query("SELECT * FROM color");
                while($row=mysql_fetch_array($result)){
                    ?>
                    <option value="<?php echo $row['color_id'] ?>"><?php echo $row['color']; ?></option>
                <?php } ?>
            </select>

            <select name="size[]"  class="form-control">
                <option value="0">Select Size</option>
                <?php
                $result=mysql_query("SELECT * FROM size");
                while($row=mysql_fetch_array($result)){
                    ?>
                    <option value="<?php echo $row['size_id'] ?>"><?php echo $row['size']; ?></option>
                <?php } ?>
            </select>


        </div>
    </div>
</div>
4个回答

1
将您的第一个代码替换为以下代码:
<script>

var colors = [];
var sizes = [];
var room = 1;
<?php
$result = mysql_query("SELECT * FROM color");
while ($row = mysql_fetch_array($result)) { ?>
    colors.push(['<?php echo $row['color_id'] ?>', '<?php echo $row['color'] ?>']);
<?php }
$result = mysql_query("SELECT * FROM size");
while ($row = mysql_fetch_array($result)) { ?>
    sizes.push(['<?php echo $row['size_id'] ?>', '<?php echo $row['size'] ?>']);
<?php } ?>

function add_fields() {
    room++;
    var objTo = document.getElementById('room_fileds');
    var divtest = document.createElement("div");
    var html = '<div class="label">Room ' + room + ':</div><div class="content"><span>Color: <select name="color[]" class="form-control">';
    for (i = 0; i < colors.length; i++) {
        html += '<option value="' + colors[i][0] + '">' + colors[i][1] + '</option>';
    }
    html += '</select></span><span>Size: <select name="size[]" class="form-control">';
    for (i = 0; i < sizes.length; i++) {
        html += '<option value="' + sizes[i][0] + '">' + sizes[i][1] + '</option>';
    }
    html += '</select></span></div>';
    divtest.innerHTML = html;
    objTo.appendChild(divtest);
    room++;
}

</script>

添加了你的代码,兄弟。它只显示第一条记录,当我点击“添加更多”按钮时,它会添加新字段,但现在它将第二行数据用于两个字段(颜色和尺寸)。我想在选择框中显示所有行数据。原因是例如:蓝色牛仔裤在商店中可能有多种尺码可用。 - Babar Ali
那我误解了您的要求,只是为了澄清,每次单击按钮时,您想插入一个包含所有值的新下拉列表,还是将所有值附加到现有下拉列表中?如果您可以编辑您的问题并重新表述您的要求,那就太好了 :) - Mohammad Anini
谢谢,我已经相应地更新了我的答案,希望这是你所需要的 :) - Mohammad Anini
谢谢兄弟,我检查了代码,它的工作方式与Nages代码完全相同,显示的数据被重复了3次... - Babar Ali
现在我明白了,因为它是一个联接查询,所以它会显示重复的结果,因此,你需要有两个查询,一个用于尺寸,一个用于颜色,我已经相应地更新了我的答案 :) - Mohammad Anini
显示剩余5条评论

0
$divs='';
$result=mysql_query("SELECT * FROM color,size");
$room=1;
while($row=mysql_fetch_array($result)) {

    $divs.='<div><div class="label">Room ' . $room . ':</div><div class="content"><span>Color: <select name="color[]"><option value="'.$row['color_id'].'">'.$row['color'].'</option></select></span><span>Size: <select><option value="'.$row['size_id'].'">'.$row['size'].'</option></select></span></div></div>';
    $room++;
} ?>
<script>
function add_fields() {          
    var objTo = document.getElementById('room_fileds');
    objTo.appendChild(<?php echo $divs; ?>);
}
</script>

嘿,检查一下你的 while 循环,你正在尝试使用 + 连接 'room'。 - Nagesh Sanika
@Disha V,感谢您的代码,但我遇到了一个问题:在C:\xampp\htdocs\php\jeans\admin\addedit_product.php的第11行出现了“解析错误:语法错误,意外的'color_id'(T_STRING)”。 - Babar Ali
@NageswaraRao 我在 JavaScript 中没有任何 while 循环,我也在 PHP 代码中的 while 循环之前添加了 $i =1;,然后在 color[<?php echo $i; ?>] 中输出 $i。最后,在 while 循环之后加上 } $i++ ; 但是它为所有 div 元素都给出了 color[21] 的值。 - Babar Ali
@BabarAli,我评论的是Disha的答案,不是你的问题。 :) - Nagesh Sanika

0

尝试这段代码,希望它对你有用

 <script>
var room = 1;
function add_fields() { 
    room++;  
    var objTo = document.getElementById('room_fileds');
    var divtest = document.createElement("div");
    <?php 
        $div_start='<div class="label">Room '."'+ room +'".' :</div><div class="content">';
        $color='<span>Color: <select name="color[]">';
        $size='<span>Size: <select>'
        $result=mysql_query("SELECT * FROM color,size");
        while($row=mysql_fetch_array($result)) { 
             $color.='<option value="'.$row['color_id'].'">'.$row['color'].'</option>';
             $size.='<option value="'.$row['size_id'].'">'.$row['size']'.</option>';
        }
        $color.='</select> </span>';
        $size.='</select> </span>';
        $div_close='</div>';
        $innerHTML=$div_start.$color.$size.$div_close; 
    ?> 
    divtest.innerHTML ='<?php echo $innerHTML; ?>';
    objTo.appendChild(divtest);
}
</script>

谢谢,我没有收到任何错误信息,但是当我点击触发onclick函数的“添加更多”按钮时,它什么也不做...没有生成新的字段。 - Babar Ali
你是否遇到了任何控制台错误?如果有,请评论,我会进行相应的编辑。 - Nagesh Sanika
抱歉,我在我的代码中发现了一些问题。现在已经编辑了回答,请检查一下。祝编码愉快 :) - Nagesh Sanika
非常感谢您,Nages,现在数据正在显示,但只有一个问题,即它重复了所有行3次,例如颜色:蓝色,蓝色,蓝色,黑色,黑色,黑色...尽管只有一条蓝色和黑色的记录...大小也是如此...您能否请指导我关于颜色名称的问题... name="color[]" 这就是我在每个value中得到的..但我确实根据它们的ID获取值,我能够像这样将数据插入桥表吗? - Babar Ali

0
这是最终的代码,如果有人想编写类似的东西,它会很有帮助...只需更改值,它就可以按照您的需求工作...我要感谢所有回复该主题的人,特别是Mohammad Anini...没有他的帮助,这是不可能的!!!
$query = mysql_query("INSERT INTO products (product_name,product_description, product_pic1, product_pic2, product_pic3,product_price,category_id,subcategory_id,product_status,color,size,product_slug, meta_keywords,entrydate)

                VALUES ('$product', '$description' , '$image', '$image2', '$image3', '$product_price', '$category', '$subcategory', '$product_status', '$capture_field_vals', '$size', '$product_slug1', '$meta_keywords', Now() )") or die(mysql_error());

                if ($query === TRUE) {

                    $lastid = mysql_insert_id();

                    $color["color"]=array();
                    $size["size"]=array();

                    foreach ($_POST['color'] as $key => $colorvalue) {
                    }


                    foreach ($_POST['size'] as $key => $sizevalue) {
                    }
                    $cid=array();
                    foreach($color as $rec){
                        $cid[]=$rec;
                    }
                    $sz=array();
                    foreach($size as $rec){
                        $sz[]=$rec;
                    }

                    $length=sizeof($color);
                    for($i=0;$i<$length-1;$i++){


                        $query2 = mysql_query("INSERT INTO bridge (product_id,color_id, size_id)

                VALUES ('$lastid', '$cid[$i]' , '$sz[$i]')") or die(mysql_error());

                    // echo "<script>alert('New Product successfully Addedd');windows.location.replace('addedit_product.php');</script>";
                    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接