Prooblema adaugare date din formular in baza de date

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
adina71
Mesaje:1

Prooblema adaugare date din formular in baza de date

Am creat un formular creare asigurari RCA. Nu stiu unde este gresit in codul de mai jos, deoarece nu-mi trimite datele in baza de date creata in MySQL:
CODUL PHP:

Cod: Selectaţi tot

<?
// Se defineste un Header pt. a utiliza setul de caractere cu format UTF-8
header('Content-type: text/html; charset=utf-8');

$mesaj = '';          // Variabila folosita pt. mesajul ce va fi afisat pt. utilizator

// Se verifica daca sunt primite datele de la formular
if (isset($_POST['leasing']) && isset($_POST['email']) && isset($_POST['nume'])&& isset($_POST['prenume']) && isset($_POST['proprietar']) && isset($_POST['cnp']) && isset($_POST['data_permis']) && isset($_POST['situatie']) && isset($_POST['copii']) && isset($_POST['alte_situatii']) && isset($_POST['judet']) && isset($_POST['localitate']) && isset($_POST['str']) && isset($_POST['nr']) && isset($_POST['bloc']) && isset($_POST['sc']) && isset($_POST['et']) && isset($_POST['ap']) && isset($_POST['auto']) && isset($_POST['marca']) && isset($_POST['model']) && isset($_POST['cilindree']) && isset($_POST['putere']) && isset($_POST['serie_sasiu']) && isset($_POST['serie_civ']) && isset($_POST['masa']) && isset($_POST['combustibil']) && isset($_POST['inmatriculare']) && isset($_POST['nr_inmatriculare']) && isset($_POST['utilizare']) && isset($_POST['data__vigoare']))
{ 
  // Se filtreaza datele pt. eliminare posibile spatii exterioare si tag-uri
  $_POST = array_map("trim", $_POST);
  $_POST = array_map("strip_tags", $_POST);

  // Se verifica daca "magic_quotes_gpc()" este setat ON
  // Daca e ON, se aplica stripslashes() pentru a nu se adauga de 2 ori '\' cand va fi aplicat "mysql_real_escape_string()"
 if(get_magic_quotes_gpc()) { $_POST = array_map("stripslashes", $_POST); }

  // Se verifica daca au fost completate corect toate campurile
  // Daca au fost completate le preia in variabile, in caz contrar seteaza o variabila tip Array cu mesaj de eroare

  
  if(strlen($_POST['nume'])>2 && strlen($_POST['nume'])<51) $nume = $_POST['nume'];
  else $eroare[] = 'Caseta cu Nume trebuie sa contina intre 3 si 50 caractere';
  
  if(strlen($_POST['prenume'])>2 && strlen($_POST['prenume'])<61) $prenume = $_POST['prenume'];
  else $eroare[] = 'Caseta cu Prenume trebuie sa contina intre 3 si 60 caractere';
  
  if(isset($_POST['leasing']) && strlen($_POST['leasing'])>2) $leasing = $_POST['leasing'];
  else $eroare[] = 'Selectati butonul corespunzator';
  
  if(isset($_POST['proprietar']) && strlen($_POST['proprietar'])>2) $proprietar = $_POST['proprietar'];
  else $eroare[] = 'Selectati butonul corespunzator pentru "Proprietar"';
  
  if(preg_match('/^([a-zA-Z0-9]+[a-zA-Z0-9._%-]*@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4})$/', $_POST['email'])) $email = $_POST['email'];
  else $eroare[] = 'Completati corect adresa de e-mail';

  if(strlen($_POST['cnp'])>2 && strlen($_POST['cnp'])<14) $cnp = $_POST['cnp'];
  else $eroare[] = 'Caseta cu Prenume trebuie sa contina intre 3 si 60 caractere';
  
  if(isset($_POST['data_permis']) && strlen($_POST['data_permis'])>2) $POST = $_POST['data_permis'];
  else $eroare[] = 'Selectati butonul corespunzator';

  if(strlen($_POST['situatie'])>2) $situatie = $_POST['situatie'];
  else $eroare[] = 'Selectati "Situatie familie"';
  
  if(strlen($_POST['copii'])>2) $copii = $_POST['copii'];
  else $eroare[] = 'Selectati o optiune';
  
  if(strlen($_POST['alte_situatii'])>2) $alte_situatii = $_POST['alte_situatii'];
  else $eroare[] = 'Selectati o optiune';
  
  if(strlen($_POST['judet'])>2) $judet = $_POST['judet'];
  else $eroare[] = 'Selectati o optiune';
  
 if(strlen($_POST['cnp'])>2 && strlen($_POST['cnp'])<31) $cnp = $_POST['cnp'];
  else $eroare[] = 'Caseta cu Prenume trebuie sa contina intre 3 si 30 caractere';
  
  $strada = $_POST['strada'];
  $nr = $_POST['nr'];
  $bloc = $_POST['bloc'];
  $sc = $_POST['sc'];
  $et = $_POST['et'];
  $ap = $_POST['ap'];
  
 if(strlen($_POST['auto'])>2) $auto = $_POST['auto'];
 else $eroare[] = 'Selectati o optiune';
  
  if(strlen($_POST['marca'])>2) $marca = $_POST['marca'];
 else $eroare[] = 'Selectati o optiune';
  
  if(strlen($_POST['model'])>2) $model = $_POST['model'];
 else $eroare[] = 'Selectati o optiune';
 
 if(strlen($_POST['cilindree'])>0 && strlen($_POST['cilindree'])<11) $cilindree = $_POST['cilindree'];
  else $eroare[] = 'Caseta trebuie sa contina intre 1 si 10 caractere';
 
  if(strlen($_POST['putere'])>0 && strlen($_POST['putere'])<11) $putere = $_POST['putere'];
  else $eroare[] = 'Caseta trebuie sa contina intre 1 si 10 caractere';
 
  if(strlen($_POST['serie_sasiu'])>0 && strlen($_POST['serie_sasiu'])<21) $serie_sasiu = $_POST['serie_sasiu'];
  else $eroare[] = 'Caseta trebuie sa contina intre 1 si 10 caractere';
  
  if(strlen($_POST['seria_civ'])>0 && strlen($_POST['seria_civ'])<21) $seria_civ = $_POST['seria_civ'];
  else $eroare[] = 'Caseta trebuie sa contina intre 1 si 10 caractere';
  
  if(strlen($_POST['masa'])>0 && strlen($_POST['masa'])<11) $masa = $_POST['masa'];
  else $eroare[] = 'Caseta trebuie sa contina intre 1 si 10 caractere';
  
   if(strlen($_POST['combustibil'])>2) $model = $_POST['combustibil'];
 else $eroare[] = 'Selectati o optiune';
 
 if(strlen($_POST['inmatriculare'])>2) $inmatriculare = $_POST['inmatriculare'];
 else $eroare[] = 'Selectati o optiune';
 
 if(strlen($_POST['nr_inmatriculare'])>0 && strlen($_POST['nr_inmatriculare'])<21) $masa = $_POST['nr_inmatriculare'];
  else $eroare[] = 'Caseta trebuie sa contina intre 1 si 10 caractere';
  
  if(strlen($_POST['utilizare'])>2) $utilizare = $_POST['utilizare'];
 else $eroare[] = 'Selectati o optiune';
 
 if(strlen($_POST['data_vigoare'])>2) $data_vigoare = $_POST['data_vigoare'];
 else $eroare[] = 'Selectati o optiune';
  
  // Daca nu exista nici un mesaj de eroare, filreaza datele cu mysql_real_escape_string() si le adauga in baza de date
  // Altfel, in cazul vreunei erori, adauga in variabila $mesaj
  if (!isset($eroare)) {
    $host = 'localhost';         
    $utilizator = 'root';         
    $parola = '';      
    $numebd = 'asigurare';       

    $conn = mysql_connect($host, $utilizator, $parola);
    if (!$conn) { echo '<h4>Conectare nereusita la MySQL</h4>'; }

 
    if (!mysql_select_db($numebd, $conn)) { echo '<h4>Baza de date nu a putut fi selectata deoarece : '. mysql_errno(). ' : '. mysql_error().'</h4>'; }

 mysql_set_charset('utf8', $conn);         // Setarea pt. lucru cu format UTF-8         // Include fisierul pt. conectare-selectare baza de dat

    // Se aplica functia de filtrare mysql_real_escape_string()
    $nume = mysql_real_escape_string($nume);
    $email = mysql_real_escape_string($email);
    $prenume = mysql_real_escape_string($prenume);
    $leasing = mysql_real_escape_string($leasing);
    $proprietar=mysql_real_escape_string($proprietar);
$cnp=mysql_real_escape_string($cnp);
$data_permis=mysql_real_escape_string($data_permis);
$situatie=mysql_real_escape_string($situatie);
$copii=mysql_real_escape_string($copii);
$alte_situatii=mysql_real_escape_string($alte_situatii);
$judet=mysql_real_escape_string($judet);
$localitate=mysql_real_escape_string($localitate);
$strada=mysql_real_escape_string($strada);
$nr=mysql_real_escape_string($nr);
$bloc=mysql_real_escape_string($bloc);
$sc=mysql_real_escape_string($sc);
$et=mysql_real_escape_string($et);
$ap=mysql_real_escape_string($ap);
$auto=mysql_real_escape_string($auto);
$marca=mysql_real_escape_string($marca);
$model=mysql_real_escape_string($model);
$cilindree=mysql_real_escape_string($cilindree);
$putere=mysql_real_escape_string($putere);
$serie_sasiu=mysql_real_escape_string($serie_sasiu);
$seria_civ=mysql_real_escape_string($seria_civ);
$masa=mysql_real_escape_string($masa);
$combustibil=mysql_real_escape_string($combustibil);
$inmatriculare=mysql_real_escape_string($inmatriculare);
$nr_inmatriculare=mysql_real_escape_string($nr_inmatriculare);
$utilizare=mysql_real_escape_string($utilizare);
$data_vigoare=mysql_real_escape_string($data_vigoare);

    // Acum se adauga mai in siguranta aceste date in MySQL
    $sql = "INSERT INTO 'rca' ('proprietar', 'cnp',    'data_permis',    'situatie',    'copii', alte_situatii', 'judet', 'localitate', 'strada', 'nr',    'bloc',    'sc', 'et',    'ap', 'auto', 'marca','model', 'cilindree',    'putere', 'serie_sasiu', 'seria_civ', 'masa', 'combustibil', 'inmatriculare', 'nr_inmatriculare', 'utilizare', 'data_vigoare')  VALUES ('$proprietar', '$cnp', '$data_permis',    '$situatie', '$copii', '$alte_situatii', '$judet',    '$localitate',    '$strada',    '$nr',    '$bloc',    '$sc',    '$et',    '$ap',    '$auto', '$marca',    '$model',    '$cilindree',    '$putere',    '$serie_sasiu',    '$seria_civ',    '$masa',    '$combustibil',    '$inmatriculare',    '$nr_inmatriculare',    '$utilizare',    '$data_vigoare')";
    if (mysql_query($sql, $conn)) {
      $mesaj = '<font color="blue">Datele au fost adaugate</font>';
      $nume = '';  $email = '';
    }
    else $mesaj = '<font color="red">Datele nu au putut fi adaugate '. mysql_error(). '</font>';

    mysql_close($conn);
  }
  else $mesaj = '<font color="red">'. implode('<br />', $eroare). '</font>';
}

