Afisare mesaj daca numele exista in mysql

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
alexcele
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
Salut,
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";
2. Daca acel Select returneaza vreun rand, afisezi mesaj; daca nu, continui cu Insert /Update.

alexcele

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>
Primesc aceasta eroare:

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
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:

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
Este ok acum dar imi adauga acelasi nume in baza de date de cate ori il bag. Nu imi spune ca exista.

MarPlo
Verifica instructiunea de la $sql, sa fie cu numele tabelului si coloanele din baza ta de date.
Poate asa:

Cod: Selectaţi tot

$sql = "SELECT * FROM membri WHERE nume='$nume' LIMIT 1";
- 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".

alexcele
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
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));

Subiecte similare