【问题标题】:Variables losing their values [duplicate]变量丢失其值[重复]
【发布时间】:2018-03-19 09:35:07
【问题描述】:

我决定接受给我的建议,并以 PDO 格式重写我的代码。一切正常,除了我似乎无法在 UPDATE 语句(PHP 的最后一个块)中传递变量 $idvar 和 $newvar 的值。这些变量似乎在 POST 之后就失去了它们的值。我试过使用隐藏变量但没有成功。我已经解决这个问题3周了。我确信答案很简单,但问题是我更简单。任何指针将不胜感激。我希望我已经提供了足够的信息并正确格式化。谢谢,马克

<!DOCTYPE html>
<html>
<head>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/codemirror.min.css">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/froala-editor/2.7.0/css/froala_editor.pkgd.min.css" rel="stylesheet" type="text/css" />
    <link href="https://cdnjs.cloudflare.com/ajax/libs/froala-editor/2.7.0/css/froala_style.min.css" rel="stylesheet" type="text/css" />
</head>
<body id="main">



<?php
$dsn = 'mysql:dbname=my_db_name;host=127.0.0.1';
$user = 'my_user';
$password = 'my_password';

try {
    $conn = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>



<?php

$stmt = $conn->prepare('SELECT * FROM tblContent');
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>


<form method="POST">
<div style="text-align:center">
<select name="select1" onchange="this.form.submit()">


  <option value="null">Choose Page</option> 
  <?php
foreach($results as $row) { ?>
  <option value="<?php echo $row['contentID']; ?>"><?php echo $row['contentpage']; ?></option>
<?php
} ?>
</select>
</div> 

</form>



<?php
if(isset($_POST['select1'])) {
$idvar = $_POST['select1'];
}
?>






<?php
$stmt2 = $conn->prepare('SELECT * FROM tblContent WHERE contentID = :parameter');
$stmt2->bindParam(':parameter', $idvar, PDO::PARAM_INT);
$stmt2->execute();
$results2 = $stmt2->fetchAll( PDO::FETCH_ASSOC );
foreach( $results2 as $row ){
$newvar = $row["content"];
}
?>



    <!-- Include external JS libs. -->
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/codemirror.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/mode/xml/xml.min.js"></script>

    <!-- Include Editor JS files. -->
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/froala-editor/2.7.0/js/froala_editor.pkgd.min.js"></script>

    <!-- Initialize the editor. -->
    <script> $(function() { $('textarea').froalaEditor() }); </script>


<div class="fr-view">
<textarea>
<?php 
if(isset($_POST['select1'])) {
echo $row['content'];
}
?>
</textarea>
</div>  

</div>


<script>
    initSample();
</script>


<?php
/*variable values display ok here*/
echo $idvar;
$echo $newvar;
?>


<div style="text-align:center">

<form method = "POST">
<input type="submit" name="submit1" id="button" value="Submit" />

<?php
if(isset($_POST['submit1'])) {

/*variable values lost by this line*/

$stmt3 = $conn->prepare('UPDATE tblContent SET content = :content WHERE contentID = :id');
$stmt3->bindParam(':content', $newvar, PDO::PARAM_INT);
$stmt3->bindParam(':id', $idvar, PDO::PARAM_INT);
$stmt3->execute();
}

?>
</form>



</div>

</body>
</html>

【问题讨论】:

  • 你能用简单的话简单解释一下你试图用这个脚本实现什么吗?
  • 这段代码是一个可怕的组合。您必须学会分离事物以保持概述。不要混合表单及其处理代码。我知道大多数初学者教程都显示了这一点,但它仍然很愚蠢。
  • 当然。我有一个包含页面名称的下拉列表。我选择一个并将该页面的内容放入 Froala WYSYWIG 编辑器。我想编辑它并使用该页面的内容更新数据库。
  • 你使用 ':content', $newvar, PDO::PARAM_INT
  • 你介意给我看 arkascha,因为我认为我确实把所有东西都分开了

标签: php


【解决方案1】:

需要引用:我添加了 &

$stmt3->bindParam(':content', &$newvar, PDO::PARAM_INT);
$stmt3->bindParam(':id', &$idvar, PDO::PARAM_INT)

【讨论】:

  • 如果我把 & 放在前面,我会得到一个错误从 PHP 5.3.0 开始,当你在 foo 中使用 & 时,你会得到一个警告,说“调用时传递引用”已被弃用(&$a);。从 PHP 5.4.0 开始,调用时传递引用已被删除,因此使用它会引发致命错误。
  • 这太令人沮丧了。我知道即使我的代码结构不是很好(我稍后会担心),我也非常接近让它工作。
  • 不认为有人可以花一点时间和我一起工作吗?
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 2021-04-28
  • 2012-07-30
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 2018-04-07
  • 2013-03-28
相关资源
最近更新 更多