2017-07-13 7 views
0

Ich baue eine kleine E-Commerce-Website, und ich möchte die Bewertungen anzeigen, und ich möchte Bildschirmnamen für Personen erstellen (erster Buchstabe des Vornamens auf den Nachnamen verkettet) , aber ich kann nicht herausfinden, wie ich die Informationen aus meiner Client-Tabelle bekomme. Lassen Sie mich Ihnen den Code, den ich bisher getan habe:
Erhalte Daten aus verschiedenen Tabellen basierend auf der ID

$invId = filter_input(INPUT_GET, 'invId', FILTER_SANITIZE_NUMBER_INT); // this is taken from a name value pair from the view 
// Gets the raw data from the database  
function getProRev($invId){ 
     $db = acmeConnect(); 
     $sql = "SELECT * FROM reviews WHERE invId = :invId ORDER BY reviewId DESC"; 
     $stmt = $db->prepare($sql); 
     $stmt->bindValue(':invId', $invId, PDO::PARAM_STR); 
     $stmt->execute(); 
     $tn = $stmt->fetchAll(); 
     $stmt->closeCursor(); 
     return $tn; 
    } 

// Builds the simple review display 
function buildReviewDisplay($reviews){ 
    $rd = "<div id='reviewView'>"; 
    foreach ($reviews as $review){ 
     $rd .= "<h2>$review[clientId]</h2>"; 
     $rd .= "<h3>$review[reviewDate]</h3>"; 
     $rd .= "<p>$review[reviewText]</p>"; 
     $rd .= "<hr>"; 
    } 
    $rd .= "</div>"; 
    return $rd; 
} 

Wie Sie sehen, ich bin die clientId (eine Zahl) anzeigt, das nicht das, was ich will, und das ist jetzt, wo ich Ich stecke fest. Ich habe die Beziehung zwischen den zwei Tabellen (Kunden und Bewertungen) eingerichtet, aber ich kann nicht herausfinden, wie man die Daten bekommt. Hier ist die Funktion, die ich zu schreiben versucht, aber es hat nicht funktioniert:

// Trying to get the dang client info 
function getUsername($clientId){ 
$db = acmeConnect(); 
$sql = "SELECT * FROM clients WHERE clientId = :clientId"; 
$stmt = $db->prepare($sql); 
$stmt->bindValue(':clientId', $clientId, PDO::PARAM_STR); 
$stmt->execute(); 
$cd = $stmt->fetchAll(); 
$stmt->closeCursor(); 
$fletter = substr($cd['clientFirstname'], 0, 1); 
$scrnam = $fletter . $cd['clientLastname']; 
return $scrnam; 
} 

Und ich verstehe, dass dies nicht funktioniert, weil es nichts Passieren der $clientId Parameter an die Funktion, aber das ist auch enthalten in das $tn[] Array, so muss es eine Möglichkeit geben, dass ich die $clientId aus dem Array $tn[] nehmen und die Datenbank nach dem Vor- und Nachnamen abfragen kann, aber ich kann nicht herausfinden, wie.

+0

Können Sie 'getUsername ($ review ['clientId'])' 'nicht? – Barmar

+0

@Barmar Ich versuchte das und PHP mochte nicht das [] innerhalb der Funktion Klammer –

+0

Es gibt kein Problem mit Array-Zugriffen in Funktionsargumente, es ist die ganze Zeit getan. Du musst etwas falsch gemacht haben. – Barmar

Antwort

1

Sie können die Tabelle clients der Tabelle reviews in Ihrer ersten Abfrage beitreten.

SELECT * FROM reviews 
LEFT JOIN clients ON reviews.clientId = clients.clientId 
WHERE invId = :invId ORDER BY reviewId DESC 

Dann haben Sie Zugriff auf den Client-Namen Spalten haben, ohne dass eine zusätzliche Abfrage für jede Überprüfung Sie Anzeige auszuführen. So können Sie Ihren Code von getUsername in buildReviewDisplay verwenden.

foreach ($reviews as $review) { 
    $fletter = substr($review['clientFirstname'], 0, 1); 
    $scrnam = $fletter . $review['clientLastname']; 
    $rd .= "<h2>$scrnam</h2>"; 
    $rd .= "<h3>$review[reviewDate]</h3>"; 
    $rd .= "<p>$review[reviewText]</p>"; 
    $rd .= "<hr>"; 
} 
+0

) geschrieben Das funktioniert perfekt !! Danke! Ich schätze, ich bin ein wenig verschwommen bei Joins, also muss ich jetzt diese überprüfen! Besonders wenn links oder rechts mitmachen! –

+1

Gern geschehen, links oder rechts steht die "besitzende" Seite der Beziehung, in diesem Fall habe ich einen linken Join verwendet, so dass alle Bewertungen angezeigt würden, selbst wenn es welche gegeben hätte aus irgendeinem Grund kein passender Client. –

Verwandte Themen