【问题标题】:how to Fix undefined variable rows in my code如何修复我的代码中未定义的变量行
【发布时间】:2018-01-16 11:09:46
【问题描述】:

您好,我正在编写 php 中编辑数据的代码,但此时发现一些错误,请修复。

<?php 

$servername = "localhost";
$username = "root"; 
$password = "";
$dbname = "chemistry_web";

$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());

}   
if(isset($_GET['ID'])){
$id=$_GET['ID'];
$sql="SELECT * FROM research_tab WHERE ID='$id'";
$result=mysql_query($sql); 
$rows=mysql_fetch_array($result);}

//include_once 'connection.php';

// if (isset($_GET['ID'])){
    // $id=$_GET['ID'];
    // $query = "SELECT * FROM $tbl_name WHERE id='$id'";
    // $result = mysql_query($query);
    // $row = mysql_fetch_array($result);
// }
 ?>


<!DOCTYPE html>
<html>

Why give warning Undefined variable rows when i am defined variable in top of code.

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Education</title>
    <link href="assets/plugins/bootstrap/bootstrap.css" rel="stylesheet" />
    <link href="assets/font-awesome/css/font-awesome.css" rel="stylesheet" />

    <link href="assets/css/style.css" rel="stylesheet" />
    <link href="assets/css/main-style.css" rel="stylesheet" />
    <link href="assets/plugins/morris/morris-0.4.3.min.css" rel="stylesheet" />
   </head>
<body>

    <div id="wrapper">        
        <nav class="navbar navbar-default navbar-fixed-top" role="navigation" id="navbar">          
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".sidebar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="dashboard.html">
                    <img src="assets/img/logo.png" alt="Chemistry"/>
                </a>
            </div>
            <ul class="nav navbar-top-links navbar-right">               
                <li class="dropdown">
                    <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                        <i class="fa fa-user fa-3x"></i>
                    </a>                  
                    <ul class="dropdown-menu dropdown-user">

                        <li><a href="logout.php"><i class="fa fa-sign-out fa-fw"></i>Logout</a>
                        </li>
                    </ul>
                </li>
            </ul>
        </nav>        

        <nav class="navbar-default navbar-static-side" role="navigation">           
            <div class="sidebar-collapse">               
                <ul class="nav" id="side-menu">                   
                    <li class="sidebar-search">
                    </li>
                    <li class="selected">
                        <a href="dashboard.php"><i class="fa fa-dashboard fa-fw"></i>Dashboard</a>
                    </li>                  
                    <li>
                        <a href="#"><i class="fa fa-files-o fa-fw"></i>Home Page Settings<span class="fa arrow"></span></a>
                        <ul class="nav nav-second-level">
                            <li>
                                <a href="research.php">Research Settings</a>
                            </li>

                        </ul>
                    </li>
                </ul>               
            </div>            
        </nav>      
        <div id="page-wrapper">

            <div class="row">               
                <div class="col-lg-12">
                    <h1 class="page-header">Research Settings</h1>
                </div>              
            </div>

            <form action="#" method="post" >
            <div class="form-group">
                <label>Research Title</label>
                    <input type="text" id="title" name="newTitle" class="form-control" placeholder="Enter title" value="<?php echo $rows[1]; ?>"/>
                    <input type="hidden" id="id" name="id" class="form-control" placeholder="Enter title" value="<? echo $rows[0]; ?>"/>
            </div>  
            <div class="form-group">
                <label>Description</label>
                    <textarea id="description" name="description" class="form-control" rows="3"></textarea>
            </div>

            <button id="submit" name="submit" type="submit" class="btn btn-primary">Update</button>
            </form>

        </div>
    </div>

    <script src="assets/plugins/jquery-1.10.2.js"></script>
    <script src="assets/plugins/bootstrap/bootstrap.min.js"></script>
    <script src="assets/plugins/metisMenu/jquery.metisMenu.js"></script>
    <script src="assets/plugins/pace/pace.js"></script>
    <script src="assets/scripts/siminta.js"></script>

    <script src="assets/plugins/morris/raphael-2.1.0.min.js"></script>
    <script src="assets/plugins/morris/morris.js"></script>
    <script src="assets/scripts/dashboard-demo.js"></script>

</body>

</html>

