Vreau putin ajutor la crearea unui tabel in MySQL

Întrebări legate de conectarea la baze de date MySQL prin intermediul PHP

Moderatori: Zamolxe, Moderatori

dishpointer
PHPRomania Supporter
Mesaje: 18
Membru din: Joi Noi 03, 2011 4:31 pm
Contact:

Vreau putin ajutor la crearea unui tabel in MySQL

Mesajde dishpointer » Vin Mar 07, 2014 9:00 am

Salut, vreau sa fac un formular de inregistrare pt siteul meu si deci am nevoie sa lucrez cu o BD, am ales ca SGBD sa fie MySQL si am creat tabelul de mai jos 'MEMBRII' intr-o baza de date 'TEST' cu phpmyadmin, vreau putin ajutor adica, cum anume pot face ca campurile(coloanele) ' Nume' , 'Prenume' din tabelul de mai jos sa poata stoca doar litere nu si cifre sau alte caractere precum (+) de exemplu, daca folosesc tipul CHAR SAU VARCHAR imi permite sa stochez si alte caractere, nu doar litere...

mai vreau ca de ex cel care se inregistreaza si deci introduce numele si prenumele in formularul de inregistrare sa poata sa introduca maxim 25 de caractere(doar litere), si daca introduce de ex in afara de litere alte caractere sa nu se poata inregistra ( adica campurile Nume si Prenume sa stocheze doar litere, si maxim 25)...
Mentionez ca formularul este functional , ma pot inregistra cu succes si daca introduc la 'Nume' si 'Prenume' doar litere si daca introduc si alte caractere, dar eu vreau ca atunci cand introduc alte caractere sa nu se poata face inregistrarea, si vreau sa nu imi permita sa introduc la nume si prenume mai mult de 25 litere...
multumesc si astept sugestii, orice sfat, indrumare si ajutor e binevenit...

