【问题标题】:How to get a particular value from input field如何从输入字段中获取特定值
【发布时间】:2025-12-27 00:25:20
【问题描述】:

我的用户可以从 reverbnation.com 添加他的任何音频。因此用户可以复制他的嵌入代码并将其粘贴到我的表单输入中。我希望我的表单从输入文本中只获取两个单词。

例如:- 混响嵌入代码如:

<iframe class="widget_iframe" src="https://www.reverbnation.com/widget_code/html_widget/artist_4859830?widget_id=50&amp;posted_by=label_265034&pwc[design]=customized&pwc[background_color]=%23d4c79f&pwc[included_songs]=0&pwc[song_ids]=23591473&pwc[photo]=0%2C1&pwc[size]=undefined" width="100%" height="100%" frameborder="0" scrolling="no"></iframe>

因此,如果我的用户将上面的嵌入代码粘贴到表单输入字段中, 我想从上面的文本中收集两个单词来保存我的 sql 数据库。

  1. 艺术家 ID = 4859830 (...artist_4859830?...)
  2. 歌曲 ID = 23591473 (...&pwc[song_ids]=23591473...)

请给我一个指导;如何从输入字段中收集以上 2 个 id。

我的sql数据库:id |用户名 |艺术家 |歌曲

我的表单页面:

if(isset($_POST['submit'])){
    $code = mysqli_real_escape_string($dbh, $_POST['code']);
    $userid = mysqli_real_escape_string($dbh, $_POST['userid']);

    $artist = How to get artist id (4859830) from $code 
    $song = How to get song id (23591473) from $code

    $result = mysqli_query($dbh,"INSERT INTO user_aideo (id, userid, artist, song) values('', '$userid', '$artist', '$song')");
}

<form id="form" method="post" action="">
   <input type="text" class="form-control" name="code"/>
   <input type="hidden" name="userid" value="<? echo $session->userid; ?>"/>
   <input type="submit" name="submit" id="submit" value=" Submit "/>
</form>

【问题讨论】:

  • 输入字符串总是相同的格式/模式??
  • 我相信有人会使用神奇的正则表达式来解决这个问题,但我会为他们询问一些信息,1.艺术家模式总是artist_xxxxxxx?(or artist_xxxxxxx&amp;)? 2.pwc之前的[song]总是出现吗?
  • @Jamel 不,它总是可变的。谢谢。
  • 只需使用parse_url和parse_str,不需要“神奇的正则表达式”
  • 如果它始终采用相同的格式,那么 (1) 对它们都执行一些正则表达式或 (2) 将输入字符逐个字符并拆分。

标签: javascript php jquery iframe


【解决方案1】:

我认为这对于regular expressions 来说是一个很好的用例。

对于您的特定场景,您可以在一次执行中捕获两个数字。您只需要使用preg_match 函数即可。

if (preg_match("/(?:.*)artist_([0-9]*)\?(?:.*)song_ids]=([0-9]*)/i", $code, $matches)) {
    print 'artist: ' . $matches[1] . '<br />';
    print 'song: ' . $matches[2];
}

这适用于您给定的代码示例。它将艺术家编号输入$matches[1],歌曲编号输入$matches[2]

我很乐意在 if 语句中直接引用这些,因为正则表达式有两个捕获组,所以如果 preg_match 返回 true$matches 数组中总会有 3 个索引。如果您在 if 语句之外直接调用 preg_match,则需要循环遍历 $matches 数组以避免未定义索引错误。

【讨论】: