Controlli variabili php

  • Creatore Discussione Creatore Discussione ste902
  • Data di inizio Data di inizio

ste902

Utente Attivo
15 Nov 2012
32
0
0
Ciao a tutti. Ho database mysql formato da 3 tabelle. Vi allego lo script di creazione:
Codice:
SET storage_engine=InnoDB;
SET FOREIGN_KEY_CHECKS=1;
CREATE DATABASE IF NOT EXISTS Docenti;
USE Docenti;
DROP TABLE IF EXISTS Professori;
DROP TABLE IF EXISTS Corsi;
DROP TABLE IF EXISTS Consulenze;

CREATE TABLE IF NOT EXISTS Professori (
CodP VARCHAR(15) UNIQUE NOT NULL,
Nome VARCHAR(255) NOT NULL,
Cognome VARCHAR(255) NOT NULL,
DataNascita DATE NOT NULL,
NumCel VARCHAR(255) NULL,
PRIMARY KEY (CodP));

CREATE TABLE IF NOT EXISTS Corsi (
CodCorso VARCHAR(15) UNIQUE NOT NULL,
Titolo VARCHAR(255) NOT NULL,
NumCrediti SMALLINT NOT NULL,
DataAttivazione DATE NOT NULL,
PRIMARY KEY (CodCorso)
);

CREATE TABLE IF NOT EXISTS Consulenze (
CodP VARCHAR(15) NOT NULL,
CodCorso VARCHAR(15) NOT NULL,
Data DATE NOT NULL,
OraInizio TIME NOT NULL,
OraFine TIME NULL,
PRIMARY KEY (CodP, CodCorso, Data, OraInizio),
FOREIGN KEY (CodP)
REFERENCES Professori (CodP)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (CodCorso)
REFERENCES Corsi (CodCorso)
ON DELETE CASCADE
ON UPDATE CASCADE);

La colonna CodCorso deve essere è la chiave primaria. Non so perchè ricevendo dei dati da un form e facendo un insert con tali dati mi inserisce il record anche senza CodCorso e il controllo variabili non funziona. Ecco il php:
PHP:
<html>

<head>
<title>CorsoInserito</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="HAPedit 3.1">
</head>
<body>
<?php
/* ASSEGNAZIONE VARIABILI */

$CodC = $_GET["CodCorso"];
$Tit = $_GET["Titolo"];
$Cred = $_GET["Crediti"];
$DataA = $_GET["DataAtt"];
$Data = $_GET["Data"];
$OraI = $_GET["OraI"];
$OraF = $_GET["OraF"];
$CodP = $_GET["CodP"];

if( !isset($CodC) or !isset($Tit) or !isset($Cred) or !isset($Tit) or !isset($DataA) or !isset($Data) or !isset($OraI) or !isset($CodP)){
  die("Errore: inserire tutti i dati richiesti");}



/* CONNESSIONE AL DB*/

if( !mysql_connect("localhost","root","") ){
  die('Connect error: ' . mysql_error());}

if( !mysql_select_db("docenti") ){
  die('Select error: ' . mysql_error());}

$sql="INSERT INTO CORSI (CodCorso, Titolo, NumCrediti, DataAttivazione)
VALUES
('$CodC','$Tit','$Cred','$DataA')";

if (!mysql_query($sql))
  {
  die('Error: ' . mysql_error());
  }

$sql1="INSERT INTO CONSULENZE (CodP, CodCorso, Data, OraInizio, OraFine)
VALUES
('$CodP','$CodC','$Data','$OraI','$OraF')";

if (!mysql_query($sql1))
  {
  die('Error: ' . mysql_error());
  }
echo "Il corso $CodC è stato inserito nel database e la consulenza per tale corso è fissata per il giorno $Data.";


// chiudo la connessione a MySQL
mysql_close();



?>
</body>

</html>

Sapete spiegarmi il perchè? Grazie!
 
Sostituisci isset con empty, poi utilizza mysql_real_escape_string per rendere sicure le variabili e inoltre aggiungi eventuali altri controlli di validazione
 
Fatto, niente, mi da l'errore dati mancanti sia se inserisco il CodCorso sia se non lo faccio....
 
Mi da il seguente errore :
Codice:
Notice: Use of undefined constant CodCorso - assumed 'CodCorso' in C:\xampp\htdocs\prova\CorsoInserito.php on line 15
 
Mi da il seguente errore :
Codice:
Notice: Use of undefined constant CodCorso - assumed 'CodCorso' in C:\xampp\htdocs\prova\CorsoInserito.php on line 15
Magari posta la parte di codice no? Comunque ti basta fare un var_dump di $_GET e vedere se ci sono tutte le variabili
 
Si scusa ora lo posto!
PHP:
<html>

<head>
<title>CorsoInserito</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="HAPedit 3.1">
</head>
<body>
<?php
/* ASSEGNAZIONE VARIABILI */


if( !empty($_GET[CodCorso]) or !empty($_GET[Titolo]) or !empty($_GET[Crediti]) or !empty($_GET[DataAtt]) or !empty($_GET[Data]) or !empty($_GET[OraI]) or !empty($_GET[CodP])){
  die("Errore: inserire tutti i dati richiesti");}



/* CONNESSIONE AL DB*/

if( !mysql_connect("localhost","root","") ){
  die('Connect error: ' . mysql_error());}

if( !mysql_select_db("docenti") ){
  die('Select error: ' . mysql_error());}

$sql="INSERT INTO CORSI (CodCorso, Titolo, NumCrediti, DataAttivazione)
VALUES
('$_GET[CodCorso]','$_GET[Titolo]','$_GET[Crediti]','$_GET[DataAtt]')";

if (!mysql_query($sql))
  {
  die('Error: ' . mysql_error());
  }

$sql1="INSERT INTO CONSULENZE (CodP, CodCorso, Data, OraInizio, OraFine)
VALUES
('$_GET[CodP]','$_GET[CodCorso]','$_GET[Data]','$_GET[OraI]','$_GET[OraF]')";

if (!mysql_query($sql1))
  {
  die('Error: ' . mysql_error());
  }
echo "Il corso $_GET[CodCorso] è stato inserito nel database e la consulenza per tale corso è fissata per il giorno $_GET[Data].";


// chiudo la connessione a MySQL
mysql_close();



?>
</body>

</html>
 
Prova mettendo il valore della chiave fra apici

es.
PHP:
echo $_GET['CodCorso'];

Poi fai un var_dump e vedi i risultati
PHP:
var_dump($_GET);
 
mi da questo errore:
HTML:
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\prova\CorsoInserito.php on line 29

PHP:
<html>

<head>
<title>CorsoInserito</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="HAPedit 3.1">
</head>
<body>
<?php
/* ASSEGNAZIONE VARIABILI */

if( !empty($_GET['CodCorso']) or !empty($_GET[Titolo]) or !empty($_GET[Crediti]) or !empty($_GET[DataAtt]) or !empty($_GET[Data]) or !empty($_GET[OraI]) or !empty($_GET[CodP])){
  die("Errore: inserire tutti i dati richiesti");}

var_dump($_GET);

/* CONNESSIONE AL DB*/

if( !mysql_connect("localhost","root","") ){
  die('Connect error: ' . mysql_error());}

if( !mysql_select_db("docenti") ){
  die('Select error: ' . mysql_error());}

$sql="INSERT INTO CORSI (CodCorso, Titolo, NumCrediti, DataAttivazione)
VALUES
('$_GET['CodCorso']','$_GET[Titolo]','$_GET[Crediti]','$_GET[DataAtt]')";

if (!mysql_query($sql))
  {
  die('Error: ' . mysql_error());
  }

$sql1="INSERT INTO CONSULENZE (CodP, CodCorso, Data, OraInizio, OraFine)
VALUES
('$_GET[CodP]','$_GET['CodCorso']','$_GET[Data]','$_GET[OraI]','$_GET[OraF]')";

if (!mysql_query($sql1))
  {
  die('Error: ' . mysql_error());
  }
echo "Il corso $_GET['CodCorso'] è stato inserito nel database e la consulenza per tale corso è fissata per il giorno $_GET[Data].";


// chiudo la connessione a MySQL
mysql_close();



?>
</body>

</html>
 
Dove le virgolette sono già applicate puoi anche non metterle e se le metti utilizza il punto per concatenare la variabile, poi le devi applicare anche agli altri elementi di $_GET, inoltre ricordati di utilizzare mysql_real_escape_string nelle variabili pubbliche che potrebbero andare ad intaccare la query, dopo vedo di riordinarti un po il codice semmai
 
Ho risolto grazie! Era sbagliato l'if di controllo (non andava ! prima di empty) e le ' solo nell'if. Perfetto grazie mille!!!!
 
Fatto:
PHP:
<!DOCTYPE html>
<html>
	<head>
		<title>Corso inserito</title>
		<meta charset="utf-8" />
	</head>

	<body>
		<?php
		$parameters = array('CodCorso', 'Titolo', 'Crediti', 'DataAtt', 'Data', 'OraI', 'OraF', 'CodP');
		$data = array();

		foreach ($parameters as $parameter) {
			if (!isset($_GET[$parameter])) { {
				die('Errore: inserire tutti i dati richiesti.');
			}

			$value = mysql_real_escape_string(trim($_GET[$parameter]));

			if (empty($value)) {
				die('Errore: inserire tutti i dati richiesti.');
			}

			$data[$parameter] = $value;
		}

		mysql_connect('localhost', 'root') or die(mysql_error());
		mysql_select_db('docenti') or die(mysql_error());

		$sql = "INSERT INTO corsi (CodCorso, Titolo, NumCrediti, DataAttivazione) VALUES ('%s', '%s', '%s', '%s')";
		mysql_query(sprintf(
			$sql,
			$data['CodCorso'],
			$data['Titolo'],
			$data['Crediti'],
			$data['DataAt']
		)) or die(mysql_error());

		$sql2 = "INSERT INTO consulenze (CodP, CodCorso, Data, OraInizio, OraFine) VALUES ('%s', '%s', '%s', '%s', '%s')";
		mysql_query(sprintf(
			$sql2,
			$data['CodP'],
			$data['CodCorso'],
			$data['Data'],
			$data['OraI'],
			$data['OraF']
		)) or die(mysql_error());

		echo "Il corso {$data['CodCorso']} è stato inserito nel database ";
		echo "e la consulenza per tale corso è fissata il giorno {$data['Data']}.";
		?>
	</body>
</html>
Qualche appunto:
  • usa GET invece di POST per la creazione di entità;
  • non usare l'estensione mysql che è deprecata di fatto;
  • usa nomi minuscoli nei parametri dell'URL e nei nomi delle tabelle e dei campi;
  • non è necessario eseguire mysql_close();
 

Discussioni simili