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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
così ad occhio e croce gli apici
PHP:
$sql="INSERT INTO USERS(NOME,COGNOME,NICKNAME,PASSWORD) VALUES('$nome','$cognome','$username','$password') ";
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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:".
 

surapazzo

Utente Attivo
10 Dic 2013
63
0
0
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"]))
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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ò
 

surapazzo

Utente Attivo
10 Dic 2013
63
0
0
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?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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>";
//....
?>
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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:

surapazzo

Utente Attivo
10 Dic 2013
63
0
0
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";
	}
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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";
    }  

    }
 

surapazzo

Utente Attivo
10 Dic 2013
63
0
0
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?
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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.
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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"
 

surapazzo

Utente Attivo
10 Dic 2013
63
0
0
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

surapazzo

Utente Attivo
10 Dic 2013
63
0
0
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...
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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
Autore Titolo Forum Risposte Data
O problema con query PHP 4
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
M Problema su query JOIN in tre tabelle PHP 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
A [PHP] Problema query insert [RISOLTO] PHP 14
M [PHP] Problema con query select PHP 2
T [php] problema creazione query select-where PHP 5
V [MySQL] problema query con date su server MySQL 5
trattorino problema raccapricciante php conteggio query PHP 4
L [PHP] Problema creazione query a numero di parametri variabile PHP 6
G Mysql ( Query) problema interrogazione MySQL 0
D Problema con query in php PHP 5
E [PHP] problema insert query PHP 9
M [PHP] Problema con query PHP 17
Rikk73 [C#] problema con stampa da query linq EnumerableRowCollection .NET Framework 0
M Problema con query PHP 15
G Problema con una query. PHP 5
F problema su query con nome tabella variabile PHP 20
G problema query mysql in php PHP 5
F PHP problema doppi apici all'interno di una query SQL PHP 1
M problema con media query CSS HTML e CSS 1
D Problema caratteri jolle su criterio Query MS Access 0
L problema creazione query con campo float PHP 2
elpirata Query di ricerca problema campo data italiano PHP 2
andrea.peo Problema query con join visualizzazione record ripetuti PHP 5
X Problema di sostituzione tramite query sql MySQL 5
S Problema Query PHP 2
Emix Problema query inserimento... PHP 6
B problema query PHP 6
Emix Dubbio e problema su query con operatore LIKE PHP 56
S Problema query con sum MySQL 4
G Problema con query mysql MySQL 1
B problema query mysql php PHP 1
L PHP: problema con query mysql. PHP 3
A problema query e javascript Javascript 0
S Autocompletamente con jQuery, PHP e MySQL - Problema con le query PHP 7
D E' natale lo so... ma ho un problema su una query :S MySQL 7
Boscagoo Problema query mySQL MySQL 6
L query sqlite problema PHP 3
EffeElle Php problema query select PHP 5
Trapano Problema con query MySQL 32
EffeElle Problema per una query di aggiornamento record php PHP 35
M Problema query MySQL MySQL 13
V Problema query PHP 3
Longo8 Problema query in rete PHP 3
K problema con query complessa MySQL 4
K [MYSQL] problema con una query in loop MySQL 1
A problema: estrazione dati da query mysql e assegnazione ad una variabile PHP 2

Discussioni simili