Afisare mesaj daca numele exista in mysql
-
- Mesaje: 4
Afisare mesaj daca numele exista in mysql
Salut. Am nevoie de ajutor in urmatoarea problema. Vreau sa adaug un nume intr-o baza de date si atunci cand acelasi nume este deja in baza de date sa primesc un mesaj de avertizare gen: "acest nume este deja inregistrat". Multumesc!
MarPlo
Mesaje: 4343
Salut,
1. Inainte de a face Insert sau Update in MySQL, apl;ici un Select sa vezi daca acel nume e deja inregistrat.
2. Daca acel Select returneaza vreun rand, afisezi mesaj; daca nu, continui cu Insert /Update.
1. Inainte de a face Insert sau Update in MySQL, apl;ici un Select sa vezi daca acel nume e deja inregistrat.
Cod: Selectaţi tot
$name ='un-nume';
$sql ="SELECT col_name FROM table1 WHERE col_name ='$name' LIMIT 1";
alexcele
Mesaje: 4
Cod: Selectaţi tot
<?php
// Se defineste un Header pt. a utiliza setul de caractere cu format UTF-8
header('Content-type: text/html; charset=utf-8');
$mesaj = 'Adauga numele'; // Variabila folosita pt. mesajul ce va fi afisat pt. utilizator
// Se verifica daca sunt primite datele de la formular
if (isset($_POST['nume'])) {
// Se filtreaza datele pt. eliminare posibile tag-uri si spatii exterioare
$_POST = array_map("strip_tags", $_POST);
$_POST = array_map("trim", $_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 Numele are cel putin 3 caractere si maxim 40
if(strlen($_POST['nume'])>2 && strlen($_POST['nume'])<41) $nume = $_POST['nume'];
else $eroare[] = 'Caseta cu Nume si Prenume trebuie sa contina intre 3 si 40 caractere';
// Daca nu exista nici un mesaj de eroare, filreaza datele cu real_escape_string() si le adauga in baza de date
// Altfel, in cazul vreunei erori, adauga in variabila $mesaj
if(!isset($eroare)) {
include 'conn.php'; // Include fisierul pt. conectare-selectare baza de dat
// Se aplica functia de filtrare real_escape_string()
$nume = $conn->real_escape_string($nume);
$sql = "SELECT `nume` FROM `nume_tabel` WHERE `nume`='$nume' LIMIT 1";
$rezultat = mysql_query($sql);
if (mysql_errno()) {
echo "<br />". mysql_error(). "<br />";
}
if (mysql_num_rows($rezultat) > 0) {
echo 'Numele exista , foloseste altul';
}
else {
// Restul codului pt cazul cand numele nue inregistrat
// Acum se adauga mai in siguranta aceste date in MySQL
$sql = "INSERT INTO `membri` (`nume`) VALUES ('$nume')";
if($conn->query($sql) === TRUE) {
$mesaj = '<h4>Datele au fost adaugate</h4>';
$nume = '';
}
else $mesaj = '<h4>Datele nu au putut fi adaugate '. mysql_error(). '</h4>';
}
}
}
echo $mesaj;
?>
<form action="" method="post">
<div align="center">
<p><br />
<br />
<br />
Nume si Prenume:
<input type="text" name="nume" id="nume" value="<?php if(isset($nume)) echo $nume; ?>" />
</p>
<p><br>
<input type="submit" name="submit" id="submit" value="Trimite" />
</p>
</div>
</form>
Cod: Selectaţi tot
Fatal error: Uncaught Error: Call to undefined function mysql_query() in /storage/ssd4/169/5647169/public_html/adauga.php:30 Stack trace: #0 {main} thrown in /storage/ssd4/169/5647169/public_html/adauga.php on line 30
Marius
Mesaje: 60
E un ghiveci de cod, amestecatura de Copy-Paste de cineva care habar nu are de ceea ce face.
Daca e conectare cu MySQLi, se aplica metoda query() (nu mysql_query(), care e deprecata).
Deci, in codul tau aplica:
Daca e conectare cu MySQLi, se aplica metoda query() (nu mysql_query(), care e deprecata).
Deci, in codul tau aplica:
Cod: Selectaţi tot
$rezultat = $conn->query($sql);
if(is_object($rezultat) && $rezultat->num_rows > 0) {
echo 'Numele exista , foloseste altul';
}
else {
//Codul de Insert...
}
alexcele
Mesaje: 4
Este ok acum dar imi adauga acelasi nume in baza de date de cate ori il bag. Nu imi spune ca exista.
MarPlo
Mesaje: 4343
Verifica instructiunea de la $sql, sa fie cu numele tabelului si coloanele din baza ta de date.
Poate asa:
- In plus, ca extra siguranta, daca vrei ca datele din coloana 'nume' sa nu se repete, seteaz-o cu atributul UNIQUE, din PhpMyAdmin.
Daca nu stii cum, vezi pe internet la cautare "phpmyadmin set column unique".
Poate asa:
Cod: Selectaţi tot
$sql = "SELECT * FROM membri WHERE nume='$nume' LIMIT 1";
Daca nu stii cum, vezi pe internet la cautare "phpmyadmin set column unique".
alexcele
Mesaje: 4
Multumesc. Am reusit. Insa exista o problema. Daca bag "Ion Boschet" si apoi bag " Ion Boschet", sau daca pun un space in plus, numele este adaugat.
MarPlo
Mesaje: 4343
Inainte de a folosi sirul cu numele in mysql (pt. Select, Insert, Update) curata-l de spatiile multiple si din margini, cu acest cod:
Cod: Selectaţi tot
$nume = trim(preg_replace('/\s+/', ' ', $nume));