是否可以在PHP标记的类或名称属性中嵌入PHP代码?

问题描述 投票:0回答:3

我正在尝试通过博客文章创建一个类似的按钮。我面临的问题是我无法将每个博客文章中的按钮链接起来。目前,所有类似的按钮共享相同的类和名称属性。我试着使用以下内容:

 <?php 

 include_once('connectserver.php');

 $query_blog = mysql_query("SELECT             `category_x`,`sub_category_x`,`specified_sub_category_x`,`tag_1`,`tag_2`,`tag_3`,`title`,`contents`,`date_posted` FROM `posts` ORDER BY `date_posted` DESC");

 while($get_rows = mysql_fetch_assoc($query_blog)) {





 $get_title = $get_rows['title'];
 $get_category = $get_rows['category_x'];
 $get_sub_category = $get_rows['sub_category_x'];
 $get_specified_sub_category = $get_rows['specified_sub_category_x'];
 $get_tag1 = $get_rows['tag_1'];
 $get_tag2 = $get_rows['tag_2'];
 $get_tag3 = $get_rows['tag_3'];
 $get_contents = $get_rows['contents'];
 $get_date_posted = $get_rows['date_posted'];


 $new_date = date('dS F Y', strtotime($get_date_posted));



 echo "<p class='blog-heading' align='left'><font face='Narkisim' size='5' color='#3E537C'>       <strong>".$get_title."</strong></font></p>";
 echo "<br><pre class='blog-underheading'><font face='David' size='2' color='black'><font   face='David' size='3' color='#0040A1'>".$new_date."</font> BY <a class='blog-link1' href='home.php'></a>  |  <a class='blog-link1' href='eere'>UpVote</a></font></pre><br>";
 echo "<br><p class='blog-content' align='justify'><font size='4' face='Narkisim'   color='#545B6A'>".$get_contents."</font></p><br><hr><br>";



 echo "<pre class='blog-ending'><font face='David' size='2' color='black'>|  POSTED IN <a class='blog-link1' href='eere'>".strtoupper($get_category)."</a>, <a class='blog-link1' href='eere'>".strtoupper($get_sub_category)."</a>, <a class='blog-link1' href='eere'>".strtoupper($get_specified_sub_category)."</a>  |  TAGGED <a class='blog-link1' href='eere'>".strtoupper($get_tag1)."</a>, <a class='blog-link1' href='eere'>".strtoupper($get_tag2)."</a>, <a class='blog-link1' href='eere'>".strtoupper($get_tag3)."</a>  |</font></pre><br><hr>";

回声“


";

回声“ “;}

?>

这段代码用于在每次创建新博客帖子时递增博客计数器,以便我可以将我的博客帖子与该唯一名称字段链接起来。这在概念上是否可行,如果不是,我可以使用哪些其他方法来解决问题。上面的代码片段给出了错误btw。

javascript php html facebook-like
3个回答
1
投票

您可以在查询博客帖子时尝试,也可以查询博客帖子ID(假设您的数据库中有一个。您应该始终为每条记录设置一个PRIMARY KEY)。创建按钮时,您可以执行以下操作:

echo "<button class="..." name="$BlogID" type="submit">Like</button>";

或者为您获取的每个博客帖子创建一个隐藏的输入。因此,当您提交表单时,隐藏的输入将随之提交。

echo "<input type="hidden" name="postID" value="$blogID">";

然后,您尝试传递给的PHP脚本可以处理该值并相应地修改数据库。

PS你应该我们PHP扩展PDO做你的数据库查询。 mysql_query()方法不是那么强大。当我开始我的第一个web项目时,我犯了这个错误,现在我必须使用PDO重写它。希望这篇文章有用!


0
投票

通常,不是在服务器端代码中使用计数器,而是在数据库中使用某种序列,或者与博客文章内容一起存储的其他uinique标识符。例如,许多人将对表中的每一行使用整数主键(例如,blog_post表中的所有行都具有colum blog_post_id)。如果此主键设置为AUTO INCREMENT / SEQUENCE或数据库软件使用的任何内容,则每个博客帖子都会自动增加该主键。

当您检索博客帖子时,blog_post_id将随之出现。假设您的行是关联数组。你可以这样做:

<form method="post" action="/like-blog-post.php" >
<?php foreach($rows as $row) { ?>
   <input type="submit" name="blog_post_<?php echo $row['blog_post_id']; ?> value="Like!" />
<?php } ?>
</form>

