PDA

View Full Version : [PHP] Miglioramento script


dbp86
17-02-2011, 13:16
Ciao ragazzi, ho scritto questo script che inserisce dei dati trasmetti tramite form in un database mysql.

Mi chiedevo, come posso aggiungere un controllo se i dati inseriti sono già esistenti all'interno del database?

ps: ho aggiunto un controllo sul nome incluso dentro una funzione e richiamato per valutarne il risultato, true o false, ho fatto male?
vedo che lo script funziona.

<html>
<head>
<body>

come vi sembra?

<?

require 'connect.php';
require 'config.php';

function controllodati()
{
if ( empty($_POST['nome']) ) die ('Il campo nome è obbligatorio');
}

$query= "insert into glossario (nome, descrizione) values ('{$_POST['nome']}', '{$_POST['descrizione']}')";
$result= mysql_query($query);
if(controllodati()==true) {
die ('impossibile continuare');
}

else {
if(!$result) {
die ('Inserimento non riuscito'.mysql_error());
}
}
mysql_close();
echo 'Inserimento avvenuto con successo';
?>
<br>
<a href="form.html"> Torna al form di inserimento </a>
<br>
<a href="leggi.php"> Visualizza tutti i valori esistenti nel database </a>

</head>
</body>
</html>

bobbytre
17-02-2011, 13:57
non ha senso fare il controllo dei dati DOPO aver gia eseguito la query sul database

e poi la tua funzione di controllo non ritorna un valore TRUE/FALSE

dbp86
17-02-2011, 13:58
non ha senso fare il controllo dei dati DOPO aver gia eseguito la query sul database

e poi la tua funzione di controllo non ritorna un valore TRUE/FALSE

non mi ero accorto di aver messo la funzione dopo la query.

Mi spiegheresti come modificare la funzione?

scusa ma sono alle prima armi.

grazie

dbp86
17-02-2011, 14:02
così?

<html>
<head>
<body>



<?
require 'connect.php';
require 'config.php';


function controllodati()
{
if ( empty($_POST['nome']) )
{ die ('impossibile'); ;
}
}


controllodati();

$query= "insert into glossario (nome, descrizione) values ('{$_POST['nome']}', '{$_POST['descrizione']}')";
$result= mysql_query($query);

if(!$result) {
die ('Inserimento non riuscito'.mysql_error());
}
mysql_close();
echo 'Inserimento avvenuto con successo';
?>
<br>
<a href="form.html"> Torna al form di inserimento </a>
<br>
<a href="leggi.php"> Visualizza tutti i valori esistenti nel database </a>

</head>
</body>
</html>

bobbytre
17-02-2011, 14:23
prova con qualcosa del genere ...

<?php
//--
require 'connect.php';
require 'config.php';

function controllodati()
{
if ( empty($_POST['nome']) )
return TRUE;
else
return FALSE;
}

function mia_funzione_di_pulizia_e_controllo($a)
{
// ad esempio ...

$s = mysql_real_escape_string($a);
// eventuali altri controlli ...
return $s;
}



if( controllodati() )
{
// controllo fallito !
// gestisco questa situazione , esco o redirect a una pagina di errore ...
header("Location: error.php");

}

$nome = mia_funzione_di_pulizia_e_controllo($_POST['nome']);
$desc = mia_funzione_di_pulizia_e_controllo($_POST['descrizione']);

$query= "insert into glossario (nome, descrizione) values ('".$nome."', '".$desc."')";


$result= mysql_query($query);

// ecc... ecc...

?>
<html>
bla...
bla...
</html>

dbp86
17-02-2011, 14:43
grazie infinite adesso studierò il tuo metodo però prima vorrei chiederti una cosa ( devo capire bene i miei errori ) approfittando della tua gentilezza.

perchè così mi ritorna sempre la scritta impossibile???
il simbolo || non significa or?

<?
require 'connect.php';
require 'config.php';

function controllodati()
{
if ( empty($_POST['nome']) || "SELECT * FROM glossario WHERE nome='{$_POST['nome']}'") {
die ('impossibile');
}
}


controllodati();

$query= "insert into glossario (nome, descrizione) values ('{$_POST['nome']}', '{$_POST['descrizione']}')";
$result= mysql_query($query);

if(!$result) {
die ('Inserimento non riuscito'.mysql_error());
}
mysql_close();
echo 'Inserimento avvenuto con successo';
?>

bobbytre
17-02-2011, 19:39
la condizione del tuo if si verifica se anche una delle due tue condizione risulta vera.
if ( empty($_POST['nome']) ) , puo risultare sia vera che falsa in base all'argomento passato a empty , quindi è corretto usarlo .

if ( "SELECT * FROM glossario WHERE nome='{$_POST['nome']}'")

risulta sempre verificata perche in PHP una stringa che contiene testo è vera a meno che la stringa non contenga uno 0

quindi ora capisci da solo che la condizione del tuo IF è sempre verificata quindi ti ritorna la scritta impossibile.