【问题标题】:how to get values from HTML select to php\sql如何从 HTML 选择中获取值到 php\sql
【发布时间】:2014-09-07 16:45:36
【问题描述】:

我正在尝试将值从 html 表单 <select> 列表传递到 SQL 表。我已经尝试了几件事,但无法让它发挥作用。

HTML

<select class="select-list">
    <option value="volvo" class="selectval">
        Volvo
    </option>

    <option value="saab" class="selectval">
        Saab
    </option>

    <option value="mercedes" class="selectval">
        Mercedes
    </option>

    <option value="audi" class="selectval">
        Audi
    </option>
</select>

PHP

$name = filter_var($_POST['name'],FILTER_SANITIZE_STRING);
$email = filter_var($_POST['email'],FILTER_VALIDATE_EMAIL);
$email = filter_var($email,FILTER_SANITIZE_EMAIL);
$phone = filter_var($_POST['phone'],FILTER_SANITIZE_STRING);

if (empty ($name)|| empty ($email) || empty ($phone) || !isset($select)) {

    return;

} else {

    mysql_connect('localhost' , 'root' , '');
    mysql_select_db('show_express');        

    $name = clean_inputs($name);
    $email = clean_inputs($email);
    $phone = clean_inputs ($phone);     

    $sql = "INSERT INTO clients(id,name,email,phone,bands) ";
    $sql .= "VALUES('','$name','$email','$phone','$select')";
    mysql_query($sql);

    if (mysql_affected_rows()) {
        echo true;          
    }       

}


function clean_inputs($input) {
   $clean = mysql_real_escape_string(stripcslashes($input));
   return $clean;       
}

【问题讨论】:

标签: php html sql


【解决方案1】:

首先,您没有在代码中的任何地方定义/实例化$select。 那么,如果它不存在,您如何对其进行测试或插入呢?

其次,我认为您面临的问题是您的选择元素没有name 属性? (请提供您的表单代码以进行验证

所以你必须创建一个看起来像这样的选择:

<select name="car">
    <option value="audi">Audi</option>
    <option value="saab">Saab</option>
    ....etc
</select>

这反过来又允许您像这样访问选择:

$select = filter_var($_POST['car'], FILTER_SANITIZE_STRING);

注意到&lt;select&gt; 标签中的name 属性了吗?是的,您需要它来访问该值。

正如 cmets 中所述,避免使用 mysql_* 函数,因为该库已被贬值。

Look at this comment for more information as to why you should avoid them.


对于额外的 cookie 点,这里有一个示例,说明如何使用 PDO 进行插入。 (Taken from this answer)

$db = new PDO("...");
$statement = $db->prepare("insert into clients(id,name,email,phone,bands) VALUES(NULL,:name, :email, :phone, :select)");
$statement->execute(array(':name' => $name, ':email' => $email, ':phone' => $phone, ':select' => $select));
$row = $statement->fetch(); // Use fetchAll() if you want all results, or just iterate over the statement, since it implements Iterator

【讨论】:

  • 感谢安全提示,目前我正在尝试了解 PHP 的基础知识......所以安全性现在确实是一个问题......关于我的问题 - 我该如何创建定义所选值的变量?我可以这样做吗 => $select = ($_POST['name']);
  • @user3387719 如果您按照我发布的示例进行操作,您将创建一个带有 name 属性的&lt;select&gt; 元素(类似于:&lt;select name="car"&gt;)并访问它name 帖子中的属性。像这样:VALUES('','$name','$email','$phone','$select');
  • @user3387719 这能回答你的问题吗?
【解决方案2】:

您正在使用变量 $select 但它没有在任何地方启动。 你需要使用这样的东西。

 $select = filter_var($_POST['select'],FILTER_SANITIZE_STRING);

下次发布您的客户端脚本。

【讨论】:

  • 感谢您的提示,现在,关于您的出色答案:Matt W - 尽管我想正确编码,但我必须专注于我迄今为止所理解的内容 - 非常感谢您的解释 -我很快就会使用它。 Denzyl Dick - 这是我的客户端代码 - 我还不明白如何连接到 PHP、HTML、JS ......我应该如何获取这些值?通过循环/数组?我如何将提交按钮链接到整个事情 - 抱歉给您带来了麻烦......正如我所说 - 我是新人,到目前为止真的很难 - jsbin.com/gogeh/1/edit?html,js,output
  • 您可以使用 $_POST[select-list] 而不是 $_POST[select]。我看到了你的 javascript,但你需要重构它,你有 45 个错误,也许这就是你点击 sumbit 按钮时它不起作用的原因。
  • Denzyl - 感谢您的评论 - 错误仅由一行引起 - var select =$('select['value']).val());.....其余的是好的....一会儿我会检查你的提示。
【解决方案3】:

这与我使用的类似:

<?php
$db_host = 'localhost';
$db_name = 'show_express';
$db_user = 'root'; // you REALLY shouldn't use root for normal access
$db_pass = ''; // you REALLY need to use a password

$dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_pass);
if (!$dbh)
{
    print "<p>Error connecting to database</p>";
    exit;
}

$q_insert = $dbh->prepare(
    "INSERT INTO clients (name, email, phone) VALUES (?,?,?);"
);
if (!$q_insert)
{
    $err = $q_insert->errorInfo();
    print "<p>Error preparing query: ".$err[2]." [".$err[0]."]</p>";
    exit;
}

$r = $q_insert->execute(array($_POST['name'], $_POST['email'], $_POST['phone']));
if (!$r)
{
    $err = $q_insert->errorInfo();
    print "<p>Error executing query: ".$err[2]." [".$err[0]."]</p>";
    exit;
}

print "<p>Success!</p>";
?>

我强烈建议您开始学习使用 PDO 而不是 mysql_ 函数。它们更有意义,范式与其他语言保持一致,并且您获得的知识将是可移植的。

我知道这只是一个新手项目,但不要使用“root”用户,尤其是没有密码。创建一个仅对“show_express”数据库具有权限的新用户。

在提问时,如果您告诉我们如何它不起作用会很有帮助。您收到错误消息吗?数据是否以表格结尾但不正确?此外,按照这些思路,你怎么知道它不起作用。即,您使用什么来验证此代码?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 2022-07-16
    • 1970-01-01
    • 2020-02-13
    • 2014-04-01
    • 2020-11-04
    相关资源
    最近更新 更多