Chiamare pagina php da javascript

mauriziom79

Nuovo Utente
19 Apr 2020
5
1
3
Ciao , sono nuovo del forum e non faccio il programmatore . Ho una pagina nuovoallievo.php che dopo l'inserimento in un input 'cf' delform tramite javascript controlla l'esattezza del codice fiscale se il risultato è corretto tramite $.ajax chiamo una pagina cf.php che controlla se il codice fiscale è già presente nel database , se il codice fiscale non è presente continua con il form nella pagina nuovoallievo.php , e fin qui tutto ok , il mio problema e che se il codice fiscale e' già presente nel database dovrei aprire un altra pagina allievo1.php , ma a questo punto mi stampa i risultati della pagina allievo1.php nella pagina nuovoallievo.php e questo che vorrei evitare quindi secondo me il problema sta nella chiamata $.ajax che dovrebbe essere fatta in altro modo.

codice nuovoallievo.php
Codice:
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>NUOVO ALLIEVO</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
<meta charset="UTF-8">
<script src="./jquery/jquery-3.1.1.min.js"></script>
</head>
<body>
<script language="javascript">
function validaCf(v)
{
 
   var cf=v.value;
 
   if(validaCodiceFiscale(cf)==true)
   {
     $(document).ready(function() {
   var cf =$("#cf").val();
    $.ajax({                 
    url:("./cf.php"),
    method:"POST",
    data : {cf:cf},
    success:function(data){
     $("#risposta").html(data);      // il mio problema credo che sia questo ho provato anche a togliere success: ma non fa nulla
    }
 });
});
}
   else
   {
   alert('Codice Fiscale '+v.value+' non valido!');
   }
}
function validaCodiceFiscale(cf)
 {
     var validi, i, s, set1, set2, setpari, setdisp;
     if( cf == '' )  return '';
     cf = cf.toUpperCase();
     if( cf.length != 16 )
         return false;
     validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     for( i = 0; i < 16; i++ ){
         if( validi.indexOf( cf.charAt(i) ) == -1 )
             return false;
     }
     set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
     setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
     s = 0;
     for( i = 1; i <= 13; i += 2 )
         s += setpari.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
     for( i = 0; i <= 14; i += 2 )
         s += setdisp.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
     if( s%26 != cf.charCodeAt(15)-'A'.charCodeAt(0) )
         return false;
     return true;
 }

</script>

<form method="POST" name="NUOVOALLIEVO"  >

<div class="DATI"><h1>NUOVO ALLIEVO</h1>
<div id="DATIPRINCIPALI">
COGNOME <input type="text" id= "cognome" name="cognome" maxlength ="50" size ="30" required />
NOME <input type="text" id="nome"  name="nome" maxlength ="30" size ="50" required />
CODICE FISCALE  <input onblur="javascript:validaCf(cf)"type="text" id ="cf" name="cf" maxlength="16" size="16"  // qua parte il controllo del codice fiscale
</div>

....
codice cf.php
Codice:
<?php
session_start();
require_once ("scuolacalcio.php");
$cf=$_POST['cf'];
        $query = "
            SELECT *
            FROM allievo
            WHERE CF =:cf
        ";
        
        $check = $pdo->prepare($query);
        $check->bindParam(':cf', $cf, PDO::PARAM_STR);
        $check->execute();
        
        
    
     $persona = $check->fetch(PDO::FETCH_ASSOC);
     if(empty($persona)==false){
     $id=$persona['IDALLIEVO'];
     $_SESSION['id']=$id;
        header('location:allievo1.php');
     }
    ?>
grazie anticipatamente
 

Tommy03

Utente Attivo
6 Giu 2018
486
49
28
17
Bassano del Grappa (VI)
Premesso che non sono un esperto, in teoria il success di ajax stampa i valori che vengono messi con echo nel file php. Quindi io proverei a fare così:
nuovoallievo.php
HTML:
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>NUOVO ALLIEVO</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
<meta charset="UTF-8">
<script src="./jquery/jquery-3.1.1.min.js"></script>
</head>
<body>
<script language="javascript">
function validaCf(v)
{
 
   var cf=v.value;
 
   if(validaCodiceFiscale(cf)==true)
   {
     $(document).ready(function() {
   var cf =$("#cf").val();
    $.ajax({                 
    url:("./cf.php"),
    method:"POST",
    data : {cf:cf},
    success:function(data){
if(data == "Nessun utente") {
     $("#risposta").html(data);
}else{
document.location="allievo1.php";
}
    }
 });
});
}
   else
   {
   alert('Codice Fiscale '+v.value+' non valido!');
   }
}
function validaCodiceFiscale(cf)
 {
     var validi, i, s, set1, set2, setpari, setdisp;
     if( cf == '' )  return '';
     cf = cf.toUpperCase();
     if( cf.length != 16 )
         return false;
     validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     for( i = 0; i < 16; i++ ){
         if( validi.indexOf( cf.charAt(i) ) == -1 )
             return false;
     }
     set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
     setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
     s = 0;
     for( i = 1; i <= 13; i += 2 )
         s += setpari.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
     for( i = 0; i <= 14; i += 2 )
         s += setdisp.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
     if( s%26 != cf.charCodeAt(15)-'A'.charCodeAt(0) )
         return false;
     return true;
 }

