繁体   English   中英

使用javascript / jquery-在php LOOP中设置div的值/文本

[英]Set the value/text of a div using javascript/jquery - inside a php LOOP

我想在循环内使用javascript / jquery设置di​​v的值/文本,但我不知道如何实现它。 我需要这个家伙的帮助。

目标:

  1. 从数据库检索数据。
  2. 使用javascript / jquery(在循环内)从数据库中设置元素的值。
  3. 将值链接

我在ff links表中有此a_link列。 值:

- www.google.com

- https://www.google.com

- www.stackoverflow.com

这是我的代码:

<?php
    $querylink = "SELECT * from links";
    $resultlink = mysql_query($querylink);

    while ($rowlink = mysql_fetch_array($resultlink))
    { 
     $thelink = $rowlink['a_link'];
?>

     <div class = "row">
         <span id = "linkhere"></span> 
     </div>

     <script>

        var link = "<?php echo $thelink; ?>";
        $("#linkhere").html(urlify(link));

        function urlify(text) {
           var urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g;
           //var urlRegex = /(https?:\/\/[^\s]+)/g;
           return text.replace(urlRegex, function(url,b,c) {
               var url2 = (c == 'www.') ?  'http://' +url : url;
              // return '<span style = "color:blue;text-decoration:underline">' + url + '</span>';
              return '<a href="' +url2+ '" target="_blank">' + url + '</a>';
          }) 
        }

     </script>
<?php
    }
?>

任何帮助将不胜感激。 谢谢。

这不是它的工作原理,也不是任何一个工作原理

现在,假设您确实需要使用Javascript处理生成的链接(不是)。

首先,您需要将Javascript代码与PHP代码分开。 仅在获取数据并生成一些输出后,才使用Javascript。

我想你只想要某种工作代码

<?php
    $querylink = "SELECT * from links";
    $resultlink = mysql_query($querylink);

    while ($rowlink = mysql_fetch_array($resultlink)) : 
     $link = $rowlink['a_link'];
?>
     <div class="row">
         <a href="" data-url="<?php echo $link ?>"></a>
     </div>
<?php 
    endwhile;
?>

<script type="text/javascript">
    $(function() {
        $('.row a').each(function() {
            var urlified = urlify($(this).data('url'));
            $(this).attr('href', urlified.url)
                   .text(urlified.label);
        });
    });

    function urlify(text) {
        var urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g;
        return text.replace(urlRegex, function(url,b,c) {
          var label = (c == 'www.') ?  'http://' +url : url;
          return {url: url, label: label};
        }); 
    }
</script>

@aimme从技术上讲关于使用其他数据库库是没有错的。 请阅读“ 为什么我不应该在PHP中使用mysql_ *函数? ”,以了解为什么不使用mysql_的原因,以及一些简洁的替代方法,一些教程和一些不错的读物。 (是的,全部在同一页面上!只需向下滚动)