当我在代码顶部定义变量时,为什么要给出警告未定义变量行 当我在代码顶部定义变量时,为什么要发出警告未定义变量行 当我在代码顶部定义变量时,为什么要给出警告未定义变量行

【问题讨论】:

标签: php mysql database core


【解决方案1】:

您的代码存在一些问题。

  • mysql_* 函数已弃用且不安全。请使用 PDO。
  • 阅读以下有关 MySQL 注入的主题:How can I prevent SQL injection in PHP?
  • 不要混合使用 HTML5 和 XHTML。
  • 不要使用PHP短开标签&lt;?,使用完整标签:&lt;?php

    <input type="text" id="title" name="newTitle" class="form-control" placeholder="Enter title" value="<?php echo $rows[1]; ?>"/> <input type="hidden" id="id" name="id" class="form-control" placeholder="Enter title" value="<? echo $rows[0]; ?>"/>

而不是&lt;?php echo $rows[0]; ?&gt; 使用:

<?php echo ( isset ( $rows[0] ) ? $rows[0] : '' ); ?>

&lt;?php echo $rows[1]; ?&gt; 也是如此:

<?php echo ( isset ( $rows[1] ) ? $rows[1] : '' ); ?>

所以完整的代码是:

<input type="text" id="title" name="newTitle" class="form-control" placeholder="Enter title" value="<?php echo ( isset ( $rows ) ? $rows[1] : '' ); ?>">
<input type="hidden" id="id" name="id" class="form-control" placeholder="Enter title" value="<?php echo ( isset ( $rows ) ? $rows[0] : '' ); ?>">

【讨论】:

  • @IncredibleHat,谢谢,我将两者都添加到了代码中。
  • 酷豆,但您实际上不必将所有变体添加到isset ( $rows, $rows[0] )。只需 isset ( $rows[0] ) 工作(因为 isset 天生会检查每个深度)。
【解决方案2】:

您在“if”块中定义变量 $rows 并且因为 $rows 在整个文档中不可用。

试试下面的代码。

// declare $rows at global level
$rows=null;

if(isset($_GET['ID'])){
    $id=$_GET['ID'];
    $sql="SELECT * FROM research_tab WHERE ID='$id'";
    $result=mysql_query($sql); 
    // assign value
    $rows=mysql_fetch_array($result);
}

【讨论】:

    【解决方案3】:

    试试下面的代码:

    if(isset($_GET['ID'])){
       $id = $_GET['ID'];
       $result = $conn->query("SELECT * FROM leads WHERE LeadId='$id'"); 
       $rows = $result->fetch_row();
    }
    

    【讨论】:

      【解决方案4】:

      好的,发现一些问题,我在 PHP 标记中为您修复它:

      <?php 
      
      $servername = "localhost";
      $username = "root"; 
      $password = "";
      $dbname = "chemistry_web";
      
      $conn = mysqli_connect($servername,$username,$password,$dbname);
      
      if (!$conn) {
          die("Connection failed: " . mysqli_connect_error());
      
      }   
      //Test if your ID IS a Int if is that you put in your DB
      if(isset($_GET['ID']) AND is_numeric($_GET['ID'])){
      $id=$_GET['ID'];
      $sql="SELECT * FROM research_tab WHERE ID='".$id."'";
      $result=mysql_query($sql); 
      $rows=mysql_fetch_array($result);}
      
      //include_once 'connection.php';
      
      // if (isset($_GET['ID'])){
          // $id=$_GET['ID'];
          // $query = "SELECT * FROM $tbl_name WHERE id='$id'";
          // $result = mysql_query($query);
          // $row = mysql_fetch_array($result);
      // }
       ?>
      

      只需替换您的 PHP 标签。希望对您有所帮助!

      【讨论】:

      • 听说过 MySQL 注入吗?
      • 如果他将它与 PDO 一起使用非常安全,但这里不是!
      • 如果他使用mysqli(他正在尝试这样做)也可能非常安全。您的示例很容易受到攻击,并且还混合了 mysql_* 和 mysqli_* 函数,这是不允许的。如果您在答案中发布代码,它必须是正确的,因为人们来到 stackoverflow 并从答案中复制大量代码。
      猜你喜欢
      • 2019-09-19
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 2020-02-11
      • 2013-12-21
      • 1970-01-01
      相关资源
      最近更新 更多