non inserisce i dati nel db

incrediblekris

Utente Attivo
11 Ott 2012
52
0
0
ho letto le altre discussioni presenti sul forum su questo argomento, fatto come avete consigliato, ma nulla...
i dati non vengono inseriti nel db!!!

Allego il codice..
PHP:
<?PHP
	include "varDB.inc";

	function connect() {
	mysql_connect ("localhost","root","") OR die (non riesco a connettermi);
	mysql_select_db ("sito") OR die (non riesco a trovare il DB);



	

?>

<HTML>
<Head>
	<title>Registrazione- Login utente</title>
	
<head>

<body>

<?php
	if (!isset ($_POST['invia'])){ ?>
	 
	 
	 
<form method="POST" action="#">
		<label for="username">Username</label>
		<input type="text"name="username" id="username"/><br>
		<label for="password1"> Password</label>
		<input type="password" name="password1" id="password1"/><br>
		<label for="password2">Ripeti Password</label>
		<input type="password" name="password2" id="password2"/><br>
		<label for=""email>Email</label>
		<input type="text"name="email" id="email"/>
		<input type="submit" name="invia" value="registrati"/><br>
</form>		
		
<?php
	}else { //valori del form
	$username=$_POST['username'];
	$password1=$_POST['password1'];
	$password2=$_POST['password2'];
	$email=$_POST['email'];
	
	
//controlli campi vuoti e password
		if($username=="" || $email==""){
		echo"devi riempire tutti i campi";
		}elseif($password1=="" || $password2==""){
		echo"devi riempire tutti i campi";
		}elseif($password2 !=$password1){
		echo"Le password non coincidono";
		}else{
		
		$controllodati=mysql_query("SELECT id FROM utenti WHERE username='$username' OR email='$email'");
		$contautenti=mysql_num_rows($controllodati);
		
		if($contautenti >0){
		echo"Nome utente o email già in uso";
		
		}else{
		
		//inserisci utenti in db, tabella utenti
		$inserimentoutenti=mysql_query ("INSERT INTO utenti (id,username, password2, email) VALUES('','$username','$password2','$email')");
		
		if($inserimentoutenti){
		echo"Congratulazioni";
			}else{
				echo"inserisci di nuovo i dati";
			}
	
}

}
}
}

?>


</body>	
</html>

:incazz::incazz::incazz::incazz:
 
ciao
immagino che l'id sia autoincrement, quindi toglilo. poi dividi la query e metti un var dump per verificare che la query venga scritta come vorresti
PHP:
<?php
//.....
  $query="INSERT INTO utenti (username, password2, email) VALUES('$username','$password2','$email')";
  var_dump($query);//qesto dopo la verifica lo togli o lo commenti
  $inserimentoutenti=mysql_query ($query); 
//.....
?>
 
ciao
immagino che l'id sia autoincrement, quindi toglilo. poi dividi la query e metti un var dump per verificare che la query venga scritta come vorresti
PHP:
<?php
//.....
  $query="INSERT INTO utenti (username, password2, email) VALUES('$username','$password2','$email')";
  var_dump($query);//qesto dopo la verifica lo togli o lo commenti
  $inserimentoutenti=mysql_query ($query); 
//.....
?>

Ho tolto Id che era di autoincremento. Ma adesso leggo questo messaggio string(87) "INSERT INTO utenti (username, password2, email) VALUES('pippo','cccc','[email protected]')"

chiedo perchè sono poco pratica..ovviamente i dati inseriti erano di prova...


Ho modificato i valori password e la variabile password, in pratica
$query="INSERT INTO utenti (username, password, email) VALUES('$username','$password2','$email')";

E il var_dump è messo in commento..devo lasciare la query cosi come mi hai detto sopra?
Grazie in anticipo!!
 
Ultima modifica:
ciao
prima cosa: il var dump ti ha restituito come viene elaborata la querry dopo che hai valorizzato i dati: è giusta?
se si, sei sicura che i nomi dei campi e tabella siano uguali (comprese maiuscole/minuscole) a quelli che hai scritto nella query?
se si verifica i dati i connessione e selezione db.

