richiamare id

scatenato

Nuovo Utente
13 Giu 2014
28
0
0
napoli
Ciao,
ho un problemino da risolvere, nel sito che sto creando l'utente appena loggato puo accedere a una serie di pagine riservate.
in una di queste pagine c'e un form con dentro dei select che prende dei record dal una tabella nel db e successivamente salvarli nel db in un altra tabella,e fino a qui ci sono perche il form funziona perfettamente,ma ho notato che se clicco sul pulsante submit dopo aver selezionato i campi posso inserire piu righe con lo stesso utente facendo incrementare id, questo non deve succedere ogni utente registrato e loggato deve e puo inserire una sola riga nel db.

non parlo del form di registrazione,anche questo funziona perfettamente.

quindi se l'utente ha gia utilizzato quel form e lo fa di nuovo deve ricevere un messaggio di errore.

una volta fatto questo devo riprendere questa riga nella tabella e visualizzarla nella sua pagina personale dando anche la possibilità di modificare alcuni campi,
 
ciao
non so se ho capito bene.
un utente loggato accede ad un form seleziona e inserisce una riga in una tabella
se ha gia inserito deve dare un messaggio di errore
giusto?
se è così dovresti mettere nella tabella anche l'id dell'utente
trattandosi di pagina riservata probabilmente l'id dell'utente l'hai passato in sessione, o se non l'id i suo user o password.
quindi ti schematizzo, nella pagina in cui fai l'inserimento
PHP:
<?php
session_start();
//dati di connessione
$q="SELECT * FROM tabella WHERE id_utente=".$_SESSION['id_utente'];
$ris=mysqli_query($conn, $q);
if(mysqli_num_rows($ris)){
	echo "messaggio di errore";
	//e riinvii dove vuoi
}else{
	//prelevi i dati dal form
	//li inserisci nella tabella compreso l'id dell'utente
	//e rimandi dove vuoi
}
?>
 
grazie per avermi risposto ho provato il codice che mi hai scritto ma mi restituisce questo errore.

mysql_num_rows() expects parameter 1 to be resource, boolean given in

mi sai dire da cosa proviene e che devo modificare.
 
poi non ho capito quando hai scritto potresti spiegarmi meglio il concetto.

//li inserisci nella tabella compreso l'id dell'utente
 
ciao
intanto una cosa stai usando le istruzioni mysql o mysqli?
l'errore probabilmente è dovuto al fatto che la query non va a buon fine
stai attento se stai usando le mysql dovresti abbandonarle perchè deprecate

per la tua seconda domanda:
intendo che dovresti aggiungere alla tabella altra il campo che contiene l'id dell'utente in modo da verificare se ha già fatto l'operazione
quello che ho scritto funziona così
1) l'utente scive la prima volta nel form
2) verifico che nella tabella latra non abbia già scritto
3.a) se non ha scritto salvo in altra quello che devi salvare + il suo id
3.b) se aveva gia fatto l'operazione non salvo e riinvio da qualche parte.

io o scritto SELECT tabella ... perchè non so come si chiamano le tue tabelle, nella select devi mettere il nome della tabella in cui vuoi salvare i dati del form.
per capirci meglio dovresti postare nome e dump delle tabelle e la parte di script che stai usando
 
questo e il mio codice per la connessione al db se non ti chiedo troppo potresti dare un occhiata e dirmi dove e come fare le modifiche in basso troverai anche la tabella che ho creato per gli utenti.

con questo funziona tutto ma se tu mi hai detto che mysql e deprecato ti dico la verita non so dove mettere le mani in questo momento

