Problema query

surapazzo

Utente Attivo
10 Dic 2013
63
0
0
Buongiorno sto cercando di fare una query per mandare una registrazione al db in questione...
Ma purtroppo mi da errori legati alla scrittura della query.
Vi posto la bozza che ho fatto:

PHP:
public function newinsert($nome,$cognome,$username,$password){
			$sql="INSERT INTO USERS(NOME,COGNOME,NICKNAME,PASSWORD) VALUES('$nome,$cognome,$username,$password') ";
			
			
			 $result = $this->con->query($sql)  ;
           	 $count = $result->num_rows;   
             if ($count != ""){ 
            #> Ora che non ci serve più, liberiamo la memoria impiegata dalla risorsa.   
            $result->close();   
            return true;  
        }  
        else {   
            $count = 0;   
            echo "Errore Connessione ";    
              
      return false;  
        }  
			
		}
Gli errori dopo l'invio sono questi:
Codice:
Notice: Undefined index: nome in /chroot/home/S3654125/public_html/insert.php on line 13 Notice: Undefined index: cognome in /chroot/home/S3654125/public_html/insert.php on line 13 Notice: Undefined index: username in /chroot/home/S3654125/public_html/insert.php on line 13 Notice: Undefined index: password in /chroot/home/S3654125/public_html/insert.php on line 13 Notice: Trying to get property of non-object in /chroot/home/S3654125/public_html/functions/mysqldb.php on line 102 Errore Connessione
Per prova avevo preso una query di check login e l'ho modificata semplicemente aggiornando la query con INSERT ovviamente ho fatto qualche casino riuscite a darmi una mano?
Grazie
 
Ultima modifica:
ciao
così ad occhio e croce gli apici
PHP:
$sql="INSERT INTO USERS(NOME,COGNOME,NICKNAME,PASSWORD) VALUES('$nome','$cognome','$username','$password') ";
 
Secondo me l'errore non è lì.

Controlla bene il file e la riga indicata:
Codice:
Undefined index: nome in /chroot/home/S3654125/public_html/insert.php on line 13

"Undefined index" indica l'indice di un array che viene adoperato senza che sia stato definito, fosse stato relativo ad una variabile l'errore che avresti dovuto ricevere sarebbe stato "Undefined variable:".
 
Secondo me l'errore non è lì.

Controlla bene il file e la riga indicata:
Codice:
Undefined index: nome in /chroot/home/S3654125/public_html/insert.php on line 13

"Undefined index" indica l'indice di un array che viene adoperato senza che sia stato definito, fosse stato relativo ad una variabile l'errore che avresti dovuto ricevere sarebbe stato "Undefined variable:".

La line 13 è questa:
PHP:
if($conn->newinsert($_POST["nome"],$_POST["cognome"],$_POST["username"],$_POST["password"]))
 
ciao
l'avevo guardata in fretta e l'errore che saltava subito all'occhio era la mancanza degli apici.
però ha ragione flameseeker anzi guardando meglio
Notice: Undefined index: nome in /chroot/home/S3654125/public_html/insert.php on line 13
Notice: Undefined index: cognome in /chroot/home/S3654125/public_html/insert.php on line 13
Notice: Undefined index: username in /chroot/home/S3654125/public_html/insert.php on line 13
Notice: Undefined index: password in /chroot/home/S3654125/public_html/insert.php on line 13
Notice: Trying to get property of non-object in /chroot/home/S3654125/public_html/functions/mysqldb.php on line 102 Errore Connessione
intanto ti da indefinited index sui $_POST su tutti, quindi verifica se i i $_POST sono trasmessi/ricevuti giusti
poi c'è qualcosa che non va cioè stai cercando di ottenere la proprietà di un qualcosa che non è un oggetto, ma qui non so dirti perche a me la programmazione ad oggetti sta sul c...o e non la uso e, ormai, non la userò
 
ciao
l'avevo guardata in fretta e l'errore che saltava subito all'occhio era la mancanza degli apici.
però ha ragione flameseeker anzi guardando meglio

intanto ti da indefinited index sui $_POST su tutti, quindi verifica se i i $_POST sono trasmessi/ricevuti giusti
poi c'è qualcosa che non va cioè stai cercando di ottenere la proprietà di un qualcosa che non è un oggetto, ma qui non so dirti perche a me la programmazione ad oggetti sta sul c...o e non la uso e, ormai, non la userò

Come faccio a controllare il post?
 