echo $mesaj;
?>

MarPlo Mesaje:4343
Salut
Nu stiu cine sta sa-ti verifice atata cod. Incearca sa ti-l depanezi.
Cu var_export($_POST); poti vedea ce date primeste scriptul PHP prin POST (de la formular), iar cu: echo $sql; vezi ce comanda e trimisa la baza de date, pe care eventual o poti testa in PHPMyAdmin.

tycyssg Mesaje:58
Am impresia , nu e ceva sigur dar incearca sa separi acea variabila prin care tu preiei variabila $_POST de restul codului.

Cod: Selectaţi tot

 if(strlen($_POST['nume'])>2 && strlen($_POST['nume'])<51) $nume = $_POST['nume'];
  else $eroare[] = 'Caseta cu Nume trebuie sa contina intre 3 si 50 caractere';
Incearca intai sa verifici.
Gresit

Cod: Selectaţi tot

 if(strlen($_POST['nume'])>2 && strlen($_POST['nume'])<51) ;
  else $eroare[] = 'Caseta cu Nume trebuie sa contina intre 3 si 50 caractere';
si apoi sa declari :

Cod: Selectaţi tot

$nume = $_POST['nume']
Ca nu cred ca e prea corect ca intr-un if sa pui o conditie si sa declari o variabila cu valoarea altei variabile.