</script>

<form method="POST" name="NUOVOALLIEVO"  >

<div class="DATI"><h1>NUOVO ALLIEVO</h1>
<div id="DATIPRINCIPALI">
COGNOME <input type="text" id= "cognome" name="cognome" maxlength ="50" size ="30" required />
NOME <input type="text" id="nome"  name="nome" maxlength ="30" size ="50" required />
CODICE FISCALE  <input onblur="javascript:validaCf(cf)"type="text" id ="cf" name="cf" maxlength="16" size="16"  // qua parte il controllo del codice fiscale
</div>
cf.php
PHP:
<?php
session_start();
require_once ("scuolacalcio.php");
$cf=$_POST['cf'];
        $query = "
            SELECT *
            FROM allievo
            WHERE CF =:cf
        ";
        
        $check = $pdo->prepare($query);
        $check->bindParam(':cf', $cf, PDO::PARAM_STR);
        $check->execute();
        
        
    if(($check->rowCount) >0){
     $persona = $check->fetch(PDO::FETCH_ASSOC);
     $id=$persona['IDALLIEVO'];
     echo $id;
     }else{
echo "Nessun utente";
}
    ?>
Sono alle prime armi quindi non farci molto affidamento...
 

mauriziom79

Nuovo Utente
19 Apr 2020
5
1
3
Grazie Tommy03 della risposta ho seguito il tuo suggerimento pero' ancora non va bene nel senso che c'è qualcosa che non va nel if della funzione success perchè mi apre la pagina allievo1.php sia che la risposta sia "Nessun utente" sia che il codice fiscale è presente nel database
Codice:
function validaCf(v)
{
 
   var cf=v.value;
 
   if(validaCodiceFiscale(cf)==true)
   {
     $(document).ready(function() {
   var cf =$("#cf").val();
    $.ajax({
    url:("./cf.php"),
    method:"POST",
    data : {cf:cf},
      success:function(data){
     if(data == "Nessun utente") {     // credo che il problema adesso sia questo
     $("#risposta").html(data);
     }
     else{
     document.location="allievo1.php";
     }
      }
 });
});
}
ho provato a togliere l'if e la risposta è esatta nel senso che se il codice fiscale non è presente scrive Nessun utente altrimenti mette l'id del utente presente
 

Tommy03

Utente Attivo
6 Giu 2018
486
49
28
17
Bassano del Grappa (VI)
E se invece provi a mettere così cosa succede?
HTML:
if(data != "Nessun utente") {
document.location("allievo1.php");
}else{
document.location("prova.php");
}
 

Tommy03

Utente Attivo
6 Giu 2018
486
49
28
17
Bassano del Grappa (VI)
È davvero strano. Quindi se non c'è nessun utente nel database stampa "Nessun utente"? Sicuro che non ci sia qualche errore di ortografia?
Giusto per capire di più problema, prova a mettere ad esempio un if che sei sicuro che sia vero e che quindi dovrebbe mandarti a prova.php
Esempio:
HTML:
if((data.lenght) > 10){
document.location("prova.php");
}
 

mauriziom79

Nuovo Utente
19 Apr 2020
5
1
3
Allora ho messo un alert e faccio stampare il risultato in entrambe i casi mette dei segni che non ho mai visto vicino al risultato
ti allego la cattura per questo l' if non funziona.
Codice:
success:function(data){
          alert (data);
     if(data == "Nessun utente") {
     $("#risposta").html(data);

     }
else{
document.location="allievo1.php";
 

Allegati

Tommy03

Utente Attivo
6 Giu 2018
486
49
28
17
Bassano del Grappa (VI)
A questo punto anche se è parecchio brutto così dovrebbe comunque funzionare:
HTML:
if(data.includes("Nessun utente")) {
document.location("prova.php");
}else{
document.location("allievo1.php");
}
 
  • Like
Reactions: mauriziom79