【问题标题】:unable to run php function to update db value using document.write [duplicate]无法使用 document.write 运行 php 函数来更新 db 值 [重复]
【发布时间】:2016-04-18 14:48:49
【问题描述】:

在下面给出的代码中,我使用转发器字段来存储图像链接和排名。在前端我试图实现这样的事情:当我为图像选择不同的排名并单击update rank 按钮时,页面应该更新数据库中的排名并使用新排名重新加载页面。但是,当单击任何按钮时,代码会完全删除排名。在故障排除时,我发现 document.write 没有将值传递给函数。下面给出的是我的代码:

<form id="myform" name="myform" action="" method="POST" >
<article class="col-xs-12 col-sm-12 col-md-12 col-lg-12 ">

<?php   
global $post;

$bookid=get_the_title($post->ID);;
$args = get_posts(array('post_type' => 'bookgallery' ,'post_title' =>$bookid, 'posts_per_page' => -1
));
?>

<?php
foreach ( $args as $post ) :  setup_postdata($post);

if (!empty($post))
    {  
    $allimg=$allrank=array();

    while( have_rows('imgs') ): the_row();
    $temprank=get_sub_field('rank',$post->ID);  
    $tempimg=get_sub_field('imglink',$post->ID);

    $allimg[]=$tempimg;
    $allrank[]=$temprank;

    if ($temprank=='1st') {
    $rank1img= $tempimg;
    $rank1='1st';
    } 
    if ($temprank=='2nd') {
    $rank2img= $tempimg;
    $rank2='2nd';
    } 
    if ($temprank=='3rd') {
    $rank3img=$tempimg;
    $rank3='3rd'
    } 



    endwhile;

    if (!empty($rank1img)){
    ?>
    <div >

    <img src="<?php echo $rank1img; ?>" alt="" >

    <div >1st
        <select name="rank1">
            <option value="0"> </option>
            <option value="1">1st</option>
            <option value="2">2nd</option>
            <option value="3">3rd</option>
            <option value="4">act</option>           
                </select>
    </div>   

    <div ><input type="submit" name="rank1btn" value="update rank" id="rank1btn" onclick="document.write('<?php updatemypage($rank1img,$_POST['rank1']); ?>')" ></div>   
    </div>   
    <?php } 
    if (!empty($rank2img)){
    ?>
    <div >2nd

    <img src="<?php echo $rank2img; ?>" alt="" > 

    <div >
        <select name="rank2">
            <option value="0"> </option>
            <option value="1">1st</option>
            <option value="2">2nd</option>
            <option value="3">3rd</option>
            <option value="4">act</option>
                </select>
    </div>   

    <div ><input type="submit" name="rank2btn" value="update rank" id="rank2btn" onclick="document.write('<?php updatemypage($rank2img,$_POST['rank2']); ?>')" ></div>     
    </div>
     <?php } 
    if (!empty($rank3img)){
    ?>   

     <div>3rd  

    <img src="<?php echo $rank3img; ?>" alt="" >   
    <div>
        <select name="rank3">
            <option value="0"> </option>
            <option value="1">1st</option>
            <option value="2">2nd</option>
            <option value="3">3rd</option>
            <option value="4">act</option>
                </select>
    </div>   

    <div><input type="submit" name="rank3btn" value="update rank" id="rank3btn" onclick="document.write('<?php updatemypage($rank3img,$_POST['rank3']); ?>')"  ></div>     
    </div>
     <?php }    

?>


    }

}     

 endforeach; ?>

</article> 
</form>
<?php

function update_ranks($newimgurl,$newrank){

switch ($newrank)
{
case "1":
      $rank="1st";
      break;
case "2":
      $rank="2nd";
      break;
case "3":
      $rank="3rd";
      break;


}


        $field_key = "field_582fdg46";  
        $value=array();
        $count=0;
        global $totalimgs;
        global $allimgurl;          
                global $allimgranks;               

        while ($count < $totalimgs){

        if ($allimgurl[$count]==$newimgurl){
        $value[] = array("imglink" => $newimgurl,"rank" => $rank );

        }
        else{
        $value[] = array("imglink" => $allimgurl[$count],"rank" => $allimgranks[$count] );      
        }
        $count=$count+1;        
        update_field( $field_key, $value, $post->ID);


        }
        unset($newrank,$newimgurl,$currentnewrank,$rank,$count);    
        unset($allimgurl,$allimgranks,$totalimgs,$value);   


}
?>

【问题讨论】:

  • php 在页面加载之前在服务器端执行。 javascript 在页面加载后在客户端执行。所以javascript不能直接运行php函数。所以onclick="document.write('&lt;?php updatemypage($actbookimg[$actcount],$_POST[$actselectid]); ?&gt;')" 在客户端不起作用。 php 函数 updatemypage() 在初始页面加载时运行,并且由于 $_POST 很可能是空的,这导致了您的问题。您可能想使用 ajax 将值发送到 php 以执行代码。
  • 更新数据库需要使用ajax。

标签: javascript php


【解决方案1】:

cmets 说了这么多,但我会总结一下。 PHP 作为服务器端语言在代码到达您的浏览器之前进行评估 - 另一方面,作为客户端语言的 javascript 仅在您的浏览器从服务器接收到信息后执行。要使用 javascript 调用 php 函数,您需要发出异步请求(如果您至少不希望页面重新加载)。 Ajax 请求示例(来自http://www.w3schools.com/php/php_ajax_php.asp):

var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
        }
    };
    xmlhttp.open("GET", "gethint.php?q=" + str, true);
    xmlhttp.send();

此外,在您的 php 代码中,您还需要一个返回所需信息的函数,例如 if($_GET['q'] ==...){//your function here}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    相关资源
    最近更新 更多