Apoi

Cod: Selectaţi tot

INSERT INTO 'rca' ('proprietar', 'cnp',    'data_permis',    'situatie',    'copii', alte_situatii', 'judet', 'localitate', 'strada', 'nr',    'bloc',    'sc', 'et',    'ap', 'auto', 'marca','model', 'cilindree',    'putere', 'serie_sasiu', 'seria_civ', 'masa', 'combustibil', 'inmatriculare', 'nr_inmatriculare', 'utilizare', 'data_vigoare') 
Numele de coloane de la baza de date nu se pun in ghilimele , se separa doar prin virgula.

Apoi.

Cod: Selectaţi tot

VALUES ('$proprietar', '$cnp', '$data_permis',    '$situatie', '$copii', '$alte_situatii', '$judet',    '$localitate',    '$strada',    '$nr',    '$bloc',    '$sc',    '$et',    '$ap',    '$auto', '$marca',    '$model',    '$cilindree',    '$putere',    '$serie_sasiu',    '$seria_civ',    '$masa',    '$combustibil',    '$inmatriculare',    '$nr_inmatriculare',    '$utilizare',    '$data_vigoare')";
    if (mysql_query($sql, $conn)) {
      $mesaj = '<font color="blue">Datele au fost adaugate</font>';
Cand se adauga mai multe variabile ele trebuie sa aibe o continuitate si se foloseste . inaintea si la sfarsitul variabilei

Ex.

Cod: Selectaţi tot

VALUES ('.$proprietar.', '.$cnp.', '.$data_permis.');  
ETC
Cam atat am putut vedea.Dar eu zic sa revizuiesti tutorialele de pe site si atunci vei intelege mai bine si nu vei avea nevoie de un script atat de complicat.

Ca sa verifici e mult mai indicat un script JavaScript il gasesti tot pe forum (check forms with javascript) .E mai rapid , nu asa plictisitor si mai sigur.
Si apoi codul php "subtiat" considerabil daca te uiti.
https://marplo.net/php-mysql/php-mys ... -into.html" target="_blank" target="_blank

Spor la lucru sper ca am fost de folos.

MarPlo Mesaje:4343
E corect asa:

Cod: Selectaţi tot

if(strlen($_POST['nume'])>2 && strlen($_POST['nume'])<51) $nume = $_POST['nume'];
  else $eroare[] = 'Caseta cu Nume trebuie sa contina intre 3 si 50 caractere';
E gresita indicatia asta:

Cod: Selectaţi tot

if(strlen($_POST['nume'])>2 && strlen($_POST['nume'])<51) ;
else $eroare[] = 'Caseta cu Nume trebuie sa contina intre 3 si 50 caractere';
- Findca dupa conditia if() trebuie adaugat ceva instructiuni, care se executa daca tot acel if() e adevarat, nu direct ';' .

E corect asa:

Cod: Selectaţi tot

"... VALUES ('$proprietar', '$cnp', '$data_permis') ...";
- Deoarece sirul fiind tot intre ghilimele duble, variabilele sunt recunoscute si adaugate valorile lor intre ghilimele simple, asa cum si trebuie trimise la MySQL valorile de tip sir.

- Ceea ce am observat gresit in cod, este numele tabelului si al coloanelor adaugate intre ghilimele.
- Numele tabelului si al coloanelor se adauga intre acest caracter `...` (apostrof, butonul de langa tasta 1), sau lasi simplu, fara adaugat intre ceva.
Asa:

Cod: Selectaţi tot

INSERT INTO `rca`( `proprietar`, `cnp`, ...
Sau asa:

Cod: Selectaţi tot

INSERT INTO rca (proprietar, cnp, ...

Subiecte similare