我认为您正在尝试:

  • 显示类'row'的<div>
    • 内部带有<a>标记,该标记将“链接”表的“ a_link”列用作href和标签。
      • 标签的href必须始终具有方案(http://)。

只是PHP和HTML

<?php
    $querylink = "SELECT * from links";
    $resultlink = mysql_query($querylink);

    while ($rowlink = mysql_fetch_array($resultlink))
    { 
        $theLink= $rowlink['a_link'];
        $regexMatches = array();

        // removed (what seemed to be) needless groups in regex
        $urlFound = preg_match("@((https?:\/\/|www\.)[^\s]+)@",$theLink,$regexMatches);

        if($urlFound === 1) {
            // only add http:// if http:// was not detected
            $href = ($regexMatches[2] === "www." ? "http://" : "") . $theLink;
?>
    <div class="row">
        <a href="<?php echo $href; ?>" target="_blank"><?php echo $theLink; ?></a>
    </div>
<?php  }
    }
?>

如果a_link不包含“ http://”或“ www”,则此代码不会回显一行。 在里面。 因此不会显示google.com。

值得注意的是,如前所述,正则表达式将可在“ url”(如“ applewww.google.com”)上使用。 不知道这是否重要。 在正则表达式的开头添加“ ^”可以解决问题(例如: preg_match("@^((https?:\\/\\/|www\\.)[^\\s]+)@",$theLink,$regexMatches);

(更好)解决方案可以使用parse_url($ url)

<?php
    $querylink = "SELECT * from links";
    $resultlink = mysql_query($querylink);

    while ($rowlink = mysql_fetch_array($resultlink))
    { 
        $theLink= $rowlink['a_link'];

        $href = (parse_url($theLink,PHP_URL_SCHEME) === NULL ? "http://" : "") . $theLink;
    ?>
    <div class="row">
        <a href="<?php echo $href; ?>" target="_blank"><?php echo $theLink; ?></a>
    </div>
    <?php
    }
?>

但是,使用parse_url()意味着将显示任何旧字符串(而第一个解决方案将不显示任何没有http://或www。的链接),但是由于从名为“ links”的表中提取,假设一切都是有效的路径,也许是安全的。

首先,我想建议使用PDO或mysqli而不是mysql。 因为它容易受到sql注入的影响,并且已贬值。

“我想在循环内使用javascript / jquery来设置div的值/文本,但我不知道如何实现它。我需要这方面的帮助。”

为此,我会说Php是服务器端语言,而javascript是客户端语言。 Ajax是从服务器反过来从服务器操作客户端的方法,而无需刷新整个页面。

下面只是一个示例,我对您的代码进行了一些编辑,以展示服务器端代码和客户端代码的分离,并给出了其工作原理的信息。我不知道代码是否有效。 还没测试 php代码(服务器端)将首先执行,但可以使用document.ready()window.load() javascript(客户端)函数控制其显示,以便尽快应用效果。更改我们需要的链接,然后才显示给客户。 对于检索和显示的每个链接,您都可以使用特定的类和jquery .each()函数对选定的链接应用特定的修复,因为上述Lyes BEN或具有特定类的所有元素都可以作为一个整体进行操作,而无需使用。每。

<?php
    $querylink = "SELECT * from links";
    $resultlink = mysql_query($querylink);

    while ($rowlink = mysql_fetch_array($resultlink))
    { 
     $thelink = $rowlink['a_link'];
     echo '<div class = "row">
                <span id = "linkhere">
                    <a href="'.$thelink.'"></a>
                 </span> 
           </div>';
    }
?>
     <script>
        $("#linkhere a").html(urlify(link));

        function urlify(text) {
           var urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g;
           //var urlRegex = /(https?:\/\/[^\s]+)/g;
           return text.replace(urlRegex, function(url,b,c) {
               var url2 = (c == 'www.') ?  'http://' +url : url;
              // return '<span style = "color:blue;text-decoration:underline">' + url + '</span>';
              return '<a href="' +url2+ '" target="_blank">' + url + '</a>';
          }) 
        }

     </script>

您可以使用带有parse_url函数( http://php.net/manual/en/function.parse-url.php )的php实现此功能,以获取不同的组件。

在parse_url中,有用于http或https的“方案”键。

然后使用php进行此操作,只需调用formatUrl函数以使url

<?php 
 function formatUrl($url)
 {
    $urlData = parse_url($url);

    if(!isset($urlData['scheme'])) {
        $url = 'http://' . $url;
    }

    return '<a href="' . $url . '" target="_blank">' . $url . '</a>';
 }
?>

<?php
 $querylink = "SELECT * from links";
 $resultlink = mysql_query($querylink);

 while ($rowlink = mysql_fetch_array($resultlink))
 { 
  $thelink = $rowlink['a_link'];
 ?>

 <div class = "row">
     <span id="linkhere"><?php echo formatUrl($thelink)?></span> 
 </div>
 <?php
 }
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM