2016-05-23 19 views
0

Ich habe meinen Code von Bullshit vereinfacht, damit wir das Problem leichter finden können.Wie bearbeiten Sie bestimmte Tabellendatensätze mit einem eigenen Admin-Panel?

Ich habe eine Tabelle mit Datensatz von einem db. Ich kann ein neues einfügen, ein existierendes löschen, aber irgendwie kann ich sie nicht ändern.

Wenn ich auf die Schaltfläche Bearbeiten klicke, wird die gute angezeigt, aber wenn ich sie bearbeite und auf die Schaltfläche Ändern klicke, ändert sich immer die letzte Zeile, unabhängig davon, ob ich versucht habe, sie zu ändern.

Sorry für mein Englisch, ich schreibe ein Beispiel:

Hund Katze Auto Stuhl

Wenn ich die Katze bearbeiten, ändert sich der Stuhl ... Sehr frustrierend: D

hier ist mein Code:

<table> 
<tr> 
    <th>ID</th> 
    <th>Title</th> 
    <th>Edit</th> 
    <th>Delete</th> 
</tr> 

<?php 
include("connect.php"); 

$get_cats = "SELECT * FROM categories"; 
$run_cats = mysqli_query($con, $get_cats); 

while ($row_cats = mysqli_fetch_array($run_cats)) { 
    $cat_id  = $row_cats['cat_id']; 
    $cat_title = $row_cats['cat_title']; 
?> 
    <tr> 
    <td><?php echo $cat_id; ?></td> 
    <td><?php echo $cat_title; ?></td> 
    <td><a href="index.php?manage_cats&edit_cat=<?php echo $cat_id; ?>">Edit</a></td> 
    <td><a href="index.php?manage_cats&delete_cat=<?php echo $cat_id; ?>">Delete</a></td> 
    </tr> 
<?php } ?> <!-- end while --> 

    <tr> 
    <td>Insert New Category</td> 
    <td colspan="2"><input type="text" name="insert_cat_title" /></td> 
    <td><input type="submit" name="insert_cat" value="Insert"></td> 
    </tr> 

    <?php 
    if(isset($_GET['edit_cat'])) { 
    $edit_id  = $_GET['edit_cat']; 
    $get_cat  = "SELECT * FROM categories WHERE cat_id = '$edit_id'"; 
    $run_cat_new = mysqli_query($con, $get_cat); 

    while ($row_cat = mysqli_fetch_array($run_cat_new)) { 
     $cat_id = $row_cat['cat_id']; 
     $cat_title = $row_cat['cat_title']; 
    ?> 
     <tr> 
     <td>Change Category Name</td> 
     <td colspan="2"><input type="text" name="update_cat_title" value="<?php echo $cat_title; ?>"/></td> 
     <td><input type="submit" name="update_cat" value="Change"></td> 
     </tr> 
    <?php } } ?> 

</table> 
</form> 

<?php 

// Insert Category 
if(isset($_POST['insert_cat'])) { 
$cat_title = $_POST['insert_cat_title']; 

if($cat_title == '') { 
    echo "<script>alert('Please insert Category Name')</script>"; 
    echo "<script>window.open('index.php?manage_cats', '_self')</script>"; 
} 
else { 
$insert_cat = "INSERT INTO categories (cat_title) VALUES ('$cat_title')"; 
$run_cat = mysqli_query($con, $insert_cat); 
echo "<script>window.open('index.php?manage_cats', '_self')</script>"; 
} 
} 

// Delete Category 
if(isset($_GET['delete_cat'])) { 
$delete_id = $_GET['delete_cat']; 
$delete_cat = "DELETE FROM categories WHERE cat_id = '$delete_id'"; 
$run_delete = mysqli_query($con, $delete_cat); 
echo "<script>window.open('index.php?manage_cats', '_self')</script>"; 
} 

// Edit Category 
if(isset($_POST['update_cat'])) { 
$cat_title_new = $_POST['update_cat_title']; 

if($cat_title == '') { 
    echo "<script>alert('Please insert Category Name')</script>"; 
    echo "<script>window.open('index.php?manage_cats&edit_cat', '_self')</script>"; 
} 
else { 
    $update_cat  = "UPDATE categories SET cat_title = '$cat_title_new' WHERE cat_id = '$cat_id'"; 
    $run_update  = mysqli_query($con, $update_cat); 
    echo "<script>window.open('index.php?manage_cats', '_self')</script>"; 
} 
} 
?> 
+0

Das Update läuft über AJAX oder Formular senden.Versuchen Sie, in Edit Block und Echo Update-Abfrage zu echo und sehen Sie die Ergebnisse. –

+0

Das letzte $ cat_id ist das Problem, aber ich weiß nicht, wie ich es korrigieren soll. Ich brauche die Variable edit_cat, die die spezifische ID speichert, aber damit bekomme ich Fehler. – DRYN

Antwort

0

verstecktes Feld hinzufügen mit

<input type="hidden" name="update_cat_id" value="<?php echo $cat_id; ?>"/>

nach

<input type="text" name="update_cat_title" value="<?php echo $cat_title; ?>"/>

und stellen Sie mit dem Zustand wie:

$cat_id = $_POST['update_cat_id']; 
$update_cat  = "UPDATE categories SET cat_title = '$cat_title_new' WHERE cat_id = '$cat_id'"; 
+0

Ich liebe dich so sehr jetzt – DRYN

0

Ihr Problem ist mit den Eingängen mit ein und demselben Namensattribut.

geben Ihnen einen Query-String wie

http.example.com/index.php?test=1 & Test = 2 & Test = 3 & Test = 4

in Ihrer URL, aber in PHP var_dump ($ _ GET) gibt Ihnen nur diese

array (1) {["test"] => strin g (1) "4"}

Sie überschreiben einfach den Wert von $ _GET ['test'] viermal und es nimmt den letzten Wert.

Mögliche sollution:

<form method="get"> 
    <input type="text" name="test[]" value="1" /> 
    <input type="text" name="test[]" value="2" /> 
    <input type="text" name="test[]" value="3" /> 
    <input type="text" name="test[]" value="4" /> 
    <input type="submit" /> 
</form> 

Dann var_dump ($ _ GET) gibt Ihnen diese:

array(1) { 
    ["test"]=> array(4) { 
    [0]=> string(1) "1" 
    [1]=> string(1) "2" 
    [2]=> string(1) "3" 
    [3]=> string(1) "4" 
} } 

schonendere Lösung ist es, die Kategorien wie normale Tabellenzellen drucken (ohne Eingänge) und mit jquery um den Zellinhalt in eine Eingabe bei einem Klick auf eine Schaltfläche, eine Verknüpfung usw. umzuwandeln

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td>Cell 1</td> 
 
    <td><a href="#">Edit</a> 
 
    </td> 
 
    <td>Cell 2</td> 
 
    <td><a href="#">Edit</a> 
 
    </td> 
 
    <td>Cell 3</td> 
 
    <td><a href="#">Edit</a> 
 
    </td> 
 
    <td>Cell 4</td> 
 
    <td><a href="#">Edit</a> 
 
    </td> 
 
    </tr> 
 
</table> 
 
<script> 
 
    $(document).ready(function() { 
 
    $("td a").click(function() { 
 
     var vvaall = $(this).parent("td").prev("td").html(); 
 
     $(this).parent("td").prev("td").empty().html('<input type="text" name="test" value="' + vvaall + '" /><input type="submit" />'); 
 
    }); 
 
    }); 
 
</script>

+0

Es scheint logisch, aber ich füge DynamicCaly ein:/ Wie auch immer wir es gelöst haben, aber danke trotzdem :) – DRYN