Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js][mysql][php] NIP sprawdzenie w bazie
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
ketiv
Witam,
Mam , wydawać by się mogło, banalny problem ze sprawdzeniem numeru NIP w bazie. Ambitny plan jest taki:
- w formularzu który wypełniają mi ludzie jest pole NIP, jako jeden ze składników opisu firmy,
- po jego wpisaniu następuje validacja przez JS (czy jest poprawny), (działa)
- jeśli nie, to pojawia się stosowny komunikat, jeśli tak to następuje sprawdzenie pod kątem występowania takiego NIPu w bazie, (też działa)
- jeśli istnieje, to są pobierane wartości i wyświetlane, jeśli nie to można taką firmę dodać do bazy.
Reasumując,
formularz ma być blokowany jeśli jest błąd (zły nim, lub nip już istnieje), a jeśli jest to nowy nip to można w bazie zapisać.

Problem ma niestety z blokowaniem formularza. Koncepcja była taka, żeby zatrzymywać użytkownika na polu NIP, dopóki wszelkie warunki nie będą spełnione, albo blokować przycisk zapisu do bazy. Tak jak bez problemu działają mi validacje poprawności danych oraz odczytywanie zawartości bazy w tle, tak wysypuję się blokowaniu formularza przed nieodpowiednim zapisem. Błąd pewnie banalny, ale mój stan wiedzy chyba zbyt mały żeby go samemu poprawić.

Poniżej moje "wypociny"
formularz.php:
Kod
...
echo 'Firma: <input  type="text" name="firma[1]" value="'.$firma[1].'" ><br>';  
echo 'NIP: <input   type="text" name="firma[2]" value="'.$firma[2].'" id="NipInput" onchange="ShowNip(this.value)"><br>';
...
echo '<input type="submit" name="ok" id="firm_ok" value="DODAJ">';
echo '<div id="div_info" class="div_nip"></div>';
...


funkcje.js (chciałbym zatrzymać focus na polu 'NipInput', lub zablokować przycisk 'firm_ok')
Kod
function ShowNip(str)
{
if (str=="")
  {
  document.getElementById("div_info").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("div_info").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getnip.php?nip="+str,false);
xmlhttp.send();
}
function niperr(){
   document.getElementById('NipInput').focus();
   document.getElementById('firm_ok').disabled=true;
   document.getElementById('firm_ok').style.color="#a0a0a0";
}
function nipok(){
   document.getElementById('firm_ok').disabled=false;
   document.getElementById('firm_ok').style.color="#000000";
}


i pobieranie danych z bazy. getnip.php
Kod
<?php
$nip=$_GET["nip"];

include("config.php");

$con = mysql_connect($pnconfig['dbhost'] ,$pnconfig['dbuname'],$pnconfig['dbpass']);
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db($pnconfig['dbname'], $con);

$sql="SELECT * FROM firmy WHERE nip = '".$nip."'";

$result = mysql_query($sql);
if (mysql_num_rows($result)>0){

echo "<div class='div_c'>";
while($row = mysql_fetch_array($result))
  {
  echo "<b>FIRMA JUŻ ISTNIEJE!!</b><br>";
  echo $row['nazwa'] . "<br>";
  echo $row['adr_ulica'] . "<br>";
  echo $row['adr_kod'] . "<br>";
  echo $row['adr_miasto'] . "<br>";
  echo $row['wojewodztwo'] . "<br>";
  echo "<script language='JavaScript'>niperr();</script>";  //radosna twórczość;)
  }
echo "</div>";
}
else {
  echo "<script language='JavaScript'>nipok();</script>";  //radosna twórczość;)
}
mysql_close($con);
?>


Z góry dzięki za wszelkie sugestie co robię nie tak.
JohnnyB
to się robi tak:
w PHP:
  1. if (mysql_num_rows($result)>0)
  2. echo "{ status: 1, komunikat: 'NIP jest w bazie' }";
  3. else
  4. echo "{ status: 0, komunikat: 'Brak NIP w bazie' }";


w JS:
  1. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  2. {
  3. var json=eval('('+xmlhttp.responseText+')');
  4. if(json.status) niperr();
  5. else nipok();
  6. document.getElementById("div_info").innerHTML=json.komunikat;
  7. }
ketiv
Dzięki za odpowiedz. Zaimplementowałem to rozwiązanie u siebie, lekko przerobiłem i działa rewelacyjnie.
Jeszcze raz dzięki za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.