如果在单个HTML中选择了选项,则显示PHP数据

如果在单个HTML中选择了选项,则显示PHP数据,php,html,Php,Html,如果选择了一个对象,我想显示来自PHP的数据。这是我写的HTML代码,但不起作用。我知道原因可能是因为PHP只执行一次,所以之后就不会显示任何内容。或者下面的PHP部分根本没有收到软件对象。我应该有一个Javascript来进行显示吗?有必要吗 <select name="software" onchange="showSoftware(this.value)"> <?php foreach ($softwareCollection as $software): ?>

如果选择了一个对象,我想显示来自PHP的数据。这是我写的HTML代码,但不起作用。我知道原因可能是因为PHP只执行一次,所以之后就不会显示任何内容。或者下面的PHP部分根本没有收到
软件
对象。我应该有一个Javascript来进行显示吗?有必要吗

<select name="software" onchange="showSoftware(this.value)">
  <?php foreach ($softwareCollection as $software): ?>
  <option value="<?php echo $software ?>">
    <?php echo $software->date?>
  </option>
  <?php endforeach; ?>
</select>
<script>
  function showSoftware(software) {
    jQuery.ajax({
      type: "POST",
      data:  {software: software},
      success: function(data) {
        console.log(data);
      }
    });
  }
</script>

<?php if (isset($_POST['software'])): ?>
    <?php foreach ($software->links as $link): ?>
        <tr>
        <td>
            <?php echo $link->title; ?>
        </td>
        <td>
            <?php echo $link->url; ?>
        </td>
        </tr>
    <?php endforeach; ?>
<?php endif; ?>

var-links=[];
var-softwareId='';
var softwareDate='';
links.push({
标题:“”,说明:“”,
url:“”
});
推送({id:softwareId,date:softwareDate,links:links});
softwarecolection.sort((a,b)=>(a.date
此代码未经测试,但这应该适用于您试图实现的目标。更改的select将触发对单独的software.php文件的ajax调用,该文件包含您的代码,并将数据返回到
#softwareress
div。希望这对您有所帮助,我还使用了短码回音来稍微整理这种方式

index.html



此代码未经测试,但这应该适用于您试图实现的目标。更改的select将触发对单独的software.php文件的ajax调用,该文件包含您的代码,并将数据返回到
#softwareress
div。希望这对您有所帮助,我还使用了短码回音来稍微整理这种方式

index.html



有点不相关,但为什么要在自己的开始和结束括号中执行每一行
PHP
?为什么不直接执行
?您的选项语句中有一个错误:
应该是
@GROVER。我对网络开发还很陌生,我不知道我可以这样做,谢谢你的评论。@Nick谢谢你的更正。我正在考虑将
$software
对象传递给函数,这样我就不会使用
echo
,因为它试图将对象转换为字符串并给出错误。我稍微修改了代码以传递
$software->id
,并根据它找到对象,但仍然不起作用。我没有注意到
$software
是一个对象,您需要将
echo$software
更改为
echo$software->xxx
(在不知道对象结构的情况下,我无法说出
xxx
应该是什么,但可能是id?)。有点不相关,但是为什么你要在自己的开始和结束括号中做每一行
PHP
?为什么不做
?你的选项语句中有一个错误:
应该是
@GROVER。我对web开发非常陌生,我不知道我可以这样做,谢谢你的支持注释。@Nick感谢您的更正。我正在考虑将
$software
对象传递给函数,这样我就没有使用
echo
,因为它试图将对象转换为字符串并给出错误。我稍微修改了代码以传递
$software->id
,并根据它找到对象,但仍然不起作用。我没有这样做“我没有注意到,
$software
是一个对象,您需要将
echo$software
更改为
echo$software->xxx
(在不知道对象结构的情况下,我无法说出xxx
应该是什么,但可能是id?)。我想你是对的。PHP根本没有捕获到
“软件”
。但是,如果我想更新HTML,我是否需要添加Javascript来完成此操作,或者
软件。PHP
可以通过成功返回的数据进行更新。请注意成功函数
$(“#软件响应”).HTML(数据)
这告诉您,每次对software.php文件进行查找时,该div中的HTML都将被替换。因此,每次更改select时,该div中包含的HTML将被替换为答案(如果可用)。实际上,您这次将解释$\u POST变量,因为您有software.php文件除了post to,请注意ajax对象中添加了
url
字段;以前您不会将数据发送到任何特定位置。请告诉我这是否适用于您。:)我认为您是对的。PHP根本没有捕捉到
“软件”
。但是,如果我想更新HTML,我是否需要添加Javascript来完成此操作,或者
software.php
可以通过成功返回的数据进行更新。请注意成功函数
$('#softwaresponse').HTML(数据)
这告诉我们,每次对software.php文件进行查找时,都要替换该div中的HTML。因此,每次更改select时,该div中包含的HTML将被替换为答案(如果可用)。实际上,这次您将解释$\u POST变量,因为您有单独的software.php文件要发布到,请注意ajax对象中添加了
url
字段;以前,您不会将数据发送到特定的任何地方。让我知道这是否适合您。:)
<script>
    require(['jquery'], function($) {
        jQuery(document).ready(function($) {
            /*
             * Cache the softwareCollection
             */
            var softwareCollection = [];
            <?php foreach ($softwareCollection = $this->getSoftware() as $software): ?>
            var links = [];
            var softwareId = '<?php echo $software->id ?>';
            var softwareDate = '<?php echo $software->date->date?>';
            <?php foreach ($software->links as $link): ?>
            links.push({
                title: '<?php echo $link->title ?>', description: '<?php echo $link->description?>',
                url: '<?php echo $link->url ?>'
            });
            <?php endforeach; ?>
            softwareCollection.push({id: softwareId, date: softwareDate, links: links});
            <?php endforeach; ?>
            softwareCollection.sort((a, b) => (a.date < b.date));
            const $this = $('select[name=software]');
            for (var i = 0; i < softwareCollection.length; i++) {
                $this.append(
                    '<option value=\"' + softwareCollection[i].id + '\">' + softwareCollection[i].date + '</option>'
                );
            }
        }
    }
</script>
<select id="softwareSelect" name="software">
    <?php foreach($softwareCollection as $software): ?>
        <option value="<?=$software;?>"><?=$software->date;?></option>
    <?php endforeach; ?>
</select>

<div id="softwareResponse"></div>

<script>
jQuery(document).ready(function($) {
    $( '#softwareSelect' ).change(function () {
        $.ajax({
            url: 'software.php'
            type: 'POST',
            data:  {software: $(this).val()},
            success: function(data) {
                $('#softwareResponse').html(data);
            }
        });
    });
});
</script>
<?php if(isset($_POST['software'])): ?>
    <table>
        <?php foreach ($software->links as $link): ?>
            <tr>
                <td><?=$link->title); ?></td><td><?=$link->url); ?></td>
            </tr>
        <?php endforeach; ?>
    </table>
<?php else: ?>
    <p>No software selected.</p>
<?php endif; ?>