只要有人点击了类似按钮,就会将帖子发送到服务器,然后您会收到/like-block-post.php的帖子请求

以这种方式进行这种操作虽然有点笨拙。它导致页面更改,必须解析博客帖子ID,并且名称/值实际上在$ _POST数组的键中。

另一种方法是通过像这样的链接标签(您可以设置链接的样式,使其看起来像一个按钮):

<?php foreach($rows as $row) { ?>
<a href="like-blog-post.php?blog_post_id="<?php echo $row['blog_post_id']; ?>">Like!</a>
<?php } ?>

这仍然会导致页面更改,但数据在服务器端更容易处理。这也是有问题的,因为任何人都可以用博客帖子ID垃圾邮件,并且无限次地喜欢它。为了防止这种情况,您需要使用查询参数传递会话ID和csrf标记。页面加载后,您可以通过javascript添加onclick处理程序来解决页面更改问题。设置处理程序的代码可以使用href属性中完全相同的URL,但是onclick处理程序可以异步生成请求以避免页面更改。

我会从链接或按钮开始小,然后按照每个博客帖子添加保护以防止每个用户的多个喜欢,然后避免页面更改/刷新。

你绝对不应该维护自己的博客文章,这是一个最适合数据库的任务。如果你不想使用行id,你可以提出一些其他唯一标识符列,将其索引为UNIQUE,并使用它来查找已被喜欢的博客帖子。

最初看起来你问是否可以写出客户端的PHP代码并让它运行。如果你对此感到好奇,答案是否定的。一旦页面被传递到客户端,任何PHP代码将只是文档中的文本。客户端不会执行它。


0
投票

请写这样的代码。它会给你更好的主意。

<?php
include_once ('connectserver.php');
$query_blog = mysql_query("SELECT 
                        `category_x`,
                        `sub_category_x`,
                        `specified_sub_category_x`,
                        `tag_1`,
                        `tag_2`,
                        `tag_3`,
                        `title`,
                        `contents`,
                        `date_posted` 
                FROM 
                `posts` 
                ORDER BY `date_posted` DESC");
while ($get_rows = mysql_fetch_assoc($query_blog))
{
    $get_title = $get_rows['title'];
    $get_category = $get_rows['category_x'];
    $get_sub_category = $get_rows['sub_category_x'];
    $get_specified_sub_category = $get_rows['specified_sub_category_x'];
    $get_tag1 = $get_rows['tag_1'];
    $get_tag2 = $get_rows['tag_2'];
    $get_tag3 = $get_rows['tag_3'];
    $get_contents = $get_rows['contents'];
    $get_date_posted = $get_rows['date_posted'];
    $new_date = date('dS F Y', strtotime($get_date_posted));
?>
<p class='blog-heading' align='left'>
    <font face='Narkisim' size='5' color='#3E537C'>
        <strong>
            "<?=$get_title?>"
        </strong>
    </font>
</p>

<br>
<pre class='blog-underheading'>
    <font face='David' size='2' color='black'>
        <font face='David' size='3' color='#0040A1'>
            "<?=$new_date?>"
        </font>
        BY
        <a class='blog-link1' href='home.php'>User Name</a>
        |
        <a class='blog-link1' href='eere'>UpVote</a>
    </font>
</pre>
<br>

<br>
<p class='blog-content' align='justify'>
    <font size='4' face='Narkisim' color='#545B6A'>
        "<?=$get_contents?>"
    </font>
</p>
<br>
<hr>
<br>

<pre class='blog-ending'>
    <font face='David' size='2' color='black'>
        | POSTED IN
        <a class='blog-link1' href='eere'>". <?=strtoupper($get_category)

?>"</a>
        ,
        <a class='blog-link1' href='eere'>"<?=strtoupper($get_sub_category)?>"</a>
        ,
        <a class='blog-link1' href='eere'>"<?=strtoupper($get_specified_sub_category)?>"</a>
        | TAGGED
        <a class='blog-link1' href='eere'>"<?=strtoupper($get_tag1)?>"</a>
        ,
        <a class='blog-link1' href='eere'>"<?=strtoupper($get_tag2)?>"</a>
        ,
        <a class='blog-link1' href='eere'>"<?=strtoupper($get_tag3)?></a>
        |
    </font>
</pre>
<br>
<hr>
<?php
}
?>
© www.soinside.com 2019 - 2024. All rights reserved.