【问题标题】:Why doesnt HTML-form insert values into Mysql?为什么 HTML 表单不向 Mysql 插入值?
【发布时间】:2017-08-23 20:16:28
【问题描述】:

所以 PHP 脚本实际上与服务器建立了连接,但不知何故 localhost 的数据库没有填满。我可能做错了什么?

脚本.php

<?php
$link = mysqli_connect("127.0.0.1", "root", "", "testdb");

if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}

echo "Success: A proper connection to MySQL was made! The my_db database is 
great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;

$klas = isset($_POST['klasDown']);
$naam = isset($_POST['naamTxt']);

$stmt = $link->prepare("INSERT INTO resultaten (Klas, Naam) VALUES (?, ?");
if (!$stmt) {
echo "false";
} else {
$stmt->bind_param("ss", $klas, $naam);
$stmt->execute();
}


mysqli_close($link);
?>

HTML:

<form id="myForm" method="post" action="script.php">
Naam: <input name="naamTxt" type="text" maxlength="512" 
id="naamTxt" class="searchField"/> <br>

Klas: <select name="klasDown">
  <option value="H4A" selected="selected">H4A</option>
  <option value="H4B" >H4B</option>
  <option value="H4C">H4C</option>
  <option value="H4C">H4D</option>
  <option value="H4C">V4A</option>
  <option value="H4C">V4B</option>
  <option value="H4C">V4C</option>
  <option value="H4C">V4D</option>  
</select> 


<div class="row">
<div class="col-4">1. Kies 1/5 </div>
<div class="col text-center"><input type="radio" name="v1" id="v1_1" 
value="Helemaal mee oneens"></div>
<div class="col text-center"><input type="radio" name="v1" id="v1_2" 
value="Deels oneens"></div> 
<div class="col text-center"><input type="radio" name="v1" id="v1_3" 
value="Neutraal"></div> 
<div class="col text-center"><input type="radio" name="v1" id="v1_4" 
value="Deels mee eens"></div> 
<div class="col text-center"><input type="radio" name="v1" id="v1_5" 
value="Helemaal mee eens"></div>
</div>

<input type= "submit" style="text-align: center" 
onclick="bereken()">
</form>

^ 上面是 Html 表单

Bereken() 函数:

function bereken() {

    var e = 0;
    var c = 0;


    if(document.getElementById('v1_1').checked)  {
      c = c - 0
    }else if(document.getElementById('v1_2').checked)  {
      c += 1;
    }else if(document.getElementById('v1_3').checked)  {
      c += 2;
    }else if(document.getElementById('v1_4').checked)  {
      c += 3;
    }else if(document.getElementById('v1_5').checked){
      c += 4;
    }

    var klas = li.options[li.selectedIndex].value;
    var naam = document.getElementById('searchTxt').value;

    alert(klas + ", " + naam);
}

^ 这是 Javascript bereken() 函数。 显然代码太多,所以不得不添加一些文字。