CREATE TABLE IF NOT EXISTS `MEMBRII` (
`op_id` int(11) NOT NULL AUTO_INCREMENT,
`Nume` varchar(25) CHARACTER SET utf8 COLLATE utf8_romanian_ci NOT NULL,
`Prenume` varchar(25) CHARACTER SET utf8 COLLATE utf8_romanian_ci NOT NULL,
`Password` varchar(30) NOT NULL,
`Activation` varchar(40) DEFAULT NULL,
PRIMARY KEY (`op_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=59 ;



MarPlo
Senior Member
Mesaje: 885
Membru din: Mie Sep 24, 2008 9:32 am
Localitate: Braila
Contact:

Re: Vreau putin ajutor la crearea unui tabel in MySQL

Mesajde MarPlo » Vin Mar 07, 2014 9:18 am

Salut
Ceea ce vrei se face in codul php, inainte de a adauga datele.
Exemplu:

Cod: Selectaţi tot

$_POST['nume'] = 'MarPlo';
if(
preg_match('/^[a-z]{1,25}$/i'$_POST['nume'])) {
  echo 
'Corect, litere , 1-25 lungime';
  
// adauga datele
}
else echo  
'nume incorect';
 

dishpointer
PHPRomania Supporter
Mesaje: 18
Membru din: Joi Noi 03, 2011 4:31 pm
Contact:

Re: Vreau putin ajutor la crearea unui tabel in MySQL

Mesajde dishpointer » Vin Mar 07, 2014 1:30 pm

mda, am incercat cu functia preg_match dar tot nu face ce vreau eu...
de ex. acum daca incerc sa ma inregistrez, si in formularul de inregistrare la campul 'Nume' scriu de ex. Ionescu++ ( adica folosesc si alte caractere, nu doar litere) inregistrarea tot se face cu succes doar ca diferenta fata de cum era inainte este ca in BD in coloana 'Nume' din tabelul 'MEMBRII' nu mai apare nimic, dar eu vroiam sa imi apara un mesaj de eroare si sa nu se poata efectua inregistratea...

MarPlo
Senior Member
Mesaje: 885
Membru din: Mie Sep 24, 2008 9:32 am
Localitate: Braila
Contact:

Re: Vreau putin ajutor la crearea unui tabel in MySQL

Mesajde MarPlo » Vin Mar 07, 2014 2:18 pm

Vezi ma atnt exemplu de sus si testeaza-l.
Functia preg_match() se adauga inntr-o conditie if()...else , si adaugi datele in mysql in cadru lui if(), cand preg_match e True.

dishpointer
PHPRomania Supporter
Mesaje: 18
Membru din: Joi Noi 03, 2011 4:31 pm
Contact:

Re: Vreau putin ajutor la crearea unui tabel in MySQL

Mesajde dishpointer » Sâm Mar 08, 2014 10:20 am

am facut codul din scriptul php in felul urmator pentru campul 'Nume' :


if (isset($_POST['formsubmitted'])) {

$error = array();//Declare An Array to store any error message

if (empty($_POST['name'])) {//if no name has been supplied

$error[] = 'Va rugam sa introduceti un nume ';//add to array "error"
//-------------------------------------------------------------------
$_POST['name'] = 'Nume';
if(preg_match('/^[a-z]{1,25}$/i', $_POST['name'])) {
echo 'Corect, litere , 1-25 lungime';
// adauga datele
}
else echo 'nume incorect';
// NU ARE NICIUN EFECT AICI FUNCTIA PREG_MATCH, POT INTRODUCE SI CARACTERE PRECUM ++ IN CAMPUL 'Nume'!!
//------------------------------------------------------------------


} else {

$name = $_POST['name'];//else assign it a variable

}


deci daca in formularul de inregistrare la campul 'Nume' introduc Ionescu++ , inregistrarea se face cu succes si in campul 'Nume' din tabelul bazei de date apara bineinteles Ionescu++, eu vroiam sa imi apara un mesaj de eroare pt ca am introdus Ionescu++ , nu am introdus Ionescu..

interesant este ca functia preg_patch() isi face bine treaba pentru campul 'E-mail', acolo daca nu introduc caracterul '@' imi apare un mesaj de eroare si imi spune ca ' Adresa dvs. de e-mail este invalida' deci functia preg_match() isi face treaba ok, codul este urmatorul pt campul 'e-mail':

//---------------------------------------------------------------------

if (empty($_POST['e-mail'])) {

$error[] = 'Va rugam sa introduceti adresa dvs. de email ';

} else {



if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['e-mail'])) {

//regular expression for email validation

$Email = $_POST['e-mail'];

} else {

$error[] = 'Adresa dvs. de e-mail este invalidă ';

}

}
//-----------------------------------------------------------------

MarPlo
Senior Member
Mesaje: 885
Membru din: Mie Sep 24, 2008 9:32 am
Localitate: Braila
Contact:

Re: Vreau putin ajutor la crearea unui tabel in MySQL

Mesajde MarPlo » Sâm Mar 08, 2014 11:01 am

Problema e ca ai pus codul de verificare cu preg_match in conditia if() cu empty(), ceea ce face sa nu se efectueze findca nu e valoare "empty".
Nu e nevoie de 2 verificari, empty() si preg_match pt aceeasi variabila.
Cam asa ar trebui:

Cod: Selectaţi tot

$error = array();
if(!
preg_match('/^[a-z]{1,25}$/i', $_POST['name'])) $error[] = 'Va rugam sa introduceti intre 1 si 25 litere ';
if(!
preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['e-mail'])) $error[] = 'Adresa dvs. de e-mail este invalidă ';
// ... alte verificari

if(count($error) > 0) echo implode('<br>', $error);    // afiseaza erorile, daca sunt
else {
  // aici se adauga datele in baza de date
}
 

dishpointer
PHPRomania Supporter
Mesaje: 18
Membru din: Joi Noi 03, 2011 4:31 pm
Contact:

Re: Vreau putin ajutor la crearea unui tabel in MySQL

Mesajde dishpointer » Sâm Mar 08, 2014 2:59 pm

acum am pus asa pt campul Nume:

Cod: Selectaţi tot

 $error = array();//Declare An Array to store any error message

if(!preg_match('/^[a-z]{1,25}$/i', $_POST['name'])) $error[] = 'Va rugam sa introduceti intre 1 si 25 litere ';

// ... alte verificari

if(count($error) > 0) echo implode('<br>', $error); // afiseaza erorile, daca sunt
else {

// aici se adauga datele in baza de date
$name = $_POST['name'];//else assign it a variable



iar fenomenul este urmatorul:

daca in campul 'Nume' scriu doar litere inregistrarea decurge normal, nu sunt probleme...

dar daca
la campul 'Nume' scriu de ex. Ionescu++( adica si alte caractere in afara de litere) inregistrarea tot se face, doar ca in tabelul bazei de date campul 'Nume' ramane gol, iar eu vroiam ca in cazul asta cand la nume scriu Ionescu++ sa imi apara un mesaj de eroare si sa nu se faca inregistrarea si nici sa nu introduca celelalte date in baza de date(in tabel)...

atasez 2 screenshot-uri poate ma fac inteles mai bine ce vreau sa fac...

deci cand scriu in formularul de inregistrae la campul Nume de ex Ionescu++ imi apare ca si in screenshot-uri...
Fişiere ataşate
tabel_BD.png
tabel_BD.png (22.43 KiB) Vizualizat de 2751 ori
Screenshot.png
Screenshot.png (26.25 KiB) Vizualizat de 2751 ori

dishpointer
PHPRomania Supporter
Mesaje: 18
Membru din: Joi Noi 03, 2011 4:31 pm
Contact:

Re: Vreau putin ajutor la crearea unui tabel in MySQL

Mesajde dishpointer » Sâm Mar 08, 2014 3:02 pm

am atasat tot codul php unde naiba am gresit :

Cod: Selectaţi tot

 <?php include ('database_connection.php');

if (isset($_POST['formsubmitted'])) {

$error = array();//Declare An Array to store any error message

if(!preg_match('/^[a-z]{1,25}$/i', $_POST['name'])) $error[] = 'Va rugam sa introduceti intre 1 si 25 litere ';

// ... alte verificari

if(count($error) > 0) echo implode('<br>', $error); // afiseaza erorile, daca sunt
else {

// aici se adauga datele in baza de date
$name = $_POST['name'];//else assign it a variable

}


//----------------------------------------------------------------------
$error = array();//Declare An Array to store any error message

if (empty($_POST['prenume'])) {//if no prename has been supplied

$error[] = 'Va rugam sa introduceti un prenume ';//add to array "error"


} else {

$prename = $_POST['prenume'];//else assign it a variable

}


//---------------------------------------------------------------------

if (empty($_POST['e-mail'])) {

$error[] = 'Va rugam sa introduceti adresa dvs. de email ';

} else {



if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['e-mail'])) {

//regular expression for email validation

$Email = $_POST['e-mail'];

} else {

$error[] = 'Adresa dvs. de e-mail este invalidă ';

}


}



if (empty($_POST['Password'])) {

$error[] = 'Va rugam sa introduceti parola ';

} else {

$Password = $_POST['Password'];

}
//-------------------------------------------------------------


if (empty($error)) //send to Database if there's no error '



{ // If everything's OK...



// Make sure the email address is available:

$query_verify_email = "SELECT * FROM MEMBRI_INREG WHERE Email ='$Email'";

$result_verify_email = mysqli_query($dbc, $query_verify_email);

if (!$result_verify_email) {//if the Query Failed ,similar to if($result_verify_email==false)

echo ' S-a intamplat o eroare la baza de date ';

}



if (mysqli_num_rows($result_verify_email) == 0) { // IF no previous user is using this email .



// Create a unique activation code:

$activation = md5(uniqid(rand(), true));



$query_insert_user = "INSERT INTO `MEMBRI_INREG` ( `Nume`, `Prenume`, `Email`, `Password`, `Activation`) VALUES ( '$name', '$prename', '$Email', '$Password', '$activation')";



$result_insert_user = mysqli_query($dbc, $query_insert_user);

if (!$result_insert_user) {

echo 'Interogarea a eșuat ';

}


if (mysqli_affected_rows($dbc) == 1) { //If the Insert Query was successfull.



// Send the email:

$message = "Pentru a activa contul dvs., vă rugăm să faceți clic pe acest link :\n\n";

$message .= WEBSITE_URL . '/activate.php?email=' . urlencode($Email) . "&key=$activation";

mail($Email, 'Registration Confirmation', $message, 'From: contact-us@eugo.ro');



// Flush the buffered output.



// Finish the page:

echo '<div class="success">Vă mulțumim pentru înregistrare! Un email de confirmare

a fost trimis la '.$Email.' Vă rugăm să faceți clic pe link-ul de activare pentru a activa contul dvs. </div>';



} else { // If it did not run OK.

echo '<div class="errormsgbox"> Nu puteti fi înregistrat din cauza unei erori de sistem. Ne cerem scuze pentru eventualele neplăceri

</div>';

}


} else { // The email address is not available.

echo '<div class="errormsgbox" > Aceasta adresa de email

a fost deja înregistrata.

</div>';

}


} else {//If the "error" array contains error msg , display them



echo '<div class="errormsgbox"> <ol>';

foreach ($error as $key => $values) {


echo ' <li>'.$values.'</li>';


}

echo '</ol></div>';


}


mysqli_close($dbc);//Close the DB Connection



} // End of the main Submit conditional.



?> 


Înapoi la “MySQL”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 6 vizitatori