我正在使用此代码根据表格结果在数据库中进行轻松搜索
class Data {
public $vin = null;
public function __construct( $data = array() ) {
if( isset( $data['vin'] ) ) $this->vin = stripslashes( strip_tags( $data['vin'] ) );
}
public function storeFormValues( $params ) {
$this->__construct( $params );
}
public function fetchByVin() {
$success = false;
try{
$con = new PDO( DB_HOST, DB_USER, DB_PASS );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "SELECT * FROM evidence_vin WHERE vin = :vin LIMIT 1";
$stmt = $con->prepare( $sql );
$stmt->bindValue( "vin", $this->vin, PDO::PARAM_STR );
$stmt->execute();
$valid = $stmt->fetchColumn();
if( $valid ) {
$success = true;
}
echo "<table>";
echo "<th>Progress</th>";
echo "<th>Claim number</th>";
echo "<th>Make</th>";
echo "<th>Status</th>";
echo "<th>View</th>";
while ($row = $stmt->fetch()){
echo "<tr>";
echo "<td>24</td>";
echo "<td>".$row['claim_number']."</td>";
echo "<td>".$row['licence']."</td>";
echo "<td>".$row['country']."</td>";
echo "<td>".$row['vin']."</td>";
echo "<td><a href=\"detail.php?id=".$row["id"]."&action=detail\">detail</td>";
echo "</tr>";
}
}catch(PDOExeption $e){
$e->getMessage();
}
echo "</table>";
return $success;
}
我的表单如下所示:
<form method="post" action="">
<p class="input_description">
Search by VIN
</p>
<p class="input_field">
<input type="text" maxlength="30" required autofocus name="vin">
</p>
<input type="submit" value="Search" name="send">
</div>
</form>
<?php
$data = new Data;
$usr->storeFormValues( $_POST );
if( $usr->fetchByVin() ) {
echo "Prebehne presmerovanie....";
} else {
echo "VIN nebolo nájdene";
}
}
}
else {
echo "Prosím prihláste sa <a href='login.php'> TU </a>";
}
?>
有人可以告诉我我做错了什么以及为什么它只显示我的空白表格,没有任何值,尽管我搜索实际上在数据库中的 vin?
最佳答案
您错过了文件末尾的 }
和 Data
类。
您应该始终在文件的开头添加:
error_reporting(E_ALL);
ini_set('display_errors','1');
显示所有错误。
编辑
其他可能的错误:
PDO 中未选择数据库
和
$data = new Data;
$usr->storeFormValues( $_POST );
...
$usr
在这里没有定义,因为对象是 $data
当然还有这个 PHP 代码:
<?php
$data = new Data;
$usr->storeFormValues( $_POST );
if( $usr->fetchByVin() ) {
echo "Prebehne presmerovanie....";
} else {
echo "VIN nebolo nájdene";
}
}
}
else {
echo "Prosím prihláste sa <a href='login.php'> TU </a>";
}
?>
无效(太多结束 }
)
编辑2
请查看以下工作代码:
<?php
error_reporting(E_ALL);
ini_set('display_errors','1');
define('DB_HOST', 'mysql:host=localhost;dbname=testdb');
define('DB_USER', 'root');
define('DB_PASS', '');
class Data
{
public $vin = null;
public function __construct($data = array())
{
if (isset($data['vin'])) {
$this->vin = stripslashes(strip_tags($data['vin']));
}
}
public function storeFormValues($params)
{
$this->__construct($params);
}
public function fetchByVin()
{
$success = false;
try {
$con = new PDO(DB_HOST, DB_USER, DB_PASS);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM evidence_vin WHERE vin = :vin LIMIT 1";
$stmt = $con->prepare($sql);
$stmt->bindValue("vin", $this->vin, PDO::PARAM_STR);
$stmt->execute();
$row = $stmt->fetch();
if ($row === false) {
return false;
}
$success = true;
echo "<table>";
echo "<th>Progress</th>";
echo "<th>Claim number</th>";
echo "<th>Make</th>";
echo "<th>Status</th>";
echo "<th>View</th>";
echo "<tr>";
echo "<td>24</td>";
echo "<td>" . $row['claim_number'] . "</td>";
echo "<td>" . $row['licence'] . "</td>";
echo "<td>" . $row['country'] . "</td>";
echo "<td>" . $row['vin'] . "</td>";
echo "<td><a href=\"detail.php?id=" . $row["id"] . "&action=detail\">detail</td>";
echo "</tr>";
} catch (PDOExeption $e) {
$e->getMessage();
}
echo "</table>";
return $success;
}
}
?>
<form method="post" action="">
<p class="input_description">
Search by VIN
</p>
<p class="input_field">
<input type="text" maxlength="30" required autofocus name="vin">
</p>
<input type="submit" value="Search" name="send">
</div>
</form>
<?php
if (!empty($_POST)) {
$data = new Data;
$data->storeFormValues($_POST);
if ($data->fetchByVin()) {
echo "Vin found - details above";
} else {
echo "VIN not found";
}
}
?>
它消除了所有错误以及 fetchColumn
方法的使用。这段代码运行良好。然而,它仍然不是按函数回显数据并返回 bool 的最佳方式。如果数据不同于 false,您应该返回数据并检查主文件。
关于PHP - 轻松从数据库中选择 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25242739/