2016-05-05 2 views
0

Ich habe eine Seite, die Gigs aus der Datenbank zeigt. Erstes Laden zeigt nur den Titel jedes Eintrags und eine Schaltfläche zum Anzeigen der vollständigen Details und eine Schaltfläche zum Löschen (noch nicht verwendet)Weitergabe ID-Feld von einer foreach-Schleife in einem Formular

Ich habe Probleme bei der Weitergabe der ID-Wert für jeden Eintrag meiner foreach-Schleife. Es gibt immer die ID-Nummer des letzten Eintrags weiter, egal auf welchen ich klicke. So sehe ich immer die Details des zweiten Gigs, auch wenn ich auf den ersten klicke. (Ich habe gerade zwei Gigs in der Datenbank für jetzt) ​​

Irgendwelche Vorschläge, wie man die ID desjenigen weitergibt, auf den ich die SHOW-Taste anklicke?

Dies ist mein Code

require_once "gigPDO.php"; 


//Show button is pressed 

if (isset ($_POST ["show"])) { 
    $id = $_POST ["id"]; 
    //$id = 5; 

    try { 

    $dbase = new gigPDO(); 
    $result = $dbase->searchGig($id); 

    //print_r($result); 

    foreach($result as $gig){ 
     print("<p>Title: " . $gig->getTitle()); 
     print ("<br>Venue: " . $gig->getVenue()); 
     print ("<br>Date: " . $gig->getDate()); 
     print ("<br>Time: " . $gig->getTime()); 
     print ("<br>Country: " . $gig->getCountry()); 
     print ("<br>Address: " . $gig->getAddress()); 
     print ("<br>Postcode: " . $gig->getPostcode()); 
     print ("<br>City: " . $gig->getCity()); 
     print("<br>Description: " . $gig->getDescription() . "</p>"); 
     echo "<br />"; 

     unset($_POST ["show"]); 
     echo "<a href='searchGigs.php'>Back to list</a>"; 
     exit();     


    } 
    exit(); 


} catch (Exception $error) { 
    print("<p>Error: " . $error->getMessage()); 
    exit(); 
} 
    } 

//First load, shows all gigs 

try { 

    $dbase = new gigPDO(); 
    $result = $dbase->allGigs(); 


    foreach($result as $gig){ 
     print("<p>". $gig->getTitle(). "<p>"); 
     print ("<input type='hidden' name='id' value='".$gig->getId() ."'>"); 
     print('<input type="submit" name="show" class="next show-button" value="Show" />'); 
     print(' <input type="submit" name="delete" class="next show-button" value="Delete" />'); 
     echo "<br />"; 
     echo "<br />";     
    } 


    if ($dbase->getRows() == 0){ 
     print("There are no gigs in the database yet"); 

    }else{  
     print("<p>Total " . $dbase->getRows() . " gigs</p>"); 
     } 
} catch (Exception $error) { 
    print("<p>Error: " . $error->getMessage()); 

} 
+0

Ich habe vergessen, dies in meiner Antwort zu erwähnen, aber Sie werden auf das gleiche Problem stoßen, wenn Sie auf die Schaltfläche zum Löschen kommen. Hoffentlich habe ich es richtig erklärt. Bitte lassen Sie mich wissen, wenn ich etwas klären muss. –

+0

In diesem Q & A wird die Auswirkung mehrerer Eingaben mit demselben Namen erläutert: http://stackoverflow.com/questions/452066/html-form-with-multiple-hidden-control-elements-of-the-same-name –

+0

I bin mir nicht sicher, wie deine foreach-Schleife funktionieren soll, da du sie nach der ersten Iteration bereits verlässt - du hast 'exit()' ohne Bedingung drin! – CherryDT

Antwort

0

Wenn Sie einen button anstelle eines input type="submit" verwenden, dann können Sie die ID in die Taste, anstatt den versteckten Eingang einzubetten.

echo '<button type="submit" name="id" class="next show-button" value="'.$gig->getId().'" /> 
     Show 
     </button>'; 

Die Art und Weise Sie es zur Zeit tun konnte Arbeit, aber Sie würden um jeden Satz von Eingaben über einen separaten form Tag benötigen. Momentan, wenn Sie Ihr Formular absenden, werden alle diese versteckten Eingaben gesendet, und da sie denselben Namen haben, erhalten Sie den Wert des letzten. So wie ich es vorgeschlagen habe, wird nur der Wert der Schaltfläche, auf die Sie geklickt haben, übermittelt.

+0

Danke für die Antwort. Ich versuche es so zu machen, aber etwas stimmt nicht. Ich kann nicht richtig sehen, was falsch ist, aber ich setze die Linie so wie sie ist in meinem PHPdesigner, sie markiert sie rot, und ich kann nicht ganz herausfinden, wo das Problem liegt. Ich habe versucht, es ein wenig zu bearbeiten, es schien besser zu funktionieren, aber ich konnte nicht scheinen, dass die ID in den oberen Teil übertragen wurde, wo ich nur diesen einen Gig zeigen wollte. Ich denke, dass die von "Knopf" übertragenen Informationen anders arbeiten? – Boogiewoogie

+0

Sorry! Ich habe gerade einen Tippfehler behoben. Die von einer Taste übertragenen Informationen sollten gleich funktionieren. Sie sollten es von '$ _POST ['id']' bekommen können. Aber wenn Sie meinen Knopfvorschlag verwenden, haben Sie nicht mehr die Eingabe "show", also müssen Sie das 'if (isset ($ _POST [" show "])) {' part to 'ändern if (isset ($ _POST ["id"])) {'. –

+0

Wunderbar! Das hat es behoben. Einfach PHP etwas besser kennenlernen und PDO und all das. Es kann ein bisschen schwierig sein, einen Dreh zu bekommen. Aber Prost auf dich !!! – Boogiewoogie

Verwandte Themen