Newsgroup: it.comp.www.php
Titolo: Trasformazione parametro da stringa vuota a NULL

Ciao a tutti
per comodità di database vorrei fare in modo che, ogni volta che un
campo viene lasciato vuoto in una form in php di inserimento dati, il
valore prima di essere scritto nel database venga riconosciuto come
stringa vuota, e trasformato automaticamente in valore NULL. Sarebbe
molto più comodo poi fare interrogazione per rilevare chi ha lasciato
il campo in bianco, restituendo NULL
sto provando in vari modi ma non riesco...
ad esempio ho provato così:
    	$nulla = NULL;
    	if ($_REQUEST['fax'] == "")
    		{$_REQUEST['fax'] = $nulla;
    		}
    	$query= "INSERT INTO $tabella VALUES ('". $_REQUEST['email']
."','" . $_REQUEST['nome']."','" . $_REQUEST['cognome']."','" .
$_REQUEST['indirizzo']."','" . $_REQUEST['telefono']."','" .
$_REQUEST['fax']."','" . $_REQUEST['cellulare']."','" .
$_REQUEST['citta'] . "')";
il problema è sopratutto sui campi che sono di tipo INT, in quanto non
è ovviamente ammesso il valore di stringa vuota "", perchè non
rientra nel range del tipo, e genera un errore di tipo "Out of range
value adjusted for column 'fax' at row 1"
se vi viene in mente qualcosa, oppure magari sapete consigliarmi
qualche sito dove reperire dei codici prefatti per risolvere questi
problemi comuni ve ne sarei grato!
grazie

 stringa vuota, e trasformato automaticamente in valore NULL.
Prova così:
<?
    if ($stringa==='') $stringa = null;
?>
Ciao,
Riccardo
-- 
* Immolo - Ricerca annunci immobiliari
* web: 
http://www.immolo.it

 il campo in bianco, restituendo NULL
NULL e' un tipo SQL "particolare". Mon tutti i campi possono essere
impostati a NULL ed i campi string NON vengono a NULL usando una
stringa vuota.
Fai riferimento alla documentazione del database che stai utilizzando
per capire quali campi possono essere impostati a NULL e come farlo.
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.

"Setec Astronomy" <setec@_NO_NOSPAM_freemail.it> ha scritto nel messaggio
news:nFSVf.52181$A83.1...@twister1.libero.it...

$sql = " INSERT INTO tabella SET "
if(!empty($_POST['mia']){
     $sql .= "mio_campo ='".$_POST['mia']."',";
}else {
    $sql .= "mio_campo =NULL,";
    se hai messo default value = NULL nella struttura ometti else
}
echo $sql ;
rientra nel range del tipo, e genera un errore di tipo "Out of range
value adjusted for column 'fax' at row 1"
fax deve essere nella struttra NULL altrimenti mysql 5 si incazza
lo ha fatto qualche verione di phpmyadmin non compatibile con la mysql 5
campo ="" --> campo
fai prima ad omettere se il campo di default e' NULL (vuoto == null)
if(!empty($_POST['mia']){
     $sql .= "mio_campo ='".$_POST['mia']."'";
}
se riempi i campi fa il set del valore altrimenti salta.
cmq devi avere una struttura SOLIDA dietro
e se non devi mantenere la compatibilita con il 4
hai tutto
not null e il campo e' vuoto da errore, ed aggiorna phpmyadmin


 mysql 5 campo ="" --> campo
CREATE TABLE tabella (
  fax varchar(255) default NULL
);
INSERT INTO tabella SET fax = NULL:


purtroppo con la coincidenza non va, continua a ripresentarmi lo stesso
errore di prima...

ho provato ad inserire addirittura il NULL direttamente all'interno
della query, passato come normale parametro tra i due apici singoli, in
questa maniera:
		$query= "INSERT INTO $tabella VALUES ('". $_REQUEST['email'] ."','" .
$_REQUEST['nome']."','" . $_REQUEST['cognome']."','" .
$_REQUEST['indirizzo']."','" . $_REQUEST['telefono']."','" .
'null'."','" . $_REQUEST['cellulare']."','" . $_REQUEST['citta'] .
"')";
la query è correttamente funzionante se viene inserito un normale
valore, invece forzandolo all'inserimento del valore NULL mi viene
stampato a schermo lo stesso errore:
Out of range value adjusted for column 'fax' at row 1
il problema è proprio che su un campo il cui tipo è INT non accetta
questo maledetto null...
vi provo a postare l'intero codice, se potete provare a modificarlo voi
perchè io ci sto provando da 2 giorni senza successo...
<html>
<?php
$a=$_REQUEST;
PRINT("<b>PARAMETRI</b><br><br>");
foreach($a as $k=>$v){
print"<b>$k</b>: $v<br>";
}
$host='localhost';
$user='appartamenti';
$password='admin';
$database="affitto";
$tabella="cliente";
	$db=mysqli_connect($host, $user, $password) or die("impossibile
connettersi al server $host");
	mysqli_select_db($db, $database) or die("impossibile connettersi al
database $database");
		$query= "INSERT INTO $tabella VALUES ('". $_REQUEST['email'] ."','" .
$_REQUEST['nome']."','" . $_REQUEST['cognome']."','" .
$_REQUEST['indirizzo']."','" . $_REQUEST['telefono']."','" .
$_REQUEST['fax']."','" . $_REQUEST['cellulare']."','" .
$_REQUEST['citta'] . "')";
$q=mysqli_query($db, $query) or DIE (mysqli_error($db));
	print $query;
	$q = (int)$q;
	print ("\" $q \"<br>");
	if (!$q)
{
print("non riesco ad inserire i dati");
}
else{print ("dati inseriti correttamente");}
mysqli_close($db);
?>
</html>

sono riuscito a risolvere con una concatenazione e un controllo sulle
stringhe vuote:
    code:
    $db=mysqli_connect($host, $user, $password) or die("impossibile
connettersi al server $host");
    	mysqli_select_db($db, $database) or die("impossibile connettersi
al database $database");
    	$query = "INSERT INTO $tabella VALUES ('". $_REQUEST['email']
."',";
    	if ($_REQUEST['nome'] == "")
    		$query .= "null,";
    	else $query .= "'". $_REQUEST['nome'] ."',";
    	if ($_REQUEST['cognome'] == "")
    		$query .= "null,";
    	else $query .= "'". $_REQUEST['cognome'] ."',";
    	if ($_REQUEST['indirizzo'] == "")
    		$query .= "null,";
    	else $query .= "'". $_REQUEST['indirizzo'] ."',";
    	if ($_REQUEST['telefono'] == "")
    		$query .= "null,";
    	else $query .= "'". $_REQUEST['telefono'] ."',";
    	if ($_REQUEST['fax'] == "")
    		$query .= "null,";
    	else $query .= "'". $_REQUEST['fax'] ."',";
    	if ($_REQUEST['cellulare'] == "")
    		$query .= "null,";
    	else $query .= "'". $_REQUEST['cellulare'] ."',";
    	if ($_REQUEST['citta'] == "")
    		$query .= "null,";
    	else $query .= "'". $_REQUEST['citta'] ."'";
    	$query .= ")";
    	$q=mysqli_query($db, $query) or DIE (mysqli_error($db));
spero che possa essere d'aiuto per altri...

 [cut]
La soluzione che hai indicato era esattamente quella che intendevo.
Pensavo fosse ovvio che anche in una query SQL come in un qualsiasi
linguaggio di programmazione per inserire un campo stringa contenente
il valore NULL non bisogna assolutamente inserire gli apici prima e dopo di 
NULL.
