【发布时间】: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