2017-03-31 1 views
1

Ich habe zwei Tabellen pre_application und Bewerber und ich möchte pre_application Tabelle für Passwort und Bewerber Tabelle für die Anwendung Stift und wenn sie erfolgreich die Antragsteller abfragen angemeldet sein sollte Unten ist mein Code:.php PDO Abfrage zwei Tabellen mit den Unterschieden

if(isset($_POST['submit']) || $_SERVER['REQUEST_METHOD']=='POST'){ 

    try{ 
     $pin=$_POST['pin']; 
     $pass=$_POST['password']; 
     $stm=$dbh->query("SELECT password FROM pre_application WHERE password='$pass' UNION SELECT app_no FROM applicants WHERE app_no='$pin'"); 
     foreach($stm as $row); 
     $appass=$row['password']; 
     $appin=$row['app_no']; 
     $name=$row['name']; 
     if($stm) { 
      header('location:approfile.php?applicant=$appass'); 
     } else { 
      echo "<script> alert('Invalid Application Number or Password')</script>"; 
      exist(); 
     } 
    } catch(Exception $e){ 
     echo $e->getMessage(); 
    }        
}?> 

Jemand sollte bitte helfen Sie auf dem richtigen Syntax

+2

'foreach ($ stm als $ row);' das stoppt genau dort. RTM http://php.net/manual/en/control-structures.foreach.php –

+0

'' location: approfile.php? Antragsteller = $ appass'' Variablen werden nicht in einfache Anführungszeichen zerlegt und die POST-Arrays sind unbekannt . –

+0

Mein Problem ist auf die Abfrage-Syntax – apollos

Antwort

0

Ihnen allen für Ihre Beiträge danken. Nach all dem habe ich das Problem gelöst.

Der obige Code hat funktioniert, aber ich würde einen besseren Weg zur Erreichung der gleichen Sache begrüßen. danke

0

die UNION ist nicht die richtige Lösung für Ihren Fall. Die UNION, wie der Name schon sagt, wird die Datensätze (Sie können es auch Zeilen oder Datensätze nennen) aller Unterabfragen miteinander in Verbindung bringen.

Für Ihre Frage, Ich gehe davon aus, dass die pre_application und Bewerber Tabelle über einen FOREIGN KEY (dem einfachsten Fall in Verbindung gebracht werden müssen, sonst können sie über eine Brückentabelle, aber ich kann nicht sagen, was genau dort in Verbindung gebracht werden Da ich Ihre Tabellenstrukturen nicht sehen kann, gibt es keine genaue Möglichkeit, ein Pin - Passwort - Paar zu verbinden und sicherzustellen, dass jedes Passwort - Pin - Paare eindeutig sind.

Mit der Annahme, dass ein Spaltenname ist app_id in der pre_application Tabelle, die die FOREIGN KEY ist der id Spalte in der Tabelle Bewerber, können Sie Ihre Abfrage ändern JOIN zu verwenden statt UNION:

$stm=$dbh->query("SELECT password, pin 
        FROM pre_application pre 
        JOIN applicants app ON app.id = pre.app_id 
        WHERE password='$pass' AND app_no='$pin'"); 

Die JOIN Spiel Reihen von pre_ap Klicken Sie in der Bewerber-Tabelle auf die Verknüpfungstabelle, um festzustellen, ob diese JOINING-Zeilen mit der Passwort- und PIN-Bedingung übereinstimmen, und geben Sie die übereinstimmende zurück.

Sie können etwas mehr Forschung über JOIN, hier UNION: https://dev.mysql.com/doc/refman/5.7/en/join.html

+0

Ich schätze Ihre Lösung, aber die Tatsache ist, dass pre_application und Bewerber die beiden Tabellen sind. pre_application table hat die folgenden Felder invioce_no, program, name, password, während der Antragsteller invoice_no, app_no, Namen als Spalten hat, so dass Sie die Abfrage restrukturieren möchten, bitte – apollos

+0

Sie können die JOIN-Klausel ändern und ID durch invoice_no ersetzen. –

Verwandte Themen