PHP:
Class Users{
	/********************************
	SETTING
	*********************************/
	// le credenziali di accesso al database
	private $host_db = 'localhost';
	private $user_db = 'root';
	private $pass_db = '';
	private $name_db = 'test';
	// gli url che gestinranno le operazioni di login
	public $Urls = array(
						'login_page' 	=> 'http://localhost/pr/index.php',
						'register_page'	=> 'http://localhost/pr/registrazione.php',
						'logout_page'	=> 'http://localhost/pr/logout.php'
						);

	
	/*risorse di connessione*/
	protected $conn;
	protected $selezione_db;
	
	/*variabili di registrazione*/
	protected $reg_nome;
	protected $reg_username;
	protected $reg_email;
	protected $reg_pass;
	protected $reg_confirm_pass;
	protected $reg_crypt_pass;
	
	/*variabili di login*/
	protected $login_username;
	protected $login_password;
	protected $login_cryptpass;
	protected $login_iduser;
	
	/*variabili per gestire gli errori*/
	public $messages = array(
					1 => 'Il campo username è obbligatorio.',
					2 => 'Il campo email è obbligatorio.',
					3 => 'Il campo password è obbligatorio.',
					4 => 'Le due password non coincidono.',
					5 => 'Il campo username contiene caratteri non validi. Sono consentiti solo lettere, numeri e i                 seguenti simboli . _ -.',
					6 => 'Inserisci una email con sitassi corretta.',
					7 => 'La password scelta è eccessivamente breve. Scegli una password di almeno 8 caratteri.',
					8 => 'Esiste già un utente registrato con questo username.',
					9 => 'Esiste già un utente registrato con questa email.',
					10 => 'Registrazione effettuata con successo.',
					11 => 'Login errato',
					16 => 'Il campo nome è obbligatorio.',
				    14 => 'Per accedere a questa pagina occorre essere loggati.'
					);
	
	public $message_script;
	
	// il costruttore attiva la connessione a mysql
	public function __construct(){
		$this->connessione();
		}
	/******************
	CONNESSIONE A MYSQL
	******************/
	protected function connessione(){
		$this->conn = mysql_connect($this->host_db, $this->user_db, $this->pass_db) or die(mysqli_error());
		$this->selezione_db = mysql_select_db($this->name_db, $this->conn) or die(mysqli_error());
		return TRUE;
}
	/*************************************
	ALCUNI METODI PER ESEGUIRE VALIDAZIONI
	*************************************/
	
	// verifica campo generico non vuoto (TRUE se non vuoto)
	public function empty_string($string){
		$string = trim($string);
		if($string==''){
			return TRUE;
			}
		else{
			return FALSE;
			}
		}
	
	// verifica sintassi username
	
	public function is_username($username){
		$regex = '/^[a-z0-9\.\-_]{3,30}$/i';
		return preg_match($regex, $username);
		}
	
	// verifica sintassi email (TRUE se ok)
	public function is_email($email){
		$regex = '/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/';
		return preg_match($regex, $email);
		}
		
	// verifica sintassi password (per semplicità solo lunghezza) (TRUE se ok)
	public function is_secure_password($password){
		if(strlen($password)>=8){
			return TRUE;
			}
		else{
			return FALSE;
			}
		}
			
	/*****************************************************
	METODI PER VERIFICARE ESISTENZA DI USERNAME E PASSWORD
	******************************************************/
	
	// verifica esistenza username (TRUE se esiste)
	public function isset_username($username){
		$query = "SELECT COUNT(username) AS count 
					FROM users 
					WHERE username='".mysql_real_escape_string($username)."' 
					LIMIT 1";
		$result = mysql_query($query) or die(mysql_error());
		$row = mysql_fetch_array($result);
		if($row['count']==1){
			return TRUE;
			}
		else{
			return FALSE;
			}
		}
	
	// verifica esistenza email (TRUE  se esiste)
	public function isset_email($email){
		$query = "SELECT COUNT(email) AS count 
					FROM users 
					WHERE email='".mysql_real_escape_string($email)."' 
					LIMIT 1";
		$result = mysql_query($query) or die(mysql_error());
		$row = mysql_fetch_array($result);
		if($row['count']==1){
			return TRUE;
			}
		else{
			return FALSE;
			}
		}
	
	/******************************
	I FORM DI LOGIN E REGISTRAZIONE
	******************************/
	public function get_login_form(){
		$html = '
			<form action="' .$this->Urls['login_page']. '" method="post" id="form_login">
			<input type="text" name="username" placeholder="Username" id="login_user" />
			<input type="password" name="pass" placeholder="Password " id="login_pass" />
			<input type="submit" name="login" value="accedi" id="login_submit"/>
			<span><a href="Registrazione.php">Registrati </a>&nbsp;<b>|</b>&nbsp;<a href="recupero.php"> Recupero dati</a></span>
			</form>';
		return $html;
		}
	
	public function get_register_form(){
		$html = '
			<form align="center" action="' .$this->Urls['register_page']. '" method="post" id="form_register">
			
			     <legend id="legend">Registrati</legend>
				 
				 <input type="text" name="nome" id="reg" placeholder="Nome " />
			
				<input type="text" name="username" id="reg" placeholder="Username " />
			
				<input type="text" name="email" id="reg" placeholder="Email " />
			
				<input type="password" name="pass1" id="reg" placeholder="Password " />
			
				<input type="password" name="pass2" id="reg" placeholder="Rip-Password " />
			<input type="submit" name="register" value="Iscriviti gratis" id="breg" />
			
			
			</form>';
		return $html;
		}
	
	/*****************************
	LINK LOGOUT
	*****************************/
	public function get_link_logout(){
		if($this->is_logged()){
			return '<a href="'.$this->Urls['logout_page'].'" class="logout">Logout</a>';
			}
		return '';
		}
		
	/*******************************
	METODO PER CRIPTARE LE PASSWORD
	*******************************/
	public function crypt_pass($pass){
		return sha1($pass);
		}
	
	/*****************************
	ESECUZIONE DELLA REGISTRAZIONE
	******************************/
	public function esegui_registrazione(){
		// se il form e i suoi input sono stati inviati
		if(isset($_POST['register']) AND 
		    isset($_POST['nome']) AND
			isset($_POST['username']) AND 
			isset($_POST['email']) AND 
			isset($_POST['pass1']) AND 
			isset($_POST['pass2'])){ 
			//valorizziamo alcune variabili
			$this->reg_nome = trim($_POST['nome']);
			$this->reg_username = trim($_POST['username']);
			$this->reg_email = trim($_POST['email']);
			$this->reg_pass = trim($_POST['pass1']);
			$this->reg_confirm_pass = trim($_POST['pass2']);
			// criptiamo la password
			$this->reg_crypt_pass = $this->crypt_pass($this->reg_pass);
			// eseguiamo la validazione degli input
			$valid_input = $this->check_input_registrazione();
			// se sono validi
			if($valid_input===TRUE){
				// inseriemo all'interno del database i dati
				$this->query_insert_registrazione();
				// settiamo il messaggio di successo della registrazione
				$this->message_script = 10;
				return TRUE;
				}
			}
		return FALSE;
		}
	
	// verifica che gli input siano corretti
	protected function check_input_registrazione(){
		if($this->empty_string($this->reg_username)){
			$this->message_script = 1;
			return FALSE;
			}
		else if($this->empty_string($this->reg_nome)==TRUE){
			$this->message_script = 16;
			return FALSE;
			}	
		else if($this->empty_string($this->reg_email)){
			$this->message_script = 2;
			return FALSE;
			}
		else if($this->empty_string($this->reg_pass)){
			$this->message_script = 3;
			return FALSE;
			}
		else if($this->reg_pass != $this->reg_confirm_pass){
			$this->message_script = 4;
			return FALSE;
			}
		else if(!$this->is_username($this->reg_username)){
			$this->message_script = 5;
			return FALSE;
			}
		else if(!$this->is_email($this->reg_email)){
			$this->message_script = 6;
			return FALSE;
			}
		else if(!$this->is_secure_password($this->reg_pass)){
			$this->message_script = 7;
			return FALSE;
			}
		else if($this->isset_username($this->reg_username)==TRUE){
			$this->message_script = 8;
			return FALSE;
			}
		else if($this->isset_email($this->reg_email)==TRUE){
			$this->message_script = 9;
			return FALSE;
			}
		
		
		return TRUE;
		
		}
	
	// esecuzione della query insert di registrazione
	protected function query_insert_registrazione(){
		$query = "
					INSERT INTO users 
					SET 
					    nome='".mysql_real_escape_string($this->reg_nome)."',
						username='".mysql_real_escape_string($this->reg_username)."', 
						pass='".mysql_real_escape_string($this->reg_crypt_pass)."', 
						email='".mysql_real_escape_string($this->reg_email)."', 
						data_reg= NOW()";
		$result = mysql_query($query) or die(mysql_error());
		return mysql_insert_id();
		}
		
	/*******************
	ESECUZIONE DEL LOGIN
	********************/
	public function esegui_login(){
		// se il form di login e i sui tutti input sono stati inviati 
		if(isset($_POST['login']) AND isset($_POST['username']) AND isset($_POST['pass'])){
			// valorizziamo delle variabili
			$this->login_username = trim($_POST['username']);
			$this->login_password = trim($_POST['pass']);
			// criptiamo la password
			$this->login_cryptpass = $this->crypt_pass($this->login_password);
			// validiamo i dati (non devono essere vuoti)
			$not_empty_input = $this->check_input_login();
			// se la validazione è andata a buon fine
			if($not_empty_input===TRUE){
				// eseguiamo la query e verifichiamo se individua le credenziali
				if($this->query_select_login()==TRUE){
					// settiamo lo status di utente loggato
					$this->set_logged($this->login_iduser);
					// settiamo l'username
					$this->set_username($this->login_username);
					// settiamo il messaggio di successo del login
					$this->message_script = 12;
					return TRUE;
					}
				// se la query non ha trovato utenti con quelle credenziali
				else{
					//  settiamo un messaggio di insuccesso dell'operazone
					$this->message_script = 11;
					}
				}
			}
		return FALSE;
		}
	
	// verifica che gli input del login non siano vuoti
	protected function check_input_login(){
		if($this->empty_string($this->login_username)){
			$this->message_script = 1;
			return FALSE;
			}
		else if($this->empty_string($this->login_password)){
			$this->message_script = 3;
			return FALSE;
			}
		return TRUE;
		}
	
	// esecuzione della qeury per verificare il login
	protected function query_select_login(){
		$query = "
					SELECT id FROM users 
					WHERE 
						username='".mysql_real_escape_string($this->login_username)."' AND 
						pass='".mysql_real_escape_string($this->login_cryptpass)."'";
		$result = mysql_query($query) or die(mysqli_error());
		// se individua l'utente
		if(mysql_num_rows($result)==1){
			$row = mysql_fetch_array($result);
			$this->login_iduser = $row['id'];
			return TRUE;
			}
		return FALSE;
		}
		
	/***********************************
	VERIFICA DELLO STATO DI LOGIN UTENTE
	***********************************/
	
	// verifica login
	public function is_logged(){
		return isset($_SESSION['auth']);
		}
	
	// set login
	protected function set_logged($id_user){
		$_SESSION['auth'] = $id_user;
		return;
		}
	
	// access denied
	public function access_denied(){
		if(!$this->is_logged()){
			header("location: ".$this->Urls['login_page']."?message=14");
			exit;
			}
		return;
		}

	protected function set_username($username){
		$_SESSION['username_logged'] = $username;
		return;
		}
	
	public function get_username(){
		return isset($_SESSION['username_logged']) ? $_SESSION['username_logged'] : '';
		}	
		
	// logout
	public function logout(){
		session_unset();
		session_destroy();
		setcookie(session_name(), '', time()-42000, '/');
		header("location: ".$this->Urls['login_page']."?message=13");
		return;
		}

	/*****************************
	METODO PER OTTENERE I MESSAGGI
	******************************/
	public function get_message(){
		if(isset($_GET['message'])){
			$this->message_script = $_GET['message'];
			}
		$key = intval($this->message_script);
		if(array_key_exists($key, $this->messages)){
			return $this->messages[$key];
			}
		return FALSE;
		}
	}

Codice:
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(30) NOT NULL,
  `username` varchar(100) NOT NULL,
  `pass` varchar(50) NOT NULL,
  `email` varchar(255) NOT NULL,
  `data_reg` datetime NOT NULL,
  PRIMARY KEY (`id`)
);
 
Ultima modifica:
ciao
do un occhio poi spero di saperti dire, pero hai detto che salvi un un "altra" tabella, giusto? ed è su quella che l'utente deve operare una volta sola?
 
Si ,ma quello che ti ho postato e il codice di connessione e registrazione solo che mysql e non i msqli come mi hai detto tu se vuoi pisso postare anche il form che deve usare una sola volta ma questo credo che con il codice che mi hai dato vada bene solo che il tuo era in msqli
 
ciao
se per ora non conosci mysqli puoi usare ancora mysql (tra l'altro sono molto simili), dipende dalla versione di php che hai sul tuo host
per cui basta che tu modifichi
PHP:
<?php
session_start();
//dati di connessione
$q="SELECT * FROM tabella WHERE id_utente=".$_SESSION['auth'];//vedo che l'hai chiamata $_SESSION['auth'] = $id_user;
$ris=mysql_query($q);
if(mysql_num_rows($ris)){
    echo "messaggio di errore";
    //e riinvii dove vuoi
}else{
    //prelevi i dati dal form
    //li inserisci nella tabella compreso l'id dell'utente
    //e rimandi dove vuoi
}
?>
poi non so come chiami e come è composta l'altra tabella, quella dove devi inserire la riga che viene dal form
schematicamente dovrebbe essere così

Codice:
id int(xy) autoincrement primay key
id_utente int (11)
frase varchar(250)
è così (circa)?
 
ho provato e mi da questo errore e non riesco ha capire da cosa dipende.


Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given
in F:\xampp\htdocs\pr\crea-rosa.php on line 136
 
ciao
verifica la querystringa e la querry con un var_dump, eventualmente riportando quello che ti risulta, l'errore nasce prima di mysql_num_rows
PHP:
<?php
session_start();
//dati di connessione
$q="SELECT * FROM tabella WHERE id_utente=".$_SESSION['auth'];//vedo che l'hai chiamata $_SESSION['auth'] = $id_user;
var_dump($q); echo "<br>";//verifiche che venga come vuoi che venga
$ris=mysql_query($q);
var_dump($q); echo "<br>";//se ti da RESOURCE la query è OK, se bool (false) c'è qualcosa che non va nella querystringa
if(mysql_num_rows($ris)){
    echo "messaggio di errore";
    //e riinvii dove vuoi
}else{
    //prelevi i dati dal form
    //li inserisci nella tabella compreso l'id dell'utente
    //e rimandi dove vuoi
}
?>
poi la riga del var_dump la togli o la commenti
ricorda che il var_dump è uno degli strumenti più adatti per fare il debag

dimenticavo, è meglio che l'i tu lo tratti così
PHP:
if(mysql_num_rows($ris)> 0){
 
grazie per il var_dump non conoscevo ancora questo tipo di verifica della query,
credo che visualizzando a schermo questo
string(42) "SELECT * FROM formazione WHERE id_utente=1"
string(42) "SELECT * FROM formazione WHERE id_utente=1"

vada tutto bene anche perche trova id dell'utente registrato,ho fatto piu prove e funziona.

ma quando inserisce nell'altra tabella non riporta lo stesso id.

io fatto cosi nel codice che mi hai scritto tu sopra.
Codice:
 $q="SELECT * FROM users WHERE id_utente=".$_SESSION['auth'];
perche la mia tabella dove viene registrato l'utente si chiama users.

poi nel codice di inserimento nella tabella formazione ho inserito id
Codice:
(mysql_query("INSERT INTO formazione ('id') VALUES ('$id')" ) or die (mysql_error())){
			
			
				}else{
					
					echo "formazione eseguita con successo.";
					}
				
		 }


ma non riporta id e il form non si blocca dopo il primo inserimento.

poi ho usato header ('location: mia_pagina.php');

credo che vada bene per indirizzare dove voglio.

e in fine non finiro mai di ringraziarti per l'aiuto che mi stai dando,aspetto con pazienza la tua risposta.
 
ciao
si header ('location: mia_pagina.php'); può andare bene, però devi stare attento che prima di tale istruzione non ci sia alcun output html (nemmeno uno spazio), altrimenti devi ridirigere il flusso se vuoi che funzioni
poi non capisco bene quel codice di insert.
posta il dump della tabella formazione
una cosa ma non è quella su cui devi verificare che sia fatto un solo inserimento?
 
ciao,
si la tabella formazioni e dove verificare se e stato effettuato un solo inserimento,
e questa.
PHP:
CREATE TABLE IF NOT EXISTS `formazione` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
 
 `portiere1` text NOT NULL,
  `portiere2` text NOT NULL,
  `portiere3` text NOT NULL,
  
`difensore1` text NOT NULL,
  `difensore2` text NOT NULL,
  `difensore3` text NOT NULL,
  
`difensore4` text NOT NULL,
  `difensore5` text NOT NULL,
  `difensore6` text NOT NULL,
  
`difensore7` text NOT NULL,
  `difensore8` text NOT NULL,
  `centrocampista1` text NOT NULL,
 
 `centrocampista2` text NOT NULL,
  `centrocampista3` text NOT NULL,
  `centrocampista4` text NOT NULL,
  
`centrocampista5` text NOT NULL,
  `centrocampista6` text NOT NULL,
  `centrocampista7` text NOT NULL,
  
`centrocampista8` text NOT NULL,
  `attaccante1` text NOT NULL,
  `attaccante2` text NOT NULL,
  
`attaccante3` text NOT NULL,
  `attaccante4` text NOT NULL,
  `attaccante5` text NOT NULL,
  
`attaccante6` text NOT NULL,
  PRIMARY KEY (`id`)
)
ho creato il form con i select che prendono dei valori da un altra tabella
ho fatto i controlli
PHP:
if(isset($_POST['crea_formazione'])){
dopo aver fatto i controlli si passa a l'inserimento nella tabella formazioni
quindi nella insert che vedi sotto ho inserito id credendo che venisse riportato sempre lo stesso id.

nel insert into ho scritto solo id ma ci sono anche tutti gli altri valori
PHP:
elseif(mysql_query("INSERT INTO formazione ('id') VALUES ('$id')" ) or die (mysql_error())){
			
			
				}else{
					
					echo "formazione eseguita con successo.";
					}
				
		 }

io devo prendere id nella tabella users tramite il $_session e far inserire la formazione nella tabella formazioni.

ma questo non avviene e sicuramente e per questo motivo che non si blocca il form.

spero di averti illustrato bene il tutto,grazie.
 
ciao
quell'id è l'id è del record, dovresti aggiungere l'id_utente dell'utente che fa l'inserimento.
quano devi mostrare il form leggi nella tabella formazione se c'è di già tale id_utente, se si non fai inserire se no permetti di vedere il form, ti schematizzo
PHP:
<?php
//.......
if(mysql_num_rows(mysql_query("SELECT id_utente FROM formazione WHERE id_utente=$_SESSION['auth']"))>0){
    //l'utente ha già inserito e rimandi dove vuoi
}else{
    //fai vedere il form per fare l'inserimento
}
//....
?>
la tabella formazione dovrebbe essere fatta cosi
Codice:
id int (xy) autoncrement primarikey
id_utente int(xy) unique not null
difensore1 text NOT NULL
difensore2 text NOT NULL
difensore3 text NOT NULL
ecc...

una domanda perchè usi il campo tipo text, da quello che ho capito dovrebbe trattarsi di nomi quindi dovrebbe bastarti tipo varchar(50) o al massimo un po' più lungo
 
ho aggiunto id_utente nella tabella come mi hai detto e adesso fa l'inserimento nella tabella formazione una sola volta pero succede che anche se accedo con un altro account mi dice Duplicate entry '0' for key 'id_utente'
e non mi nasconde il form questo errore lo genera il mysql_error.

ho anche provato ha cambiare il valore finale >0 cosi nasconde il form ma ha tutti gli account che adesso sono registrati per le mie prove e fa visualizzare il messaggio che ho scritto io 'formazione gia creata' anche se non e ancora stata creata.
 
questo e l'insert ho provato anche senza inserire id_utente



PHP:
elseif(mysql_query("INSERT INTO formazione (id_utente, portiere1, portiere2, portiere3, difensore1, difensore2, difensore3, difensore4, difensore5, difensore6, difensore7, difensore8, centrocampista1, centrocampista2, centrocampista3, centrocampista4, centrocampista5, centrocampista6, centrocampista7,  centrocampista8, attaccante1, attaccante2, attaccante3, attaccante4, attaccante5, attaccante6)
 
VALUES 

('$id_utente','$portiere1','$portiere2','$portiere3','$difensore1','$difensore2','$difensore3','$difensore4','$difensore5','$difensore6','$difensore7','$difensore8','$centrocampista1','$centrocampista2','$centrocampista3','$centrocampista4','$centrocampista5','$centrocampista6','$centrocampista7','$centrocampista8','$attaccante1','$attaccante2','$attaccante3','$attaccante4','$attaccante5','$attaccante6')" ) or die (mysql_error())){
 
Ultima modifica:
ciao
vista così la query è giusta (sintassi ok), verifica con un var_dump prima di fare l'inserimento cosa ti ritrovi nella variabile $id_utente
da quello che ho capito quando campi utente quella variabile non si valorizza o rimane 0, per cui essendo il campo unique ti dice che non puoi riinserirrlo.
sempre da quello che ho capito il valore della variabile $id_utente dovrebbe derivarare da $_SESSION['auth'], quindi verifica anche che la sessione si valorizzi e che cambi quando cambi utente
 
grazie,
come sempre gentilissimo nel rispondere,
come hai detto tu id_utente no viene valorizzato infatti nella tabella viene indicato il valore '0' e come ti ho gia detto anche se accedo con altro utente non fa inserire la formazione perche da sempre valore '0' .

ti posto il codice della pagina e della class user puoi dare un occhio tu.
perche non ci sto capendo piu niente forse cosi risolviamo prima
questa e la pagina di inserimento.
PHP:
   <?php
 $sql = "SELECT * FROM portieri ORDER BY calciatore";
$result = mysql_query($sql);
$prodotti = array();
while ($row = mysql_fetch_array($result)) {
    $portiere[$row["calciatore"]] = $row["calciatore"] . " - " . $row["costo"] . " - ( " . $row["squadra"] . " ) ";
}

$sql = "SELECT * FROM difensori ORDER BY calciatore";
$result = mysql_query($sql);
$prodotti = array();
while ($row = mysql_fetch_array($result)) {
    $difensore[$row["calciatore"]] = $row["calciatore"] . " - " . $row["costo"] . " - ( " . $row["squadra"] . " ) ";
}

$sql = "SELECT * FROM centrocampisti ORDER BY calciatore";
$result = mysql_query($sql);
$prodotti = array();
while ($row = mysql_fetch_array($result)) {
    $centrocampista[$row["calciatore"]] = $row["calciatore"] . " - " . $row["costo"] . " - ( " . $row["squadra"] . " ) ";
}

$sql = "SELECT * FROM attaccanti ORDER BY calciatore";
$result = mysql_query($sql);
$prodotti = array();
while ($row = mysql_fetch_array($result)) {
    $attaccante[$row["calciatore"]] = $row["calciatore"] . " - " . $row["costo"] . " - ( " . $row["squadra"] . " ) ";
}
?>
   <?php
   if(mysql_num_rows(mysql_query("SELECT id_utente FROM formazione WHERE id_utente=".$_SESSION['auth'])) < 0){ 
    //l'utente ha già inserito e rimandi dove vuoi 
	echo "hai gia creato la formazione.";
}else{ 
    //fai vedere il form per fare l'inserimento 
   ?>
    
  <form id="articoli" name="giocatori" method="POST" action="<?php echo $_SERVER["PHP_SELF"] ;  ?>">
     <div id="punti_1">  <span>Punti</span>
      
      <div id="punti"> </div>
      
      </div>
   
    <label>Portieri</label> 
    <select  onchange="calcolaPunti();" name="portiere1">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($portiere as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>

    <select onchange="calcolaPunti();" name="portiere2">
    <option value="0">seleziona giocatore</option>  
        <?php
        foreach ($portiere as $calciatore => $value) {
            echo"<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="portiere3">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($portiere as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    
     <label>Difensori</label> 
     
    <select  onchange="calcolaPunti();" name="difensore1">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($difensore as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>

    <select onchange="calcolaPunti();" name="difensore2">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($difensore as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="difensore3"> 
    <option value="0">seleziona giocatore</option>
        <?php
        foreach ($difensore as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
      
    <select  onchange="calcolaPunti();" name="difensore4">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($difensore as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>

    <select onchange="calcolaPunti();" name="difensore5">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($difensore as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="difensore6">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($difensore as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="difensore7">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($difensore as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="difensore8">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($difensore as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    
    <label>Centrocampisti</label>
    
    <select onchange="calcolaPunti();" name="centrocampista1">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($centrocampista as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="centrocampista2">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($centrocampista as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="centrocampista3">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($centrocampista as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="centrocampista4"> 
    <option value="0">seleziona giocatore</option>
        <?php
        foreach ($centrocampista as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="centrocampista5">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($centrocampista as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="centrocampista6">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($centrocampista as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="centrocampista7">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($centrocampista as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="centrocampista8">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($centrocampista as $calciatore  => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    
     <label>Attaccanti</label>
     
     <select onchange="calcolaPunti();" name="attaccante1"> 
     <option value="0">seleziona giocatore</option>
        <?php
        foreach ($attaccante as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="attaccante2">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($attaccante as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="attaccante3">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($attaccante as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="attaccante4">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($attaccante as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="attaccante5">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($attaccante as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
    <select onchange="calcolaPunti();" name="attaccante6">
    <option value="0">seleziona giocatore</option> 
        <?php
        foreach ($attaccante as $calciatore => $value) {
            echo "<option value='$calciatore'>$value</option>";
        }
        ?>
    </select>
     
     
    
     <input  type="submit" name="crea_formazione" value="Crea Formazione" >
     
     <input  type="reset" name="cancella" value="Cancella" >
 

     
	  
     
      <div id="con_formazione">
     <?php
	 if(isset($_POST['crea_formazione'])){
	$portiere1 = ($_POST['portiere1']);
	$portiere2 = ($_POST['portiere2']);
	$portiere3 = ($_POST['portiere3']);
	$difensore1 = ($_POST['difensore1']);
	$difensore2 = ($_POST['difensore2']);
	$difensore3 = ($_POST['difensore3']);
	$difensore4 = ($_POST['difensore4']);
	$difensore5 = ($_POST['difensore5']);
	$difensore6 = ($_POST['difensore6']);
	$difensore7 = ($_POST['difensore7']);
	$difensore8 = ($_POST['difensore8']);
	$centrocampista1 = ($_POST['centrocampista1']);
	$centrocampista2 = ($_POST['centrocampista2']);
	$centrocampista3 = ($_POST['centrocampista3']);
	$centrocampista4 = ($_POST['centrocampista4']);
	$centrocampista5 = ($_POST['centrocampista5']);
	$centrocampista6 = ($_POST['centrocampista6']);
	$centrocampista7 = ($_POST['centrocampista7']);
	$centrocampista8 = ($_POST['centrocampista8']);
	$attaccante1 = ($_POST['attaccante1']);
	$attaccante2 = ($_POST['attaccante2']);
	$attaccante3 = ($_POST['attaccante3']);
	$attaccante4 = ($_POST['attaccante4']);
	$attaccante5 = ($_POST['attaccante5']);
	$attaccante6 = ($_POST['attaccante6']);
	
if(empty($portiere1) && empty($portiere2) && empty($portiere3) && empty($difensore1) && empty($difensore2) && empty($difensore3) && empty($difensore4) && empty($difensore5) && empty($difensore6) && empty($difensore7) && empty($difensore8) && empty($centrocampista1) && empty($centrocampista2) && empty($centrocampista3) && empty($centrocampista4) && empty($centrocampista5) && empty($centrocampista6) && empty($centrocampista7) && empty($centrocampista8) && empty($attaccante1) && empty($attaccante2) && empty($attaccante3) && empty($attaccante4) && empty($attaccante5) && empty($attaccante6)) {
		echo 'ATTENZIONE: la formazione non e completa.<a href="javascript:history.back();">Torna indietro</a>';
		
		}elseif(mysql_query("INSERT INTO formazione (id_utente, portiere1, portiere2, portiere3, difensore1, difensore2, difensore3, difensore4, difensore5, difensore6, difensore7, difensore8, centrocampista1, centrocampista2, centrocampista3, centrocampista4, centrocampista5, centrocampista6, centrocampista7,  centrocampista8, attaccante1, attaccante2, attaccante3, attaccante4, attaccante5, attaccante6) VALUES ('$id_utente','$portiere1','$portiere2','$portiere3','$difensore1','$difensore2','$difensore3','$difensore4','$difensore5','$difensore6','$difensore7','$difensore8','$centrocampista1','$centrocampista2','$centrocampista3','$centrocampista4','$centrocampista5','$centrocampista6','$centrocampista7','$centrocampista8','$attaccante1','$attaccante2','$attaccante3','$attaccante4','$attaccante5','$attaccante6')" ) or die (mysql_error())){
			
			
				}else{
					
					echo "formazione eseguita con successo.";
					header('location: rosa.php');
					}
				
		 }
			?> 
		  </div>  
    
  </form>

  <?php
      
	  
		 

  	}//fine sessione
?> 
    </div><!-- fine div crea rosa-->
questa e la class user
non completa perche troppo lunga ma ho omesso le parti meno importanti.
PHP:
I FORM DI LOGIN E REGISTRAZIONE
	*/
	public function get_login_form(){
		$html = '
			<form action="' .$this->Urls['login_page']. '" method="post" id="form_login">
			<input type="text" name="username" placeholder="Username" id="login_user" />
			<input type="password" name="pass" placeholder="Password " id="login_pass" />
			<input type="submit" name="login" value="accedi" id="login_submit"/>
			<span><a href="registrazione.php">Registrati </a>&nbsp;<b>|</b>&nbsp;<a href="recupero.php"> Recupero dati</a></span>
			</form>';
		return $html;
		}
	
	public function get_register_form(){
		$html = '
		
			<form align="center" action="' .$this->Urls['register_page']. '" method="post" id="form_register">
			
			     <legend id="legend">Modulo di Registrazione</legend>
				 
				 <input type="text" name="nome" id="reg" placeholder="Nome " />
			
				<input type="text" name="username" id="reg" placeholder="Username " />
			
				<input type="text" name="email" id="reg" placeholder="Email " />
			
				<input type="password" name="pass1" id="reg" placeholder="Password " />
			
				<input type="password" name="pass2" id="reg" placeholder="Rip-Password " />
			    <input type="submit" name="register" value="Iscriviti gratis" id="breg" />
			
			
			</form>
			
			';
		return $html;
		}
	
	/*****************************
	LINK LOGOUT
	*****************************/
	public function get_link_logout(){
		if($this->is_logged()){
			return '<a href="'.$this->Urls['logout_page'].'" class="logout">Logout</a>';
			}
		return '';
		}
		
	/*******************************
	METODO PER CRIPTARE LE PASSWORD
	*******************************/
	public function crypt_pass($pass){
		return sha1($pass);
		}
	
	/*****************************
	ESECUZIONE DELLA REGISTRAZIONE
	******************************/
	public function esegui_registrazione(){
		// se il form e i suoi input sono stati inviati
		if(isset($_POST['register']) AND 
		    isset($_POST['nome']) AND
			isset($_POST['username']) AND 
			isset($_POST['email']) AND 
			isset($_POST['pass1']) AND 
			isset($_POST['pass2'])){ 
			//valorizziamo alcune variabili
			$this->reg_nome = trim($_POST['nome']);
			$this->reg_username = trim($_POST['username']);
			$this->reg_email = trim($_POST['email']);
			$this->reg_pass = trim($_POST['pass1']);
			$this->reg_confirm_pass = trim($_POST['pass2']);
			// criptiamo la password
			$this->reg_crypt_pass = $this->crypt_pass($this->reg_pass);
			// eseguiamo la validazione degli input
			$valid_input = $this->check_input_registrazione();
			// se sono validi
			if($valid_input===TRUE){
				// inseriemo all'interno del database i dati
				$this->query_insert_registrazione();
				// settiamo il messaggio di successo della registrazione
				$this->message_script = 10;
				return TRUE;
				}
			}
		return FALSE;
		}
	
	// verifica che gli input siano corretti
	protected function check_input_registrazione(){
		if($this->empty_string($this->reg_username)){
			$this->message_script = 1;
			return FALSE;
			}
		else if($this->empty_string($this->reg_nome)==TRUE){
			$this->message_script = 16;
			return FALSE;
			}	
		else if($this->empty_string($this->reg_email)){
			$this->message_script = 2;
			return FALSE;
			}
		else if($this->empty_string($this->reg_pass)){
			$this->message_script = 3;
			return FALSE;
			}
		else if($this->reg_pass != $this->reg_confirm_pass){
			$this->message_script = 4;
			return FALSE;
			}
		else if(!$this->is_username($this->reg_username)){
			$this->message_script = 5;
			return FALSE;
			}
		else if(!$this->is_email($this->reg_email)){
			$this->message_script = 6;
			return FALSE;
			}
		else if(!$this->is_secure_password($this->reg_pass)){
			$this->message_script = 7;
			return FALSE;
			}
		else if($this->isset_username($this->reg_username)==TRUE){
			$this->message_script = 8;
			return FALSE;
			}
		else if($this->isset_email($this->reg_email)==TRUE){
			$this->message_script = 9;
			return FALSE;
			}
		
		
		return TRUE;
		
		}
	
	// esecuzione della query insert di registrazione
	protected function query_insert_registrazione(){
		$query = "
					INSERT INTO users 
					SET 
					    nome='".mysql_real_escape_string($this->reg_nome)."',
						username='".mysql_real_escape_string($this->reg_username)."', 
						pass='".mysql_real_escape_string($this->reg_crypt_pass)."', 
						email='".mysql_real_escape_string($this->reg_email)."', 
						data_reg= NOW()";
		$result = mysql_query($query) or die(mysql_error());
		return mysql_insert_id();
		}
		
	/*******************
	ESECUZIONE DEL LOGIN
	********************/
	public function esegui_login(){
		// se il form di login e i sui tutti input sono stati inviati 
		if(isset($_POST['login']) AND isset($_POST['username']) AND isset($_POST['pass'])){
			// valorizziamo delle variabili
			$this->login_username = trim($_POST['username']);
			$this->login_password = trim($_POST['pass']);
			// criptiamo la password
			$this->login_cryptpass = $this->crypt_pass($this->login_password);
			// validiamo i dati (non devono essere vuoti)
			$not_empty_input = $this->check_input_login();
			// se la validazione è andata a buon fine
			if($not_empty_input===TRUE){
				// eseguiamo la query e verifichiamo se individua le credenziali
				if($this->query_select_login()==TRUE){
					// settiamo lo status di utente loggato
					$this->set_logged($this->login_iduser);
					// settiamo l'username
					$this->set_username($this->login_username);
					// settiamo il messaggio di successo del login
					$this->message_script = 12;
					return TRUE;
					}
				// se la query non ha trovato utenti con quelle credenziali
				else{
					//  settiamo un messaggio di insuccesso dell'operazone
					$this->message_script = 11;
					}
				}
			}
		return FALSE;
		}
	
	// verifica che gli input del login non siano vuoti
	protected function check_input_login(){
		if($this->empty_string($this->login_username)){
			$this->message_script = 1;
			return FALSE;
			}
		else if($this->empty_string($this->login_password)){
			$this->message_script = 3;
			return FALSE;
			}
		return TRUE;
		}
	
	// esecuzione della qeury per verificare il login
	protected function query_select_login(){
		$query = "
					SELECT id FROM users 
					WHERE 
						username='".mysql_real_escape_string($this->login_username)."' AND 
						pass='".mysql_real_escape_string($this->login_cryptpass)."'";
		$result = mysql_query($query) or die(mysql_error());
		// se individua l'utente
		if(mysql_num_rows($result)==1){
			$row = mysql_fetch_array($result);
			$this->login_iduser = $row['id'];
			return TRUE;
			}
		return FALSE;
		}
		
	/***********************************
	VERIFICA DELLO STATO DI LOGIN UTENTE
	***********************************/
	
	// verifica login
	public function is_logged(){
		return isset($_SESSION['auth']);
		}
	
	// set login
	protected function set_logged($id_user){
		$_SESSION['auth'] = $id_user;
		return;
		}
	
	// access denied
	public function access_denied(){
		if(!$this->is_logged()){
			header("location: ".$this->Urls['login_page']."?message=14");
			exit;
			}
		return;
		}

	protected function set_username($username){
		$_SESSION['username_logged'] = $username;
		return;
		}
	
	public function get_username(){
		return isset($_SESSION['username_logged']) ? $_SESSION['username_logged'] : '';
		}
 

Discussioni simili