Problema inregistrare date din formular in baza de date

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

Problema inregistrare date din formular in baza de date

Am urmatorul script php pt crearea unui cont care foloseste o clasa si o functie pentru inserarea numelui de utilizator si a parolei.
Problema este urmatoarea: imi adauga inregistrari in baza de date chiar daca nu am completat nimic in formular.Am folosit array-ul $warnings sa retina mesaje in cazul in care nu sunt completate campurile formularului,dar tot imi executa inserarea.

Cod: Selectaţi tot

<?php
if (isset($_POST['submit'])){
    $warnings=array();
   if (isset($_POST['user']))
        { $vtosend=array(1=>$_POST['user']);
          $ftosend=array(1=>"user");
           }
else{
    $warnings[]= "Nu ati introdus un nume de utilizator !";
        }
if (isset($_POST['pass'])){
    $vtosend[]=$_POST['pass'];
    $ftosend[]="parola";
                            }
    else {
      $warnings[]="Nu ati introdus parola !";
        }
    $ftosend[]="sex";
    $vtosend[]=$_POST['sex'];
    if (count($warnings)>0)
    {
    echo "Va rog remediati urmatoarele:<br>";
    foreach ($warnings as $w){
        echo "-".$w."<br>";
                            }
    }
else
   {
    include_once 'PDOwork.class.php';
  $pdoobj=new PDOwork("siteph");
  $rez=$pdoobj->insertSql("utilizatori",$ftosend,$vtosend);
  if ($rez){
      echo "Felicitari ! Contul a fost creat !";
            }
  else
    {
      echo "Crearea contului a esuat !Incercati din nou !";
    }
    
      }
}
?>
Clasa si functia desi nu am probleme cu ele:

Cod: Selectaţi tot

class PDOwork {
    private $conn;
    public $connstr;
    public $stmi;
    public function __construct($dbname)
    {
        $this->connstr="mysql:host=localhost;dbname=$dbname";
        $this->conn=new PDO($this->connstr,'root','');
                  }
    
     public function insertSql($tabel,$fields,$values){
      $nr=count($values);
      $str="INSERT INTO ".$tabel."(";
      $str.=implode(",",$fields);
      $str.=") VALUES(";
      if ($nr>1){
          $str.=str_repeat("?,",--$nr );
      }
      $str.="?)";
      $this->stmi=$this->conn->prepare($str);
      foreach($values as $key=>$v){
            $this->stmi->bindValue($key,$v);
      }
         
         return $this->stmi->execute();
      }
} 
Multumesc anticipat pentru orice sugestii !

MarPlo Mesaje:4343
Salut
Trebuie verificat si daca sunt date in campurile din formular, cu: empty() sau strlen().
Exemplu:

Cod: Selectaţi tot

if (isset($_POST['user']) && strlen($_POST['user']) > 0) { 
  $vtosend=array(1=>$_POST['user']);
  $ftosend=array(1=>"user");
}
else{
  $warnings[]= "Nu ati introdus un nume de utilizator !";
}

Subiecte similare