2016-01-29 2 views
-1

Я пытаюсь использовать мою кнопку удаления, которая подключена к отдельному файлу, который удаляет данные в моей таблице в базе данных.Не может показаться, что не хватает до удаления

Я был достаточно успешным, чтобы разместить кнопку на каждой строке данных в то время как они отображаются, но я не могу получить его, чтобы удалить строку, как я получаю сообщение об ошибке:

DELETE FROM users WHERE id = 
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 

Я считаю, что это что-то очень маленькое, может быть? Но я просто не могу понять, что.

admin.php

<?php 
$servername = "localhost"; 
$username = "root"; 
$pass = "root"; 
$dbname = "tutor_database"; 

// Create connection 
$conn = new mysqli($servername, $username, $pass, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT id, FirstName, LastName, Role, Email, Username FROM users"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    echo "<table><tr><th>ID</th><th>First Name</th><th>Last Name</th><th>Role</th><th>Email</th><th>Username</th><th>Delete</th></tr>"; 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "<tr><td>".$row["id"]."</td><td>".$row["FirstName"]."</td><td>".$row["LastName"]. 
     "</td><td>".$row["Role"]."</td><td>".$row["Email"]."</td><td>".$row["Username"]."</td></tr>"; 
?> 
     <td> 
     <form method="get" action="delete.php"> 
      <input type="hidden" name="rowid" value="<?php echo $row['id']; ?>"> 
      <input class="btn-default" type="submit" name="delete" value="Delete"> 
     </form> 
    </td> 
<?php 
} 
    echo "</table>"; 
} else { 
    echo "0 results"; 
} 
$conn->close(); 
?> 

delete.php

<?php 
$servername = 'localhost'; 
$username = 'root'; 
$pass = 'root'; 
$database = 'tutor_database'; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $pass); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

//obtain the rowid from $_GET 
if(isset($_GET['id'])){ 
    $id = ($_GET['rowid']); 
} 

    //sql to delete record. 
    $sql = "DELETE FROM users WHERE id = ". $id; 

    $conn->exec($sql); 
    echo "Record deleted!"; 
    require 'adminPage.php'; 

} catch(PDOException $e) { 
    echo $sql . "<br>" . $e->getMessage(); 
} 
$conn = null; 



?> 

бы оценить некоторые новые пары глаз на это.

спасибо.

+1

sidenote: можете ли вы рассказать нам, почему вы используете mysqli_ в одном коде, а затем переходите к PDO в другом? –

+0

как это заполняется? '$ _GET ['id']' - http://php.net/manual/en/function.error-reporting.php –

+0

Я пробовал подход PDO к отображению данных, но не мог понять, как разместить рядом с ним, которая удалит каждую отображаемую запись. Поэтому я пошел так, как только почувствовал, что мне стало легче понять - все еще нова к этому. –

ответ

0
try { 
$conn = new PDO("mysql:host=$servername;dbname=$database", $username, $pass); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

//obtain the rowid from $_GET 
if(isset($_GET['id'])){ 
$id = ($_GET['rowid']); 
} 

//sql to delete record. 
$sql = "DELETE FROM users WHERE id = ". $id; 

$conn->exec($sql); 
echo "Record deleted!"; 
require 'adminPage.php'; 

} catch(PDOException $e) { 
echo $sql . "<br>" . $e->getMessage(); 
} 

$conn = null; 

Должно быть

//obtain the rowid from $_GET 
if(isset($_GET['rowid'])){ 
$id = ($_GET['rowid']); 

    try { 
    $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $pass); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    //sql to delete record. 
    $sql = "DELETE FROM users WHERE id = ". $id; 

    $conn->exec($sql); 
    echo "Record deleted!"; 
    require 'adminPage.php'; 

    } catch(PDOException $e) { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 
} else { 
    echo "error: no row id specified"; 
} 
$conn = null; 

Во-первых, ваша проверка находится внутри TRY/улова, который будет пытаться выполнить, даже если не указано ID; В основном это логический сбой. Проверьте значение и определите, присутствует ли он перед запуском запроса, так как он стоит, вы проверяете значение, а затем пытаетесь выполнить запрос, независимо от того, присутствует ли оно. Во-вторых, вы используете if (isset($_GET['id'])) вместо if (isset($_GET['rowid']))

+0

Спасибо, объясняя это мне. Я обязательно попробую это. –

+0

В принципе, ваш код будет запускать SQL-запрос: существует ли '$ _GET ['rowid']', который будет вызывать SQL-ошибку в любое время, когда он запущен; Вместо этого, окружайте SQL-запрос проверяющим блоком if, чтобы он не запускался, когда '$ _GET ['rowid']' отсутствует и не будет вызывать ошибку SQL, вместо этого он скажет вам, что '$ _GET ['rowid'] 'нет – iamgory

+0

Спасибо за ваше объяснение и помощь, он сработал успешно. :) –

Смежные вопросы