www.webdeveloper.com
Results 1 to 2 of 2

Thread: mysqli_query()/mysqli_num_rows()

  1. #1
    Join Date
    Mar 2013
    Posts
    13

    mysqli_query()/mysqli_num_rows()

    I am receiving 2 error messages when testing my web page.

    Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /home/content/41/10881941/html/guitarworld/media/pages/shoppingcart.php on line 117

    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /home/content/41/10881941/html/guitarworld/media/pages/shoppingcart.php on line 117

    Here is my source code:

    PHP Code:
    <?php
    session_start
    ();
    ?>
    <?php
    $con
    =mysqli_connect("hostname","username","password","database");
    // Check connection
    if (mysqli_connect_errno())
      {
      echo 
    "<script type='text/javascript'>alert('Failed to connect to MySQL: ')</script>" mysqli_connect_error();
      }
    ?>

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>Guitar Shop | Shopping Cart</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css">
    <link rel="shortcut icon" href="../images/favicon.ico" type="image/vnd.microsoft.icon" />
    <link rel="icon" href="../images/favicon.ico" type="image/vnd.microsoft.icon" />
    </head>

    <body>
    <div id="container">
      <header>
        <div id="logo"></div>
        <nav>
          <ul>
            <li><a href="../../index.php">Home</a> </li>
            <li><a href="guitars.php">Guitars</a>
              <ul>
                <li><a href="electric.php">Electric</a> </li>
                <li><a href="acoustic.php">Acoustic</a> </li>
              </ul>
            </li>
            <li><a href="register.php">Register</a> </li>
          </ul>
        </nav>
      </header>
      <div id="content1_shoppingcart">
        <h1>Shopping Cart</h1>
      </div>
      <div id="content2_shoppingcart">

      <?php
        $con
    =mysqli_connect("hostname","username","password","database");
        
    // Check connection
        
    if (mysqli_connect_errno())
          {
          echo 
    "<script type='text/javascript'>alert('Failed to connect to MySQL: ')</script>" mysqli_connect_error();
          }
        
    $id $_GET[id]; 
        
    $action $_GET[action]; 

        
    // If the ID doesn't exist, exit the script and display message
        
    if($id && !productExists($id)) {
            exit(
    "<p>An error occurred</p>");
        }

        switch(
    $action) {
            
    // Add
            
    case "add":
                
    $_SESSION['shoppingcart'][$id]++;
            break;
            
    // Remove
            
    case "remove":
                
    $_SESSION['shoppingcart'][$id]--;
                if(
    $_SESSION['shoppingcart'][$id] == 0) unset($_SESSION['shoppingcart'][$id]);
            break;
            
    // Empty
            
    case "empty":
                unset(
    $_SESSION['shoppingcart']);
            break;
        }
        
    ?>
        <?php
            $con
    =mysqli_connect("hostname","username","password","database");
            
    // Check connection
            
    if (mysqli_connect_errno())
              {
              echo 
    "<script type='text/javascript'>alert('Failed to connect to MySQL: ')</script>" mysqli_connect_error();
              }
            if(
    $_SESSION['shoppingcart']) {
                echo 
    "<table border=\"1\" padding=\"3\" width=\"40%\">";
                    foreach(
    $_SESSION['shoppingcart'] as $id => $quantity) {    
                            
    $sql sprintf($con,"SELECT name, description, price FROM electric WHERE id = %d;",$id); 
                            
    $result mysqli_query($con,$sql);
                            if(
    mysqli_num_rows($con,$result) > 0) {
                                list(
    $name$description$price) = mysqli_fetch_row($con,$result);
                                
    $line_cost $price $quantity;
                                
    $total $total $line_cost;
                                echo 
    "<tr>";
                                echo 
    "<td align=\"center\">$name</td>";
                                echo 
    "<td align=\"center\">$quantity <a href=\"$_SERVER[PHP_SELF]?action=remove&id=$id\">Remove</a></td>";
                                echo 
    "<td align=\"center\">$line_cost</td>";
                                echo 
    "</tr>";
                            }
            }
        echo 
    "<tr>";
        echo 
    "<td colspan=\"2\" align=\"right\">Total</td>";
        echo 
    "<td align=\"right\">$total</td>";
        echo 
    "</tr>";
        
        echo 
    "<tr>";
        echo 
    "<td colspan=\"3\" align=\"right\"><a href=\"$_SERVER[PHP_SELF]?action=empty\" onclick=\"return confirm('Are you sure?');\">Empty Shopping Cart</a>            </td>";
        echo 
    "</tr>";        
        echo 
    "</table>";
        }
        else {
            echo 
    "<p>You have no items in your shopping cart.</p>";
        }
        
        function 
    productExists($id) {
            
    $sql sprintf($con,"SELECT * FROM electric WHERE id = %d;",$id); 
            return 
    mysqli_num_rows(mysqli_query($con,$sql)) > 0;
        }
        
    ?>
        <p><a href="guitars.php">Continue Shopping</a></p>
        <?php
        ?>
      </div>
      <footer> <em>&copy;2011 | Guitar Shop </em> </footer>
    </div>
    </body>
    </html>
    Any help or ideas would be greatly appreciated folks!
    Last edited by NogDog; 12-27-2013 at 12:29 AM. Reason: put all code into one set of php tags

  2. #2
    Join Date
    Aug 2004
    Location
    Ankh-Morpork
    Posts
    19,634
    Looks like you have a variable scope issue (along with a malformed parameter list for sprintf()). Try changing this...
    PHP Code:
        function productExists($id) {
            
    $sql sprintf($con,"SELECT * FROM electric WHERE id = %d;",$id); 
            return 
    mysqli_num_rows(mysqli_query($con,$sql)) > 0;
        } 
    ...to this...
    PHP Code:
        function productExists($id$con) {
            
    $sql sprintf("SELECT * FROM electric WHERE id = %d;",$id); 
            return 
    mysqli_num_rows(mysqli_query($con,$sql)) > 0;
        } 
    Then wherever you call that productExists() function, add the mysqli object variable as its second parameter.

    BTW, as tempting as it is to write one liners like that return statement, you can save yourself maintenance and debugging grief later on by being less terse, e.g.:
    PHP Code:
        /**
         * Determine if a given product ID exists in DB
         * @return Boolean
         * @param int $id
         * @param mysqli $con
         */
        
    function productExists($idmysqli $con) {
            
    $sql sprintf("SELECT * FROM electric WHERE id = %d;"$id);
            
    $result mysqli_query($con$sql);
            if( ! 
    $result) {
                throw new 
    Exception("Query failed"."\n".mysqli_error($con)."\n".$sql);
            }
            return (bool) 
    mysqli_num_rows($result);
        } 
    (Okay, so actually I wouldn't do it quite that way, I'd also use the object-oriented syntax for using MySQLi. )
    "Please give us a simple answer, so that we don't have to think, because if we think, we might find answers that don't fit the way we want the world to be."
    ~ Terry Pratchett in Nation

    eBookworm.us

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles