inserimento dati in tabella

  • Creatore Discussione Creatore Discussione nim
  • Data di inizio Data di inizio

nim

Utente Attivo
11 Ott 2011
96
0
0
salve a tutti!!!
per voi sarà una fesseria ma io giuro che non ne vengo fuori!
sto imparando MySql e ho provato a fare una piccola applicazione per archiviare delle password in una tabella "archivio_password" in un database "passaword".
create le colonne id,programma,password,importanza ho fatto così nell'index.php:
PHP:
<form method="post" action="insert.php">
Programma: <input type="text" name="programma"><br>
password: <input type="text" name="password"><br>
importanza da 1 a 10: <input type="text" name="importanza"><br>
<input type="submit" value="archivia">
</form>

<?php
$message="";
if (isset($_GET['alert']))
{
if ($_GET['alert'] == 0) {$message="Password archiviate!";}
if ($_GET['alert'] == 1)
	{
		$message = "ERRORE: Nessun dato scritto nel database.<br>Tutti i campi devono essere completati!";
	}}
echo"$message";
?>

e nel file insert.php
PHP:
<?php
if (empty($_POST['programma']) OR empty($_POST['password']) OR empty($_POST['importanza']))
{
header("location: index.php?alert=1");
die;
}
include ".include/db_connect.php";
$sql = "INSERT INTO archivio_password (programma,password,importanza) VALUES ('$_POST[programma]','$_POST[password]','$_POST[importanza]')";
mysql_query($sql , $conn);
header("location: index.php?alert=0");
?>
chiaramente anche il file di connessione al database db_connect.php
PHP:
<?php
 
$db = "password";
$host = "localhost";
$username = "root";
 
if(!$conn = @mysql_connect($host,$username))
{
	echo 'Impossibile connettersi a MySql';
	die;
}
 
if(!@mysql_select_db($db,$conn))
{
	echo "Impossibile selezionare il database $db";
	die;
}
 
?>
una volta scritti i dati nel modulo mi viene l'avviso "password archiviate!" però quando guardo su phpmyadmin scopro che non ha salvato proprio niente..mi aiutereste?
grazie in anticipo.
 
Ultima modifica:
ciao
metti due var_dump

PHP:
//...
include ".include/db_connect.php";
$sql = "INSERT INTO archivio_password (programma,password,importanza) VALUES ('$_POST[programma]','$_POST[password]','$_POST[importanza]')";
var_dump($sql );//vedi se la stringa viene scritta giusta
//metti una variabile
$ris=mysql_query($sql , $conn);
var_dump($ris);//si ti da Bool (FALSE) la query non viene eseguita, se ti da resuorce si
//...
poi verifichi che i nomi che hai messo in
archivio_password (programma,password,importanza)
siano PERFETTAMENTE uguali a quelli che hai nella tabella, compreso maiscole/minuscole

dimenticavo:
nella tabella hai messo un id autoincrement primary key?
 
grazie della risposta intanto...
ho messo i due var_dump ma non mi da niente di diverso da prima..
e comunque sì, ho messo un id AI con chiave primaria...
ah, ho controllato, corrisponde tutto con quello che c'è nel database e nella tabella...
 
Ultima modifica:
Quando fa l'insert devi rispettare tutte le colonne quindi se hai una colonna di nome id,immagino in autoincrement
la tu ainsert

PHP:
$sql = "INSERT INTO archivio_password (programma,password,importanza) VALUES ('$_POST[programma]','$_POST[password]','$_POST[importanza]')";

diventa

PHP:
$sql = "INSERT INTO archivio_password (programma,password,importanza) VALUES ('','$_POST[programma]','$_POST[password]','$_POST[importanza]')";

ovviamente il campo vuoto devi lasciarla nella poszione in cui ti trovi la colonna id, inq uesto caso la prima colonna
 
ciao
mi era sfuggita :crying: :crying: :crying:una cosa importante

PHP:
$sql = "INSERT INTO archivio_password (programma,password,importanza) VALUES ('$_POST[programma]','$_POST[password]','$_POST[importanza]')";
correggi in

PHP:
$sql = "INSERT INTO archivio_password (programma,password,importanza) VALUES ('".$_POST['programma']."','".$_POST['password']."','".$_POST['importanza']."')";

p.s.
non è che i var_dump modofichino
servono per vedere i valori restituiti da una variabile o funzione o altro, vedendo quello che restituiscono si puo, non sempre, capire dove si annida l'errore
es. se il primo var_dump ti avesse riestituito
String(nn) "INSERT INTO archivio_password (programma,password,importanza) VALUES ('','mia pasword','molto')"
ti saresti accorto che non trasmetti il valore di $_POST['programma'] quindi risalendo vedere perchè non viene trasmesso
 