comunque do un occhio a quello che hai scritto poi ti so dire
 
ma non manca un } per chiudere la funzione connect ? e poi il richiamo della stessa funzione
non sono ancora riuscito a capire ma secondo me manca qualche parentesi
 
ma non manca un } per chiudere la funzione connect ? e poi il richiamo della stessa funzione
non sono ancora riuscito a capire ma secondo me manca qualche parentesi


Credo di aver chiuso tutte le parentesi..la funzione connect l'ho chiusa alla fine prima di chiudere il tag php, avrei dovuto chiuderla prima?

Si, ho controllato tutti i nomi delle variabili
prima cosa: il var dump ti ha restituito come viene elaborata la querry dopo che hai valorizzato i dati: è giusta?
se si, sei sicura che i nomi dei campi e tabella siano uguali (comprese maiuscole/minuscole) a quelli che hai scritto nella query?
se si verifica i dati i connessione e selezione db.

Funziona la query con il var_dump!e i parametri del db mi sembrano esatti.. come tutti i nomi dei campi...mi sapete dire qualcosa in più'
 
Adesso ho fatto la pagina di login, una volta risolto il problema precedente, ma ogni volta che inserisco i dati che ho inserito nel db mi dice che i dati non sono presenti nel db e vedo questo errore

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prova\login.php on line 61


allego il codice...


PHP:
<?php

include("varDB.inc");

session_start();


?>


<html>

	<header> <title>Login</title>
	
	</header>
	
			<body>
			
			
			
			<?php
$p= $_GET['azione'];

if($p=="login"){


			
	if (!isset ($_POST['invia'])){ ?>
	 
	 
	 
<form method="POST" action="#">
		<label for="username">Username</label>
		<input type="text"name="username" id="username"/><br>
		<label for="password"> Password</label>
		<input type="password" name="password" id="password"/><br>
		<input type="submit" name="invia" value="entra"/><br>
		
</form>		
			
			


<?php 

}else{

	$username= $_POST['username'];
	$password= $_POST['password'];
	
	}
	
	if($username=="" || $password==""){
	
	echo"Attenzione devi riempire tutti i campi";
	
	}else{
	
	$controllodati=mysql_query("SELECT * FROM utenti WHERE username='$username' AND password='$password' ");
	
	$contautenti=mysql_num_rows($controllodati);
	
		
	if ($controllodati==1){
	
	$sessione=mysql_fetch_array($controllodati);
	
	$_SESSION['id']='$sessione';

	echo"login ok";
	
	}else{
	echo"dati non presenti nel db";
	
	
	}
		}

}	
	

?>	
			
			</body>




</html>
 
L'errore ti indica un problema nella query
cambia questo
PHP:
 $controllodati=mysql_query("SELECT * FROM utenti WHERE username='$username' AND password='$password' ");
    
    $contautenti=mysql_num_rows($controllodati);
cosi
PHP:
$query = "SELECT * FROM utenti WHERE username='$username' AND password='$password' ";
$controllodati = mysql_query($query);
// se la query non va a buon fine
if (!$controllodati) {
    // stampi query ed errore
    echo "Errore nella query <br/>" . $query . "<br/>" . mysql_error();
    // blocchi l'esecuzione dello script
   die();
}
in questo modo se va in errore stampi sia la query che l'errore mysql
 
hai ragiona va in errore..mi dice:

Errore nella query
SELECT * FROM utenti WHERE username='pippo' AND password='cccc'
No database selected


non capisco perchè..la query mi sembra giusta!
 
No database selected
manca questa funzione
PHP:
$db = mysql_select_db("nomedeltuodatabae");
mettila dopo la mysql_connect();
 
Ultima modifica:
Vero hai ragione, l'avevo dimenticata..ma la query adesso la devo lasciare come mi hai detto sopra oppure no?

