Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于填充选择列表的数据库_Php_Database_Selection_Populate - Fatal编程技术网

Php 用于填充选择列表的数据库

Php 用于填充选择列表的数据库,php,database,selection,populate,Php,Database,Selection,Populate,我正在尝试创建一个表单,在该表单中有一个选择列表,其中的选项将自动填充来自数据库的数据(即客户的姓氏),然后从列表中选择姓氏并点击“提交”按钮时,将显示“客户ID”与数据库中的姓氏相关的名称将提交到另一个PHP文件(task8.PHP),通过进一步的查询发送。我希望我已经以一种可以理解的方式解释了这一切。我尝试过一些代码,但我真的不确定如何做到这一点,或者我所写的是否在正确的道路上 以下是我到目前为止所写的内容: <body> <?php $conn = mysql_conn

我正在尝试创建一个表单,在该表单中有一个选择列表,其中的选项将自动填充来自数据库的数据(即客户的姓氏),然后从列表中选择姓氏并点击“提交”按钮时,将显示“客户ID”与数据库中的姓氏相关的名称将提交到另一个PHP文件(task8.PHP),通过进一步的查询发送。我希望我已经以一种可以理解的方式解释了这一切。我尝试过一些代码,但我真的不确定如何做到这一点,或者我所写的是否在正确的道路上

以下是我到目前为止所写的内容:

<body>

<?php
$conn = mysql_connect("localhost", "twa312", "dam6av9a");
mysql_select_db("warehouse312", $conn)
or die ('Database not found ' . mysql_error() );

$sql = "select customerID, lastName from customer";
$rs = mysql_query($sql, $conn)
or die ('Problem with query' . mysql_error());

$options= '<option value="0">Choose</option>';

while ($row=mysql_fetch_array($rs)) {
$id=$row["customerID"];
$name=$row["lastName"];
$options="<OPTION VALUE='" . $id . "'>" . $name ."</option>";
}

?>

<form method="GET" action="task8.php" id="custinfo" >

Choose name:<select name="lname" id="lname"><?php echo $options; ?>  
</select>

<p><input type="submit" name="submit" value="Save Data"/>&nbsp;<input type="reset" value="Clear Form" />

</form>


代码中有一个错误,我可以看到它会导致PHP生成通知错误

while
循环中,您正在对尚未定义的
$options
变量使用
=
,因此PHP将在该变量上呕吐

除此之外,在迭代mysql的结果集之前,等待设置
$\u GET['submit']
对我来说没有意义。据我所知,您第一次点击此页面时,选择(“选择”)中只有一个选项,而且由于表单提交到另一个页面,我认为您不会看到客户姓氏列表


最后,不建议将提交按钮命名为“提交”,因为当浏览器解析页面时,特定表单的所有表单元素都被创建为该表单的属性,JS表单对象有一个“submit”方法,因此当您将输入命名为“submit”时,您会在表单对象中删除该值,这使得使用JS提交表单非常困难。

首先远离mysql\u函数

其次,创建一个模型,其中包含与客户相关的所有查询,这些查询将处理与客户数据库相关的数据的获取/放入/更新

<?php 
Class CustomerModel{
    private $db;

    function __construct($host,$dbname,$user,$pass){
        $this->dbhost = $host;
        $this->dbname = $dbname;
        $this->dbuser = $user;
        $this->dbpass = $pass;
    }

    private function connect(){
        if (!$this->db instanceof PDO){
            $this->db = new PDO('mysql:dbname='.$this->dbname.';host='.$this->dbhost, $this->dbuser, $this->dbpass);
            $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
            $this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
        }
    }

    public function select_all_customer($cols="*"){
        $this->connect();
        $sql = "SELECT $cols FROM customer";
        $statement = $this->db->prepare($sql);
        $statement->execute();
        return $statement->fetchAll(PDO::FETCH_ASSOC);
    }

    public function select_customer($cols="*",$where=null, $id=null){
        $this->connect();
        $sql = "SELECT $cols FROM customer WHERE $where = :id";
        $statement = $this->db->prepare($sql);
        $statement->bindParam(':id', $id, PDO::PARAM_STR);
        $statement->execute();
        return $statement->fetchAll(PDO::FETCH_ASSOC);
    }

}
?>

现在,您可以访问以下模型:


选择名称:
选择


希望有帮助

实际问题是什么?在while循环中打印您的选项。1.php代码之前的表单、选择等。循环时获取-打印选项。Close select,formSorry,我收到了一个一般性的“服务器错误HTTP error 500(内部服务器错误)”您可能想检查Apache错误日志,这可能暗示了问题,我的代码中似乎没有错误?事实上,现在我真的看到了代码,您在
while
循环中遇到了一些解析错误。分配
$id
$name
的行需要以分号结尾。谢谢!现在至少我可以看到我的表单了,现在的问题是数据库中没有显示任何选项。在意识到你是对的并且没有任何意义之后,我还去掉了$\u GET['submit'],正如我在回答中所说的,这可能是因为你在等待
$\u GET['submit']
在迭代结果之前设置,或者因为未初始化
$options
。进入循环之前,将
$options
初始化为“选择”选项<代码>$options='Choose'我已更改代码并设法从数据库中获取值,但它在选择列表中仅显示一个名称,而不是所有名称。如果您能够帮助我解决问题,我已更改上述代码。
<form method="POST" action="task8.php" id="custinfo" >
Choose name:
<select name="customerID" id="customerID">
    <option value="0">Choose</option>
    <?php foreach($customer->select_all_customer("customerID, lastName") as $row): ?>
      <option value="<?php echo $row['customerID']?>"><?php echo $row['lastName']?></option>
    <?php endforeach; ?>
</select>
<p><input type="submit" name="submit" value="Save Data"/>&nbsp;<input type="reset" value="Clear Form" />
</form>


<?php 
//Get customer from form values
if($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['customerID'])){
    $result = $customer->select_customer("*", "customerID", $_POST['customerID']);
    //Do something with result
    echo '<pre>'.print_r($result, true).'</pre>';

}
?>