Generare si Incrementare numar inregistrare in baza de date

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

Generare si Incrementare numar inregistrare in baza de date

Salut , intrucat cunostintele nu ma ajuta , sunt nevoit sa cer ajutor celor care sunt mai :idea: .
Am urmatorul cod :

Cod: Selectaţi tot

$i=1;
$numar="$rma1$i";
$result=1;
while ( $result  ) {   //sa fie $result == true  :?: ar rula la infinit cred sau...    
	$sql = "SELECT nummer FROM databank WHERE nummer=$nummer";
	$result = mysqli_query($conn,$sql);
 if ($result) {
	echo "Numarul va fi generat din nou";
		$i=$i+1;
		$nummer="$rma1$i";
  		echo "Numarul nou este:$nummer";
 	 }
}
 $sql = "UPDATE databank SET nummer = $nummer WHERE id = $id";
 if (!$conn->query($sql)) {
 echo 'Error: '. $conn->error;
Ceea ce vreau sa fac e sa generez un numar ( are data curenta + nr de ordine 1,2,3) sa il verific in baza de date daca exista si daca da sa cresc valoarea cu o unitate . Pentru o singura apelare functioneaza , insa ma gandesc ca ar trebui sa il pun intr-o bucla .
Aici duc lipsa de :roll: si nu imi dau seama cum as putea face; ms anticipat.

- Edit:
Am folosit cautarea in tabel ce e aici in tutorial insa tot nu arata cum ar trebuie , nr de inreg nu e in ordine crescatoare.

Cod: Selectaţi tot

 $sql = "SELECT nummer FROM databank WHERE nummer LIKE $nummer";
	$result = mysqli_query($conn,$sql); 
        $count = mysqli_num_rows($result);  
        if  ( $count > 0 )  {
                echo "Generare  nr de inreg ";
		$i=$i+1;
		$nummer="$rma1$i";
  		echo "Numarul este :$nummer";
dupa care update in baza de date ...

MarPlo
Salut
Personal nu prea am inteles ce vrei sa faci, cum ai in baza de date si ce /cum vrei sa rezulte.
Daca vrei rezultatele sa fie returnate in ordine crescatoare dupa "nummer", poti folosi ORDER BY:

Cod: Selectaţi tot

$sql = "SELECT nummer FROM databank WHERE nummer LIKE $nummer ORDER BY nummer";

giulian9
Baza de date are mai multe inregistrari , cand un angajat apasa butonul de confirmare , un numar de inregistrare trebuie sa fie generat de forma: 201702071/201702072/201702073 ( date('Ymd')1 ) si atribuit unei linii . Reusesc sa generez doar primul numar . Practic eu trebuie sa verific daca nr nu este deja atribuit iar daca este ,noul numar de inreg sa creasca cu o unitate, de asta foloseam $i=$i+1 ....insa nu imi dau seama ce bucla sa folosesc ca sa fac cautarea in mysql si daca e gasit sa ii creasca valoarea , daca nu ramane acelasi .

MarPlo
Poti sa specifici in UPDATE sa creasca valoarea daca acel numar e deja; fara sa fie nevoie de SELECT anterior.
Cam asa:

Cod: Selectaţi tot

$sql="UPDATE databank SET nummer = (nummer +1) WHERE nummer = $nummer";

giulian9
Ca sa se inteleaga cam ce vreau sa fac :

Cod: Selectaţi tot

$rma1=date('Ymd'); 
   $i=1;       
        $nummer="$rma1$i";           
	$sql = "SELECT nummer FROM databank WHERE nummer LIKE $nummer "; // nummer=$nummer 
	$result = mysqli_query($conn,$sql);
        $count = mysqli_num_rows($result);  
        if  ( $count > 0  ) { 
         echo "Generare numar.";
		$i=$i+1;
		$nummer="$rma1$i";
  	echo "Numarul este: $nummer"; //test
 	 
 $sql = "UPDATE databank SET nummer = $nummer WHERE id = $id";
 if (!$conn->query($sql)) {
 echo 'Error: '. $conn->error; } }  else {  
                                           echo "Numarul de inreg este : $nummer"; //test
 $sql = "UPDATE databank SET nummer = $nummer WHERE id = $id";
 if (!$conn->query($sql)) {
 echo 'Error: '. $conn->error; }} 
 }

MarPlo
Vezi daca iti e de folos acest cod, poate ca idee.

Cod: Selectaţi tot

$rma1=date('Ymd');
//select all rows with nummer=$rma1(NR)
$sql = "SELECT id, nummer FROM databank WHERE nummer LIKE '$rma1%' ORDER BY nummer";
$result = mysqli_query($conn,$sql);
$count = mysqli_num_rows($result); 
if($count > 0){
  while($row = $result->fetch_assoc()){
   //get and increment $nr in nummer in $row, update it
    $nr=str_ireplace($rma1, '', $row['nummer'])+1;
    $nummer="$rma1$nr";  //new number
    echo "<br>Numarul este: $nummer"; //test

    $sql = "UPDATE databank SET nummer = $nummer WHERE id =". $row['id'];
    if (!$conn->query($sql)) echo 'Error: '. $conn->error;
  }
}
Sau acesta:

Cod: Selectaţi tot

$rma1=date('Ymd');
$i=1;       
$nummer="$rma1$i";
//select all rows with nummer=$rma1(NR)
$sql = "SELECT id, nummer FROM databank WHERE nummer LIKE '$rma1%' ORDER BY nummer";
$result = mysqli_query($conn,$sql);
$count = mysqli_num_rows($result); 
if($count > 0){
  while($row = $result->fetch_assoc()){
   //if $nummer is in $row, update it
    if($row['nummer'] ==$nummer){
      echo "Generare numar.";
      $i++;
      $nummer="$rma1$i";
      echo "Numarul este: $nummer"; //test

      $sql = "UPDATE databank SET nummer = $nummer WHERE id =". $row['id'];
      if (!$conn->query($sql)) echo 'Error: '. $conn->error;
    }
  }
}

giulian9
Multumesc mult . Exact secventa care lipsea , acel "while' . Stima Julian

Subiecte similare