【问题讨论】:

  • 这与phpmyadmin无关。
  • @SLaks 你能解释一下吗?
  • PHPMyAdmin 不是数据库。它是 MySQL 数据库的 Web 界面。
  • 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db-&gt;prepare("…”) 过程接口是 PHP 4 时代引入 mysqli API 时的产物,不应在新代码中使用。您在这里无缘无故地混合和匹配样式。尝试并专门使用较新的表单。
  • 一致性很重要。在编程中,每个字符都很重要,而由混淆或拼写错误引起的简单错误通常需要数小时或数天才能消除。尽量让事情有条理,尽可能保持一致,这样你就不会犯这样的愚蠢错误。

标签: php html mysql forms


【解决方案1】:

替换

$klas = isset($_POST['klasDown']);
$naam = isset($_POST['naamTxt']);

$klas = $_POST['klasDown'];
$naam = $_POST['naamTxt'];

isset 将返回一个布尔值,而不是您期望的字符串。

【讨论】:

  • 感谢您的回复,但现在我收到消息:注意:未定义索引:klasDown
  • 和注意:未定义索引:naamTxt
  • 这些数据应该来自哪里?
  • 从带有表单的html页面,我会更新问题
  • 一切似乎都很好。您是使用&lt;button type="submit"&gt; 还是使用 Ajax 提交?
【解决方案2】:

在 script.php 上执行以下操作

如果(isset($_POST['submit''])){

$klas = $_POST['klasDown'];

$naam = $_POST['naamTxt'];

$stmt = $link->prepare("INSERT INTO resultaten (Klas, Naam) VALUES (?, ?");

如果 (!$stmt) {

回显“假”;

} 其他 {

$stmt->bind_param('ss', $klas, $naam);

$stmt->执行();

}

}

将按钮替换为以下内容

输入类型=“提交”

name="提交"

value="Verstuur"

style="text-align: center"

onsubmit="bereken()"

【讨论】:

  • 刚刚这样做了,但我的数据库中仍然没有记录:(。像“注意:未定义的索引:naamTxt”这样的错误消息已经消失了
  • 只是尝试重命名您的输入名称并使用其他名称
  • if(isset($_POST['submit'])){
  • 按照以下示例并应用 100% 有效
    Naam:
  • 复制和测试
【解决方案3】:

我希望以下内容可以证明对更新数据库有用。 javascript 函数本身现在提交表单(基于原始想法),这样做允许您使用带有要发送的值的 alert 语句。我最初在 javascript 函数中收到关于未定义 li 的错误 - 因此使用 querySelector 来识别表单元素。

在这种情况下,表单提交到同一页面,但表单操作可以像以前一样轻松设置,我现在只是为了编写代码。 sql 使用准备好的语句 - 未经测试,但应该(?!)没问题。

<?php
    if( $_SERVER['REQUEST_METHOD']=='POST' ){

        try{

            $dbuser='root';
            $dbpwd='';
            $dbhost='localhost';
            $dbname='testdb';

            $link=new mysqli( $dbhost, $dbuser, $dbpwd, $dbname );


            if( !$link ) {
                $message=sprintf( "Error: Unable to connect to MySQL.\nDebugging errno: %s\nDebugging error: %s" );
                throw new Exception( $message, $link->errno, $link->error );
            }

            $klas = !empty( $_POST['klasDown'] ) ? filter_input( INPUT_POST, 'klasDown', FILTER_SANITIZE_STRING ) : false;
            $naam = !empty( $_POST['naamTxt'] ) ? filter_input( INPUT_POST, 'naamTxt', FILTER_SANITIZE_STRING ) : false;

            if( !$klas ) throw new Exception('klas cannot be empty');
            if( !$naam ) throw new Exception('naam cannot be empty');

            $stmt = $link->prepare( "insert into `resultaten` (`klas`, `naam`) values ( ?, ? )" );
            if( $stmt ){

                $stmt->bind_param( 'ss', $klas, $naam );
                $result=$stmt->execute();
                if( !$result )throw new Exception('SQL insert failed');

            } else {
                throw new Exception('Failed to prepare SQL query');
            }


            $stmt->free_result();
            $stmt->close();
            $link->close();

        }catch( Exception $e ){
            echo $e->getMessage();
        }

    }
?>
<!doctype html>
<html>
    <head>
        <title>Bereken</title>
        <script>

            function bereken() {
                var e = 0;
                var c = 0;

                if(document.getElementById('v1_1').checked)  {
                  c = c - 0
                }else if(document.getElementById('v1_2').checked)  {
                  c += 1;
                }else if(document.getElementById('v1_3').checked)  {
                  c += 2;
                }else if(document.getElementById('v1_4').checked)  {
                  c += 3;
                }else if(document.getElementById('v1_5').checked){
                  c += 4;
                }
                var li=document.querySelector('select[name="klasDown"]')
                var klas = li.options[li.selectedIndex].value;
                var naam = document.getElementById('naamTxt').value;

                alert( klas + ", " + naam );
                document.forms['myForm'].submit();
            }

        </script>
    </head>
    <body>
        <form id="myForm" method="post">
            Naam: <input name="naamTxt" type="text" maxlength="512" id="naamTxt" class="searchField"/> <br>

            Klas: <select name="klasDown">
              <option value="H4A" selected="selected">H4A</option>
              <option value="H4B" >H4B</option>
              <option value="H4C">H4C</option>
              <option value="H4C">H4D</option>
              <option value="H4C">V4A</option>
              <option value="H4C">V4B</option>
              <option value="H4C">V4C</option>
              <option value="H4C">V4D</option> 
            </select> 


            <div class="row">
                <div class="col-4">1. Kies 1/5 </div>
                <div class="col text-center">
                    <input type="radio" name="v1" id="v1_1" value="Helemaal mee oneens">
                </div>
                <div class="col text-center">
                    <input type="radio" name="v1" id="v1_2" value="Deels oneens">
                </div> 
                <div class="col text-center">
                    <input type="radio" name="v1" id="v1_3" value="Neutraal">
                </div> 
                <div class="col text-center">
                    <input type="radio" name="v1" id="v1_4" value="Deels mee eens">
                </div> 
                <div class="col text-center">
                    <input type="radio" name="v1" id="v1_5" value="Helemaal mee eens">
                </div>
            </div>
            <button type="button" style="text-align: center" onclick="bereken()">Verstuur</button>
        </form>
    </body>
</html>

【讨论】:

  • php 文件现在是怎么搞的?
  • 您可以将 php 复制到一个新文件 script.php 并像原来一样设置表单操作。为了方便编写代码,我只把它放在一个这样的文档中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多