Eroare Call to member function bind_param() on boolean

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
nicolaradu
Mesaje: 5

Eroare Call to member function bind_param() on boolean

Salut cu stima membrii dar si fondatorul acestui site.
Am si eu o rugaminte deoarece sunt total newbie in ceea ce priveste PHP-ul.
Am de creat o aplicatie de tip CRUD, folosind php si mySqli, insa cand ajung la adaugare de date, se blocheaza si afiseaza o eroare.

Cod: Selectaţi tot

Fatal error: Call to a member function bind_param() on boolean in C:\xampp\htdocs\create.php on line 17
Aceea este eroarea. Dar practic rezolv undeva, si crapa mai departe.
Aici aveti continutul fisierului create.php

Cod: Selectaţi tot

<?php
require 'db/connect.php';

$error = ""; //variable to hold our form error message
$success = ""; //variable to hold our success message

if(isset($_POST['create'])){
    $nume         = trim($_POST['nume']);
    $prenume     = trim($_POST['prenume']);
    $cnp         = trim($_POST['cnp']);
    $adresa        = trim($_POST['adresa']);
    $observatii    = trim($_POST['observatii']);
    if(empty($nume) && empty($prenume) && empty($cnp) && empty($adresa) && empty($observatii)){
        $error = "Trebuie sa completati campurile goale.";
    }else{
        $insert = $db->prepare("INSERT INTO persoane (nume, prenume, cnp, adresa, observatii) VALUES (?, ?, ?, ?, ?, NOW())");
        $insert->bind_param('sssss', $nume, $prenume, $cnp, $adresa, $observatii);
        if($insert->execute()){
            //$success = "Persoana adaugata cu succes!";
            header("location:index.php");
        }
    }
}
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Dincolo de autism - Craiova</title>
        <link rel="stylesheet" href="styles.css">
    </head>
    <body>
        <div id="wrapper">
            <h1>Adauga persoane:</h1>
            <span class="error"><?php if(isset($error)) echo $error;?></span>
            <span class="success"><?php if(isset($success)) echo $success;?></span>
            <form action="" method="post">
                <table class="table">
                    <tr>
                        <td><label for="nume">Nume:</label></td>
                        <td><input type="text" id="nume" name="nume"></td>
                    </tr>
                    <tr>
                        <td><label for="prenume">Prenume:</label></td>
                        <td><input type="text" id="prenume" name="prenume"></td>
                    </tr>                
                    <tr>
                        <td><label for="cnp">C.N.P:</label></td>
                        <td><input type="text" id="cnp" name="cnp"></td>
                    </tr>
                    <tr>
                        <td><label for="adresa">Adresa:</label></td>
                        <td><input type="text" id="adresa" name="adresa"></td>
                    </tr>
                    <tr>
                        <td><label for="observatii">Observatii:</label></td>
                        <td><textarea id="observatii" name="observatii"></textarea></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><button type="submit" class="create" name="create">ADAUGA</button>&nbsp;&nbsp;&nbsp;&nbsp;<a class="btn" href="index.php">INAPOI</a></td>
                    </tr>
                </table>
            </form>
        </div>
    </body>
</html>
Multumesc!

MarPlo Mesaje: 4343
Salut
In loc de "&&" ar trebui "||" la verificarea cu empty().
Apoi, problema e la comanda sql, ai 5 coloane specificate dar 6 valori; lipseste coloana pt. NOW(), si rezulta $insert False. Cam asa e corect in codul tau ca sa vezi ce eroare sql cauzeaza False la instructiunea prepare():

Cod: Selectaţi tot

//codul dinainte ..

if(empty($nume) || empty($prenume) || empty($cnp) || empty($adresa) || empty($observatii)) $error = 'Trebuie sa completati campurile goale.';
else {
  $sql = "INSERT INTO persoane (nume, prenume, cnp, adresa, observatii, COLOANA_LIPSA) VALUES (?, ?, ?, ?, ?, NOW())";
  if($insert = $db->prepare($sql)) {
    $insert->bind_param('sssss', $nume, $prenume, $cnp, $adresa, $observatii);
    if($insert->execute()){
      //$success = 'Persoana adaugata cu succes!';
      header('location: index.php'); exit;
    }
  }
  else $error = $db->errno .'-'. $db->error;  //preia eroarea sql
}
//Restul codului ..  
Problema cu acea eroare e si la pagina:
error-call-function-bind-param-boolean-t2147.htm

