Executare instructiuni PHP la confirmare parola

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

Executare instructiuni PHP la confirmare parola

As dori ca pentru a adauga in "scrie.php" un anumit steam_id sa se ceara o parola de confirmare pe care sa o pot schimba eu ori de cate ori este necesar.
Adica sa nu fie o parola fixa sa se poata schimba ori de cate ori este nevoie doar daca eu vreau asta.

MarPlo Mesaje:4343
O metoda simpla ar fi asa:
1. Se creaza o variabila cu parola si se adauga o casuta de formular in pagina in care trebuie adaugata parola.
2. Instructiunile care vrei sa fie executate cu parola se adauga intr-un if() care verifica parola din formular cu cea adaugata in variabila.
Cam asa un mic script din care sa te inspiri:

Cod: Selectaţi tot

<?php
$parola = 'pass';
if(isset($_POST['parola'])) {
  if($_POST['parola'] == $parola) {
    echo 'Parola corecta';
  }
  else echo 'Parola incorecta';
}
?>
<br/><br/>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="password" name="parola" />
<input type="submit" value="Trimite" />
</form>

Liaf Mesaje:36
Alta problema la care nu m-am gandit dar ar fi trebuit sa imi dau seama de la inceput.
Cum pot restrange accesul la adauga.php ca sa poata fi adaugat acolo variabile doar de anumite persoane pentru ca acolo ar trebui sa aiba acces doar anumite persoane.
Se poate pune o parola sau ceva care sa se poata schimba ulterior rapid si usor ?

MarPlo Mesaje:4343
Daca cineva are access la un fisier PHP ca sa scrie cod in el, cred ca il acceseaza prin FTP, sau CPanel. Asa poate sa salveze fisierul PHP pe server.
Poti crea din CPanel un cont de FTP cu access la directorul cu acel fisier, si dai datele de conectare cui vrei; ulterior poti schimba parola la acel cont. Sau dai pe cele cu care te autentifici tu pe server (FTP, CPanel).

Liaf Mesaje:36
Si in acest fisier parola de unde o pot schimba ca sunt prea multe de parola si nu imi dau seama :).
E vorba de postul facut de tine. Postul de mai sus. Unde pun parola propriu-zisa in loc de "parola".

MarPlo Mesaje:4343
Parola propriu-zisa se pune in loc de "pass" la variabila parola.

Cod: Selectaţi tot

$parola = 'pass';
 
Restul sunt instructiuni de verificare.
Dar daca nici macar asta nu stii, se pare ca ce vrei sa faci iti depaseste cunostintele si ar fi de folos sa inveti elementele de baza in PHP: dspre variabile, instructiuni conditionale, repetitive, operatori, functii, lucru cu formulare. Le gasesti in lectiile din Cursul PHP de pe site.

Liaf Mesaje:36
Ma tem ca nu merge:
Dupa ce apas pe trimite nu se intampla nimic.

Cod: Selectaţi tot

<center>
<?php
$mesaj = '';          // Variabila folosita pt. mesajul ce va fi afisat pt. utilizator

// Se verifica daca sunt primite datele de la formular
if (isset($_POST['Steam_ADD']) && isset($_POST['Email']) && isset($_POST['Server'])) {
  // 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

  // Verifica daca Steam_ID are cel putin 17 caractere si maxim 19
  if(strlen($_POST['Steam_ID'])>17 && strlen($_POST['Steam_ID'])<19) $Steam_ID = $_POST['Steam_ID'];
  else $eroare[] = 'Caseta cu Steam_ID trebuie sa contina 18 caractere';

  // Verifica daca Steam_ADD are cel putin 3 caractere si maxim 50
  if(strlen($_POST['Steam_ADD'])>2 && strlen($_POST['Steam_ADD'])<51) $Steam_ADD = $_POST['Steam_ADD'];
  else $eroare[] = 'Caseta cu Steam_ADD trebuie sa contina intre 3 si 50 caractere';

  // Verifica daca adresa de email scrisa corespunde formatului unei adrese de email
  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 Email';

  // Verifica daca a fost selectata o valoare pt. 'Server'
  if(strlen($_POST['Server'])>2) $Server = $_POST['Server'];
  else $eroare[] = 'Selectati "Server"';

  // Verifica daca Fapta are cel putin 3 caractere si maxim 999
  if(strlen($_POST['Fapta'])>2 && strlen($_POST['Fapta'])<1000) $Fapta = $_POST['Fapta'];
  else $eroare[] = 'Caseta cu Fapta trebuie sa contina intre 3 si 999 caractere';

  // 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)) {
    include('conectare.php');         // Include fisierul pt. conectare-selectare baza de dat

    // Se aplica functia de filtrare mysql_real_escape_string()
    $Fapta = mysql_real_escape_string($Fapta);    
    $Steam_ADD = mysql_real_escape_string($Steam_ADD);
    $Email = mysql_real_escape_string($Email);
    $Server = mysql_real_escape_string($Server);
    $Fapta = mysql_real_escape_string($Fapta);

    
    // Acum se adauga mai in siguranta aceste date in MySQL
    $sql = "INSERT INTO `Admini` (`Steam_ID`, `Steam_ADD`, `Email`, `Server`, `Fapta`) VALUES ('$Steam_ID', '$Steam_ADD', '$Email', '$Server', '$Fapta')";
    if (mysql_query($sql, $conn)) {
      $mesaj = '<font color="blue">Datele au fost adaugate</font>';
      $Steam_ADD = '';  $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;
?>

<form action="" method="post">
 Steam ID: <input type="text" name="Steam_ID" id="Steam_ID" value="<?php if(isset($Steam_ID)) echo $Steam_ID; ?>" /><br />
 Steam ADD: <input type="text" name="Steam_ADD" id="Steam_ADD" value="<?php if(isset($Steam_ADD)) echo $Steam_ADD; ?>" /><br />
 Adresa Email: <input type="text" name="Email" id="Email" value="<?php if(isset($Email)) echo $Email; ?>" /><br />
 Server: <select name="Server" id="Server">
  <option value="">Alege</option>
  <option value="Server war oficial">Server war oficial</option>
  <option value="Server war afiliat">Server war afiliat</option>
  <option value="Server public oficial">Server public oficial</option>
  <option value="Server public afiliat">Server public afiliat</option>
 </select><br />
 Fapta: <input type="text" name="Fapta" id="Fapta" value="<?php if(isset($Fapta)) echo $Fapta; ?>" /><br />
 <?php
$parola = 'AICIPAROLA';
if(isset($_POST['parola'])) {
  if($_POST['parola'] == $parola) {
    echo 'Parola corecta. STEAM ID adaugat in baza de date.';
  }
  else echo 'Parola incorecta. Nu s-a adaugat STEAM ID in baza de date.';
}
?>
 Parola: <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" name="Parola" /></form>
   <input type="submit" name="submit" id="submit" value="Trimite" />
</form>
</center>
Imagine, URL: imageshack.us/photo/my-images/41/numerge.png/

MarPlo Mesaje:4343
- Campul pentru parola e intr-un <form> inclus in alt <form>. Este incorect, ori ai un singur formular (<form>) cu toate campurile, ori mai multe formulare, separate, fiecare cu butonul lui Submit.
- Codul PHP de verificare a parolei ar trebui pus inainte de prelucrarea datelor pt adaugare in baza de date.
- PHP e case-sensitive, adica face diferenta intre litere mari si mici. Daca in cod ai $_POST['parola'] , in formular trebuie name="parola" , sa fie identic.

Incearca varianta asta, daca nu merge, il depanezi /verifici. Vezi ce date sunt primite de la formular, cu: var_export($_POST); , ce comanda e trimisa la MySQL, cu echo $sql; , daca sintaxa de nume e corecta, si ce mai stii ...; asa iti dai seama ce trebuie modificat ca sa mearga.

Cod: Selectaţi tot

<center>
<?php
$parola = 'AICIPAROLA';
$mesaj = '';          // Variabila folosita pt. mesajul ce va fi afisat pt. utilizator

// Se verifica daca sunt primite datele de la formular
if (isset($_POST['Steam_ADD']) && isset($_POST['Email']) && isset($_POST['Server']) && isset($_POST['parola'])) {
  // 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

  // Verifica parola, daca nu e corecta, adauga mesaj intr-o variabila tip array, $eroare
  if($_POST['parola'] != $parola) $eroare[] = 'Parola incorecta. Nu s-a adaugat STEAM ID in baza de date.';

  // Verifica daca Steam_ID are cel putin 17 caractere si maxim 19
  if(strlen($_POST['Steam_ID'])>17 && strlen($_POST['Steam_ID'])<19) $Steam_ID = $_POST['Steam_ID'];
  else $eroare[] = 'Caseta cu Steam_ID trebuie sa contina 18 caractere';

  // Verifica daca Steam_ADD are cel putin 3 caractere si maxim 50
  if(strlen($_POST['Steam_ADD'])>2 && strlen($_POST['Steam_ADD'])<51) $Steam_ADD = $_POST['Steam_ADD'];
  else $eroare[] = 'Caseta cu Steam_ADD trebuie sa contina intre 3 si 50 caractere';

  // Verifica daca adresa de email scrisa corespunde formatului unei adrese de email
  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 Email';

  // Verifica daca a fost selectata o valoare pt. 'Server'
  if(strlen($_POST['Server'])>2) $Server = $_POST['Server'];
  else $eroare[] = 'Selectati "Server"';

  // Verifica daca Fapta are cel putin 3 caractere si maxim 999
  if(strlen($_POST['Fapta'])>2 && strlen($_POST['Fapta'])<1000) $Fapta = $_POST['Fapta'];
  else $eroare[] = 'Caseta cu Fapta trebuie sa contina intre 3 si 999 caractere';

  // 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)) {
    include('conectare.php');         // Include fisierul pt. conectare-selectare baza de dat

    // Se aplica functia de filtrare mysql_real_escape_string()
    $Fapta = mysql_real_escape_string($Fapta);    
    $Steam_ADD = mysql_real_escape_string($Steam_ADD);
    $Email = mysql_real_escape_string($Email);
    $Server = mysql_real_escape_string($Server);
    $Fapta = mysql_real_escape_string($Fapta);

    
    // Acum se adauga mai in siguranta aceste date in MySQL
    $sql = "INSERT INTO `Admini` (`Steam_ID`, `Steam_ADD`, `Email`, `Server`, `Fapta`) VALUES ('$Steam_ID', '$Steam_ADD', '$Email', '$Server', '$Fapta')";
    if (mysql_query($sql, $conn)) {
      $mesaj = '<font color="blue">Datele au fost adaugate</font>';
      $Steam_ADD = '';  $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;
?>

<form action="" method="post">
 Steam ID: <input type="text" name="Steam_ID" id="Steam_ID" value="<?php if(isset($Steam_ID)) echo $Steam_ID; ?>" /><br />
 Steam ADD: <input type="text" name="Steam_ADD" id="Steam_ADD" value="<?php if(isset($Steam_ADD)) echo $Steam_ADD; ?>" /><br />
 Adresa Email: <input type="text" name="Email" id="Email" value="<?php if(isset($Email)) echo $Email; ?>" /><br />
 Server: <select name="Server" id="Server">
  <option value="">Alege</option>
  <option value="Server war oficial">Server war oficial</option>
  <option value="Server war afiliat">Server war afiliat</option>
  <option value="Server public oficial">Server public oficial</option>
  <option value="Server public afiliat">Server public afiliat</option>
 </select><br />
 Fapta: <input type="text" name="Fapta" id="Fapta" value="<?php if(isset($Fapta)) echo $Fapta; ?>" /><br />
 Parola: <input type="text" name="parola" /><br/>
 <input type="submit" name="submit" id="submit" value="Trimite" />
</form>
</center>