ciao
prima di usarli
PHP:
<?php
//....
echo "<pre>";
var_dump($_POST['nome']);//se output NULL non trasmesso o non ricevuto
var_dump($_POST['cognome']);
var_dump($_POST['username']);
var_dump($_POST['password']);
echo "</pre>";
//....
?>
 
Come dice borgo devi verificare il vettore post prima di usarne i valori perché, se per un motivo o l'altro, i dati non vengono effettivamente passati ci si ritrova nella tua situazione.

Quanto alla questione dell'errore sulla proprietà non posseduta dall'oggetto, devi sempre verificare file e riga.
Così, a naso, sospetto che questo errore venga restituito qui:
PHP:
$count = $result->num_rows;

Perché mysqli::query() ritorna false se la query fallisce.


Ah, mi passava di mente inoltre che per query INSERT/DELETE/UPDATE non devi verificare il num_rows, perché -sempre come dice il manuale- in questi casi mysqli::query() ritorna true se la query riesce. Per verificare quante righe sono state coinvolte in queste operazioni devi controllare la proprietà affected_rows conservata nell'oggetto mysqli.
Nel tuo caso:
PHP:
$count = $this->con->affected_rows;
 
Ultima modifica:
Come dice borgo devi verificare il vettore post prima di usarne i valori perché, se per un motivo o l'altro, i dati non vengono effettivamente passati ci si ritrova nella tua situazione.

Quanto alla questione dell'errore sulla proprietà non posseduta dall'oggetto, devi sempre verificare file e riga.
Così, a naso, sospetto che questo errore venga restituito qui:
PHP:
$count = $result->num_rows;

Perché mysqli::query() ritorna false se la query fallisce.


Ah, mi passava di mente inoltre che per query INSERT/DELETE/UPDATE non devi verificare il num_rows, perché -sempre come dice il manuale- in questi casi mysqli::query() ritorna true se la query riesce. Per verificare quante righe sono state coinvolte in queste operazioni devi controllare la proprietà affected_rows conservata nell'oggetto mysqli.
Nel tuo caso:
PHP:
$count = $this->con->affected_rows;


Guarda un po' l'ho riscritta così:
PHP:
	public function newinsert($nome,$cognome,$username,$password){
			$sql="INSERT INTO users(NOME,COGNOME,NICKNAME,PASSWORD) VALUES('$nome','$cognome','$username','$password') ";
			
			
			 $result = $this->con->query($sql)  ;
           	$count = $this->con->affected_rows;  
             if ($count != ""){ 
            #> Ora che non ci serve più, liberiamo la memoria impiegata dalla risorsa.   
            $result->close();   
            return true;  
        }  
        else {   
            $count = 0;   
            echo "Errore Connessione ";    
              
      return false;  
        }  
			
		}

Però mi da degli errori... la chiamata viene fatta csi:
PHP:
	include ("functions/mysqldb.php");
	
	$conn = new mysqlClass;
	$conn->connect();
	if($conn->newinsert($_POST["nome"],$_POST["cognome"],$_POST["username"],$_POST["password"])){

		$_SESSION["loggedin"]=1;
		$title = "Congratulazioni!";
		$content = "sei Registrato";
	}
	else {
		$title = "Errore!";
		$content = "errore nella Registrazione";
	}
 
Uno degli errori l'ho visto al volo, in questo punto qui:
PHP:
$result = $this->con->query($sql)  ;
               $count = $this->con->affected_rows;  
             if ($count != ""){ 
            #> Ora che non ci serve più, liberiamo la memoria impiegata dalla risorsa.   
            $result->close();   
            return true;  
        }


$result viene riempito con un valore booleano e di conseguenza, sia che la tua query riesca o meno, qui
PHP:
$result->close();
ti dirà che $result non possiede il metodo close().

Tutto il pezzo lo puoi riscrivere così:
PHP:
$this->con->query($sql);
               $count = $this->con->affected_rows;  
             if ($count != ""){ 
            #> Ora che non ci serve più, liberiamo la memoria impiegata dalla risorsa.   
            return true;  
        }


Per il resto manca il controllo sulla presenza dei valori in post:
PHP:
    include ("functions/mysqldb.php");
    
    $conn = new mysqlClass;
    $conn->connect();
    
    #> Controllo ci sia tutto quello che mi serve per lanciare $conn->newinsert()..
    if (empty($_POST["nome"]) || empty($_POST["cognome"]) || empty($_POST["username"]) || empty($_POST["password"])) {

        $title = "Errore!";
        $content = "Mancano dei dati!";
 
    }else {

    if($conn->newinsert($_POST["nome"],$_POST["cognome"],$_POST["username"],$_POST["password"])){

        $_SESSION["loggedin"]=1;
        $title = "Congratulazioni!";
        $content = "sei Registrato";
    }
    else {
        $title = "Errore!";
        $content = "errore nella Registrazione";
    }  

    }
 