una'ltra cosa..quando visualizzo il form del login con username e password leggo questo messaggio
Notice: Undefined variable: username in C:\xampp\htdocs\prova\login.php on line 56

e poi leggo anche il contenuto di echo che dovrei vedere solo dopo aver premuto invio e non avendo compilato tutti i campi...
Attenzione devi riempire tutti i campi

Cosa posso fare?perchè l'ho ricontrollato mille volte, ma la variabile username è giusta...il


PHP:
<?php

include("varDB.inc");

$conn=mysql_connect("localhost","root","") or die;
mysql_select_db ("sito") or die;

session_start();


?>


<html>

	<header> <title>Login</title>
	
	</header>
	
			<body>
			
			
			
			<?php
$p= $_GET['azione'];

if($p=="login"){


			
	if (!isset ($_POST['invia'])){ ?>
	 
	 
	 
<form method="POST" action="#">
		<label for="username">Username</label>
		<input type="text"name="username" id="username"/><br>
		<label for="password"> Password</label>
		<input type="password" name="password" id="password"/><br>
		<input type="submit" name="invia" value="entra"/><br>
		
</form>		
			
			


<?php 

}else{

	$username= $_POST['username'];
	$password= $_POST['password'];
	
	}
	
	if($username=="" || $password==""){
	
	echo"Attenzione devi riempire tutti i campi";
	
	}else{	
	
	$query = "SELECT * FROM utenti WHERE username='$username' AND password='$password' ";
$controllodati = mysql_query($query);
// se la query non va a buon fine
if (!$controllodati) {
    // stampi query ed errore
    echo "Errore nella query <br/>" . $query . "<br/>" . mysql_error();
    // blocchi l'esecuzione dello script
   die();
}  
	
	//$controllodati=mysql_query("SELECT * FROM utenti WHERE username='$username' AND password='$password' ");
	//$result=mysql_query($controllodati) or die;
	
	$contautenti=mysql_num_rows($controllodati);
	
		
	if ($contautenti==1){
	
	$sessione=mysql_fetch_array($controllodati);
	
	
	$_SESSION['id']=$username;

	echo"login ok";
	
	}else{
	echo"dati non presenti nel db";
	
	
	}
		}

}	
	

?>	
			
			</body>




</html>
 
Ultima modifica:
per il Notice
modifica questo
PHP:
$username= $_POST['username'];
$password= $_POST['password'];
cosi
PHP:
$username = isset($_POST['username']) ? $_POST['username'] : "";
$password = isset($_POST['password']) ? $_POST['password'] : "";
in modo che cmq venga assegnato un valore alle variabili

il secondo problema dovrebbe sistemarsi da solo sistemando il primo (forse)
 
scusate, molto se mi intrometto ma ho visto questo:

include("varDB.inc");

ma non è che non è sicuro il file .inc perché forse dal browser si può vedere il contenuto a video essendo che non ha estensione .php
 
scusate, molto se mi intrometto ma ho visto questo:

include("varDB.inc");

ma non è che non è sicuro il file .inc perché forse dal browser si può vedere il contenuto a video essendo che non ha estensione .php

Il varDB.inc devo metterlo per forza, perchè il progetto che devo creare è per l'università e i paremetri che devo inserire relativi al db,alla connessione devono essere indicati in un file esterno.



in modo che cmq venga assegnato un valore alle variabili

il secondo problema dovrebbe sistemarsi da solo sistemando il primo (forse)


Mi spieghi cosa intendi?
comunque proverò e ti dico..
 
C'è ancora l'errore, non cambia nulla e vedo sempre il contenuto di echo"attenzione riempi i campi"

