2015-07-03 49 views
1

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

例如: -混响国度embad类似的代码为:

<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. 艺术家编号= 4859830(... artist_4859830?...)
  2. 歌曲ID = 23591473(... &普华永道[song_ids] = 23591473 ...)

请给我是一个准则;如何从输入字段中收集2个以上的id。

我的sql数据库:id |用户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> 
+0

输入字符串总是以相同的格式/模式? – Jamil

+0

我相信有人会用神奇的正则表达式来解决这个问题,但我会问他们一些信息,1.艺术家模式总是'artist_xxxxxxx?(或artist_xxxxxxx&)'? 2.是否['歌]'总是出现'pwc'? – fuyushimoya

+0

@Jamel不,总是会变的。谢谢。 – koc

回答

2

我认为,这将是一个很好的使用情况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语句,因为正则表达式有两个捕获组,所以总是会有的$matches阵列中的3项指标,如果preg_match回报true。如果您在if语句之外直接调用preg_match,则需要遍历$matches数组以避免未定义的索引错误。

+0

谢谢你,先生。 – koc