Uno degli errori l'ho visto al volo, in questo punto qui:
PHP:
$result = $this->con->query($sql)  ;
               $count = $this->con->affected_rows;  
             if ($count != ""){ 
            #> Ora che non ci serve più, liberiamo la memoria impiegata dalla risorsa.   
            $result->close();   
            return true;  
        }


$result viene riempito con un valore booleano e di conseguenza, sia che la tua query riesca o meno, qui
PHP:
$result->close();
ti dirà che $result non possiede il metodo close().

Tutto il pezzo lo puoi riscrivere così:
PHP:
$this->con->query($sql);
               $count = $this->con->affected_rows;  
             if ($count != ""){ 
            #> Ora che non ci serve più, liberiamo la memoria impiegata dalla risorsa.   
            return true;  
        }


Per il resto manca il controllo sulla presenza dei valori in post:
PHP:
    include ("functions/mysqldb.php");
    
    $conn = new mysqlClass;
    $conn->connect();
    
    #> Controllo ci sia tutto quello che mi serve per lanciare $conn->newinsert()..
    if (empty($_POST["nome"]) || empty($_POST["cognome"]) || empty($_POST["username"]) || empty($_POST["password"])) {

        $title = "Errore!";
        $content = "Mancano dei dati!";
 
    }else {

    if($conn->newinsert($_POST["nome"],$_POST["cognome"],$_POST["username"],$_POST["password"])){

        $_SESSION["loggedin"]=1;
        $title = "Congratulazioni!";
        $content = "sei Registrato";
    }
    else {
        $title = "Errore!";
        $content = "errore nella Registrazione";
    }  

    }

Ora mi dice sei connesso al database ma non mi scrive errore mancano dei dati quindi vuol dire che il post nn prende tutto come è possibile?
 
Perché probabilmente quei dati in post non gli arrivano.
Come ha scritto borgo qualche messaggio indietro, prova ad usare il var_dump per controllare il contenuto di $_POST.
 
Certo, se il form non è costruito bene è probabile che non vengano proprio passati quei dati.

Indipendentemente da questo, però, la tua applicazione deve prevedere anche il caso in cui non gli arrivino dati, poiché c'è sempre chi potrebbe provare a fare il furbo per cercare di violare in modo fantasioso il tuo software.
 
ciao
flam ha ragione, però non si sa ancora se questi benedetti dati arrivano o no o quali si e quali no

"var_dump: carneade, chi era costui"
 
ciao
flam ha ragione, però non si sa ancora se questi benedetti dati arrivano o no o quali si e quali no

"var_dump: carneade, chi era costui"


Ho modificato il codice csi:
PHP:
<?php
session_start();

header("Content-type: text/html; charset=utf-8");
	
		
	
 include ("functions/mysqldb.php"); 
     
	 
	
    $conn = new mysqlClass; 
    $conn->connect(); 
    echo "<pre>"; 
	var_dump($_POST['nome']);//se output NULL non trasmesso o non ricevuto 
	var_dump($_POST['cognome']); 
	var_dump($_POST['username']); 
	var_dump($_POST['password']); 
	echo "</pre>";  
    #> Controllo ci sia tutto quello che mi serve per lanciare $conn->newinsert().. 
    if (empty($_POST["nome"]) || empty($_POST["cognome"]) || empty($_POST["username"]) || empty($_POST["password"])) { 

        $title = "Errore!"; 
        $content = "Mancano dei dati!"; 
  
    }else { 

    if($conn->newinsert($_POST["nome"],$_POST["cognome"],$_POST["username"],$_POST["password"])){ 

        $_SESSION["loggedin"]=1; 
        $title = "Congratulazioni!"; 
        $content = "sei Registrato"; 
    } 
    else { 
        $title = "Errore!"; 
        $content = "errore nella Registrazione"; 
    }   

    }

L'errore è diventato questo:

Codice:
Ti sei connesso al database S3654125

Notice: Undefined index: nome in /chroot/home/S3654125/public_html/insert.php on line 15
NULL

Notice: Undefined index: cognome in /chroot/home/S3654125/public_html/insert.php on line 16
NULL