il problema è qui nella variabile username..
PHP:
if($username=="" || $password==""){


che faccio??
 
provala cosi
PHP:
<?php
include("varDB.inc");

$conn = mysql_connect("localhost", "root", "") or die;
mysql_select_db("sito") or die;

session_start();
?>
<html>
    <head> 
        <title>Login</title>
    </head>
    <body>
        <?php
        $p = $_GET['azione'];

        if ($p == "login") {
            if (!isset($_POST['invia'])) {
                ?>
                <form method="POST" action="#">
                    <label for="username">Username</label>
                    <input type="text"name="username" id="username"/><br>
                    <label for="password"> Password</label>
                    <input type="password" name="password" id="password"/><br>
                    <input type="submit" name="invia" value="entra"/><br>
                </form>       
                <?php
            } else {
                $username = isset($_POST['username']) ? $_POST['username'] : "";
                $password = isset($_POST['password']) ? $_POST['password'] : "";

                if ($username == "" || $password == "") {
                    echo"Attenzione devi riempire tutti i campi";
                } else {
                    $query = "SELECT * FROM utenti WHERE username='$username' AND password='$password' ";
                    $controllodati = mysql_query($query);
                    // se la query non va a buon fine
                    if (!$controllodati) {
                        // stampi query ed errore
                        echo "Errore 1 contatta l'amministratore";
                        // blocchi l'esecuzione dello script
                        die();
                    }

                    $contautenti = mysql_num_rows($controllodati);

                    if ($contautenti == 1) {
                        // questa a cosa ti serve?
                        $sessione = mysql_fetch_array($controllodati);


                        $_SESSION['id'] = $username;

                        echo"login ok";
                    } else {
                        echo"dati non presenti nel db";
                    }
                }
            }
        }
        ?>    

    </body>
</html>
ho spostato la chiusura dell'else all fine dello script
ho modificato il messaggio di errore sulla query
ho cambiato <header> con il tag giusto <head>
@Luigi777
potrebbe essere protetto a livello di server e in quel caso cmq non è accessibile da browser
 
ciao
ha ragione sia luigi777 che criric (anche se criric scrive "dovrebbe").
da che ne so io il .inc veniva usato agli albori di php, del resto rinominarlo varDB.php e racchiudere quanto c'è dentro tra i tag php è una sicurezza in più.
comunque un altro piccolo appunto: se i dati contenuti in varDB sono importanti (immagino i valori di host, username, password e nome db) è meglio usare:
PHP:
<?php
require_once "varDB.php";
//......
?>
 
Criric sei un mito, adesso è a posto!!!

però volevo chiedere ancora se qualcuno poteva spiegarmi bene l'uso si questa parte di codice..

PHP:
$username = isset($_POST['username']) ? $_POST['username'] : "";
                $password = isset($_POST['password']) ? $_POST['password'] : "";



Non bastava come l'avevo messo io?


PHP:
// questa a cosa ti serve?
                        $sessione = mysql_fetch_array($controllodati);


Mi serve per scorrere tutti i dati inseriti nella variabile $controllodati..


E poi volevo chiedere anche come faccio ad inviare i dati tramite url con GET, volevo inviare username e password, guardando un tutorial ho copiato questa parte, funziona ma perefirei inserire url tipo indirizzamento alla pagina di login...come posso fare?il codice che vorrei modificare è questo
PHP:
<?php
        $p = $_GET['azione'];

        if ($p == "login") {
 
PHP:
<?php
include("varDB.inc");



$conn = mysql_connect("localhost", "root", "") or die;
mysql_select_db("sito") or die;

session_start();
?> 
<html>
    <head> 
        <title>Login</title>
			<link rel="stylesheet" type="text/css" href="stile.css">
    </head>
    <body>
	
	<TABLE>
		<TR>
			<TD>
				<div id="menu">
					<ul>
						<?php 
						if(!isset($_SESSION['utente'])){
					echo"<li><p>Ciao visitatore!</p>	</li>";	
					echo"<li><p><a href='nuova.php?azione=login'>login</a></p></li>";
				echo"<li><p><a href='registrati.php'>registrati</a></p></li>";
					
					}elseif (isset($_SESSION['utente'])){
					echo"<li>ciao ".$_SESSION['utente']."</li>";	
					
					echo"<li><a href='nuova.php?azione=logout'>esci</a></li>";}
					
					?>						
				
					</ul>
				</div>
            </TD>		 
		</TR>
	</TABLE>
        <?php
        $p = $_GET['azione'];

        if ($p == "login") {
            if (!isset($_POST['invia'])) {
                ?>
                <form method="POST" action="#">
                    <label for="username">Username</label>
                    <input type="text"name="username" id="username"/><br>
                    <label for="password"> Password</label>
                    <input type="password" name="password" id="password"/><br>
                    <input type="submit" name="invia" value="entra"/><br>
                </form>       
                <?php
            } else {
                $username = isset($_POST['username']) ? $_POST['username'] : "";
                $password = isset($_POST['password']) ? $_POST['password'] : "";

                if ($username == "" || $password == "") {
                    echo"Attenzione devi riempire tutti i campi";
                } else {
                    $query = "SELECT * FROM utenti WHERE username='$username' AND password='$password' ";
                    $controllodati = mysql_query($query);
                    // se la query non va a buon fine
                    if (!$controllodati) {
                        // stampi query ed errore
                        echo "Errore 1 contatta l'amministratore";
                        // blocchi l'esecuzione dello script
                        die();
                    }

                    $contautenti = mysql_num_rows($controllodati);

                    if ($contautenti == 1) {
                        // recupera username 
                        $sessione = mysql_fetch_array($controllodati);


                        $_SESSION['utente']= $sessione['username'];
						
						echo"ciao ".$_SESSION['utente']."";
						echo"<br>";
                        echo"login ok";
						echo"<br>";
						echo"<a href='nuova.php?azione=logout'>esci</a>";
						
                    } else {
                        echo"dati non presenti nel db";
                    }
                }
            }
        }elseif($p=="logout"){
	
		session_destroy();
		
			echo"Logout effettuato";
			echo"<br>";
			Echo"Arrivederci, ".$_SESSION['utente']."";
			
		header("refresh: 2; URL=home.php");				

		}
		
	


        ?>    
		
	

	

    </body>
</html>

Il codice completo.

Allora vorrei che nella tabella appena effettuato il login si vedesse, invece di "Ciao visitatore" il nome dell'utente e "Esci". Ma una volta effettuato il login vedo solo "Ciao visitatore", solo se ricarico la pag vedo il nome utente e esci..come fare??'


PHP:
<html>
    <head> 
        <title>Login</title>
			<link rel="stylesheet" type="text/css" href="stile.css">
    </head>
    <body>
	
	<TABLE>
		<TR>
			<TD>
				<div id="menu">
					<ul>
						<?php 
						if(!isset($_SESSION['utente'])){
					echo"<li><p>Ciao visitatore!</p>	</li>";	
					echo"<li><p><a href='nuova.php?azione=login'>login</a></p></li>";
				echo"<li><p><a href='registrati.php'>registrati</a></p></li>";
					
					}elseif (isset($_SESSION['utente'])){
					echo"<li>ciao ".$_SESSION['utente']."</li>";	
					
					echo"<li><a href='nuova.php?azione=logout'>esci</a></li>";}
					
					?>						
				
					</ul>
				</div>
            </TD>		 
		</TR>
	</TABLE>

Questo è il codice che mi sembra non funzioni...
 
ciao
se non ti sei dimenticato di postarlo manca session_start

PHP:
<?php
session_start();//mi sembra che tu non l'abbia messo
?>
<!DOCTYPE html>
<html>
    <head>
	<!-- eccetera -->

poi
non ti serve
}elseif (isset($_SESSION['utente'])){ , ma ti basta l'else
PHP:
<?php
//...
}else{//non ti serve l'elseif perche la sessione è isset o non isset
	echo"<li>ciao ".$_SESSION['utente']."</li>"; 
//...
?>

p.s.
poi scrivi i tag minuscoli
 

Discussioni simili