nicolaradu Mesaje: 5
Multumesc. Insa, am lipit aici, a crapat pe index.php. De asta pusesem toate fisierele aici. Dar ma rog, este forumul dumitale, si nu mai pot zice nimic. Pur si simplu, daca reuseam de unul singur, cum am scris tot acel cod urmarind doar internetul, rezolvam si eroarea. Insa, multumesc pentru intentia de ajutor.

Probabil voi merge la o firma de IT sa le cer ajutor pe intregile 6 pagini php.

MarPlo Mesaje: 4343
Pe forum nu sta nimeni sa analizeze codul si legaturile din 6 fisiere (tu ai face la cineva pe un forum?), dar treptat, s-ar putea rezolva.
Poti spune ce eroare iti da in index.php, si codul din acel fisier.
Poate e ceva usor.

nicolaradu Mesaje: 5
Da, as face. Dar aici vorbim de mine. Oricum, multumesc! Nu este nevoie, s-a rezolvat, pe alt forum. Oricum multumesc pentru intentie!

andras Mesaje: 430
Eu nu prea cred ca s-a rezolvat asa usor (sau nu pe gratis) dar in fine, mai apar astfel de situatii in care omul este pus in fata unor probleme grele, mi s-a intimplat de multe ori. Au fost cazuri cind am pierdut 5-6-7 zile doar cu o singura problema aparent minora. Perseverenta aduce treptat si experienta.

nicolaradu Mesaje: 5
Am rezolvat. Am luat codul de la capat, am verificat fiecare liniuta si punctulet din fiecare linie de cod. Era ok exact cum il creasem de prima oara. O singura problema a fost insa in tipul de variabila declarat in baza de date si tipul de variabila declarat in scriptul php. Sau pe scurt, pe coloana ID aveam nevoie de un alt tip de date fata de cel creat initial sa stocheze datele preluate din formularul html.

Era ca si cum ai fi incercat sa pornesti masina cu cheia gresita. In fine. Totul s-a rezolvat, dupa ce am fost ajutat, privind toate paginile si structura bazei de date pe un alt forum, mare, de aici din Romania. Oricum multumesc si voua pentru intentie, iar MarPlo pentru gest si pentru timpul acordat.

Pacat, urmaream cu o pasiune de nedescris anumite sectiuni de pe acest site. Acum parca am un "gust amar".
In fine.

Seara faina... :D

andras Mesaje: 430
Ma mir ca tocmai la coloana ID ti-a dat eroare, la ID se folosesc de obicei numai cifre iar PHP stie sa faca singur evaluarea variabilei si s-o trateze corect (in PHP nu este nevoie sa declari tipul variabilei, dar exista comanda de setare a unei variabile la un anumit tip), n-ar trebui sa-ti dea eroare. Poate ai uitat de coloana ID, asa e mai plauzibil. Dar nu mai conteaza, important e ca ai rezolvat.
Imi pare rau, dar nici eu nu ti-as fi "analizat" codul din 6 fisiere, aici se intreaba lucruri punctuale, de multe ori sint mai valoroase ideile pe care le primesti decit o bucata de cod, iar un forum nu inlocuieste munca grea de cautari si incercari.

nicolaradu Mesaje: 5
Multumesc, da, uitasem de coloana ID, si pe langa asta foloseam un script specific limbajului PHP 4, insa pe un server si un PHP mai recent, versiunea 5.6, si eroarea pleca din ambele parti. Practic serverul comunica in limbajul lui, ca scriptul php, de pe care am inceput constructia scriptului final, este vechi, si erorile de sintaxa, in trecut ar fi fost corecte, insa acum, cu noile reglementari sunt considerate "ca lipsite de securitate".

In fine, pana la urma am modificat totul, l-am trecut prin ajax si s-a pus pe server cu php 5

Si ... credeti-ma, daca nu as fi incercat, si sucit, si rasucit, si reincercat toate variantele care mi-au trecut prin cap, nu as fi venit aici cautand ajutor.

Subiecte similare