ok ho effettuato i dovuti cambiamenti ma niente...proprio non c'è verso...non si salvano nel database ma non vengono neanche errori di connessione o simili ...sembra tutto apposto tranne che non salva effettivamente quello che vorrei...
 
Ultima modifica:
sì chiedo scusa.. è che non succede niente, non mi dice niente , tutto come prima: password archiviate e sembra tutto ok se non che...non ha archiviato un piffero...
ho provato così
PHP:
<?php 
if (empty($_POST['programma']) or empty($_POST['password']) or empty($_POST['importanza'])) 
{ 
header("location: index.php?alert=1"); 
} 
include ".include/db_connect.php"; 
$sql = "INSERT INTO archivio_password (programma,password,importanza) VALUES ('".$_POST['programma']."','".$_POST['password']."','".$_POST['importanza']."')";  
mysql_query($sql , $conn) or die("Errore: ".mysql_error); 
header("location: index.php?alert=0"); 
?>
e mi da questa schermata di errore http://www.icfast.altervista.org/errori.JPG
 
Ultima modifica:
ciao
se i var_dump non si vedono vuol dire che le righe non vengono eseguite ne $sql ne il mysql_query, quindi anche se fossere errate non ti danno errore perche non eseguite
prova a invertire l'if e metti un else

PHP:
<?php 
if (!empty($_POST['programma']) && !empty($_POST['password']) && !empty($_POST['importanza'])) 
{
include "include/db_connect.php"; 
$sql = "INSERT INTO archivio_password (programma,password,importanza) VALUES ('".$_POST['programma']."','".$_POST['password']."','".$_POST['importanza']."')";
var_dump($sql); 
$ris=mysql_query($sql , $conn) or die("Errore: ".mysql_error); 
var_dump($ris);
header("location: index.php?alert=0"); 
}else{
header("location: index.php?alert=1"); 
}
?>
quell'errore che ti da errore http://www.icfast.altervista.org/errori.JPG non so cosa sia esattamente dall'jpg per quel che si legge sembra che non trovi il file di connessione db:connect.php (intanto togli quel punto davanti)
 
sì!!! ora funziona tutto!!!
ma perchè quest'inversione.? cioè come ha fatto a venirti in mente...non ho capito bene perchè e cosa avevo sbagliato...
 
ciao
per l'inversione è diciamo un mio stile.
l'errore era soprattutto per il . davanti all'include per cui, non avendo i dati di connessione, non faceva la query, mentre l'header location si (per quello ti diceva inserimento OK).
poi conviene sempre quando hai due o più possibilità di inserire l'else (e se serve l'elseif) per essere sicuro o che fa l'una o l'altra.
fare come ho fatto io o come (circa) hai fatto tu è la medesima cosa

PHP:
<?php  
if (empty($_POST['programma']) || empty($_POST['password']) || empty($_POST['importanza'])){ 
	header("location: index.php?alert=1");
}else{ //questo invece secondo me serve
	include "include/db_connect.php";  
	$sql = "INSERT INTO archivio_password (programma,password,importanza) VALUES ('".$_POST['programma']."','".$_POST['password']."','".$_POST['importanza']."')"; 
	mysql_query($sql , $conn) or die("Errore: ".mysql_error);  
	header("location: index.php?alert=0");  
} 
?>
analogo discorso per quando leggi i get di ritorno

PHP:
<?php
$message="";
if (isset($_GET['alert'])){
	if ($_GET['alert'] == 0){
		$message="Password archiviate!";
	}elseif($_GET['alert'] == 1){
        $message = "ERRORE: Nessun dato scritto nel database.<br>Tutti i campi devono essere completati!";
    }
}
echo"$message";
?>
p.s.
comunque in precedenza avevo detto una put....ta:
per forza non vedi i var_dump, non fai intempo perchè l'eader location ti dirotta subito e quindi (anche se ci sono) il loro tempo di permanenza a monitor e quasi zero

ps al p.s
visto che stai imparando:
indenta sempre il codice poi è più facile rileggerlo, qui è semplice, ma se poi farai script più lunghi e complessi capirai meglio quello che hai fatto
 
visto che stai imparando:
indenta sempre il codice poi è più facile rileggerlo, qui è semplice, ma se poi farai script più lunghi e complessi capirai meglio quello che hai fatto

Sacorsanto, inoltre metti anche dei filtri ai parametri di input (non basta controllare che non siano vuoti), l'applicazione ne guadagna in sicurezza.
 

Discussioni simili