Notice: Undefined index: username in /chroot/home/S3654125/public_html/insert.php on line 17
NULL

Notice: Undefined index: password in /chroot/home/S3654125/public_html/insert.php on line 18
NULL
 
ciao
quella è la dimostrazione che i dati non vengono ricevuti (NULL).
per prima cosa, anche se può sembrare gnocca, verifica che i nomi che hai messo nei campi di input del form siano uguali a quelli che hai nel post, cioè
name="deve_essere_uguale" a quello di $_POST['deve_essere_uguale']
se sono uguali evidentemente si perdono da qualche parte, posta come hai fatto il form, non vorrei che si cercasse l'errore in un punto ma l'errore è in un altro
 
ciao
quella è la dimostrazione che i dati non vengono ricevuti (NULL).
per prima cosa, anche se può sembrare gnocca, verifica che i nomi che hai messo nei campi di input del form siano uguali a quelli che hai nel post, cioè
name="deve_essere_uguale" a quello di $_POST['deve_essere_uguale']
se sono uguali evidentemente si perdono da qualche parte, posta come hai fatto il form, non vorrei che si cercasse l'errore in un punto ma l'errore è in un altro

Allora tanto grazie per l'aiuto...
Il form è questo:
PHP:
<?php
session_start();

header("Content-type: text/html; charset=utf-8");

$title=NULL;
$content="
   <title>Registrazione</title>
	


<h1>Modulo Registrazione Banca del Tempo</h1>

<table id=\"table\">
<form method=\"post\" name=\"modulo\" action=\"insert.php\" onsubmit= \"return Modulo()\" enctype=\"text/plain\">
    <tr>
        <td colspan=\"2\" align=\"center\"><b>Registrazione al servizio<br>Tutti i campi sono obbligatori</b></td>
    </tr>
    <tr><td><b>Nome</b></td><td><input type=\"text\" name=\"nome\" id=\"nome\"></td></tr>
    <tr><td><b>Cognome</b></td><td><input type=\"text\" name=\"cognome\"id=\"cognome\"></td></tr>
    <tr><td><b>Username</b></td><td><input type=\"text\" name=\"username\"id=\"username\"></td></tr>
    <tr><td><b>Password</b></td><td><input type=\"password\" name=\"password\"id=\"password\"></td></tr>
    <tr><td><b>Conferma password</b></td><td><input type=\"password\" name=\"conferma\"id=\"conferma\"></td></tr>
    <tr><td><b>Data di nascita (es: 12/04/1978)</b></td><td><input type=\"text\" name=\"nascita\"id=\"nascita\"></td></tr>
    <tr><td><b>Sesso</b></td><td>
      <input type=\"radio\" name=\"sesso\" value=\"M\" checked>M
      <input type=\"radio\" name=\"sesso\" value=\"F\" checked>F
    </td>
    </tr>
    <tr><td><b>Città</b></td><td>
      <select name=\"citta\" id=\"citta\">
        <option>- Seleziona la tua città -</option>
        <option value=\"Roma\">Roma</option>
        <option value=\"Milano\">Milano</option>
        <option value=\"Napoli\">Napoli</option>
        <option value=\"Firenze\">Firenze</option>
        <option value=\"Bologna\">Bologna</option>
      </select>
    </td>
    </tr>
    <tr><td><b>Indirizzo</b></td><td><input type=\"text\" name=\"indirizzo\"id=\"indirizzo\"></td></tr>
    <tr><td><b>Telefono (senza spazi nè simboli)</b></td><td><input type=\"text\" name=\"telefono\"id=\"telefono\"></td></tr>
    <tr><td><b>Email</b></td><td><input type=\"text\" name=\"email\"id=\"email\"></td></tr>
   	
        	
  
   <tr>
   		<td colspan=\"2\" align=\"right\"><input type=\"submit\" value=\"Invia\"></td>
     	<td colspan=\"2\" align=\"left\"><input type=\"reset\" value=\"Cancella\"></td>
  </tr>   
</form>
</table>
";




Il resto del codice mi pare di averlo già praticamente postato tutto se vi serve scrivo tutto=)
Grazie mille ancora...
 
HTML:
enctype=\"text/plain\"

E' questo il tuo problema, devi rimuoverlo.
Il motivo è che stai comunicando di inviare quel form con un content-type differente da quello che si usa per il post (generalmente application/x-www-form-urlencoded e multipart/form-data quando si ha anche la possibilità di includere file di vario tipo col form)
 

Discussioni simili