2015-11-14 3 views
-1

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

<p>Select which row to <span class="del">DELETE</span> by selecting a Row from the dropdown and verifying by typing in the city.</p> 
<br> 
<form method="POST" action"<?php echo $_SERVER['PHP_SELF']; ?>"> 
<select> 
    <option value=""></option> 
    <option value="teamnameD">Team Name</option> 
    <option value="cityD">City</option> 
    <option value="bestplayerD">Best Player</option> 
    <option value="yearformedD">Year Formed</option> 
    <option value="websiteD">Website</option> 
</select> 
<br><br> 
Verify <span class="del">DELETE</span> by Typing in Name of city&nbsp 
<input type="text" name="cityD1"> 
<br><br> 
    <input class="styled-button" type="submit" name="selectList" value="Submit"><br><br> 
</form> 
<?php 

if (isset($_POST['selectList'])){ 
} 

if (isset($_POST['teamnameD'])) { 
    teamnameD(); 
} 

function teamnameD() { 




$servername = "localhost:3306"; 
$username = ""; 
$password = ""; 
$dbname = ""; 

    $conn = new mysqli($servername, $username, $password, $dbname); 

    if ($conn->connect_error) { 
     echo "Cannot Connect to database "; 
    } 

    $stmt = $conn->prepare ("DELETE FROM Teams WHERE $selectName LIKE $selectCity"); 

    $selectName = $_POST['teamnameD']; 
    $selectCity = $_POST['cityD1']; 
    $stmt->execute(); 

    if ($conn->query($sql) === TRUE) { 
    echo "Record deleted successfully"; 
    } else { 
     echo "Error deleting record: " . $conn->error; 
    } 

    $conn->close(); 


} 
+0

Какая ошибка? – Jah

ответ

0
$stmt = $conn->prepare ("DELETE FROM Teams WHERE $selectName LIKE $selectCity"); 

    $selectName = $_POST['teamnameD']; 
    $selectCity = $_POST['cityD1']; 

должно быть, как это

$selectName = $_POST['teamnameD']; 
    $selectCity = $_POST['cityD1']; 
    $stmt = $conn->prepare ("DELETE FROM Teams WHERE $selectName LIKE $selectCity"); 
0

Есть несколько проблем. В элементе select не было имени, поэтому в нижнем я установил его в поле fieldName. Я изменил чек, если отправил условие, чтобы проверить значение кнопки отправки.

Затем вы должны привязать параметры к подготовленному запросу и затем выполнить. В приведенном ниже коде я также добавил проверку ошибок (простое эхо и выход с ошибкой).

<p>Select which row to <span class="del">DELETE</span> by selecting a Row from the dropdown and verifying by typing in the city.</p> 
<br> 
<form method="POST" action"<?php echo $_SERVER['PHP_SELF']; ?>"> 
<select name="fieldName"> 
    <option value=""></option> 
    <option value="teamnameD">Team Name</option> 
    <option value="cityD">City</option> 
    <option value="bestplayerD">Best Player</option> 
    <option value="yearformedD">Year Formed</option> 
    <option value="websiteD">Website</option> 
</select> 
<br><br> 
Verify <span class="del">DELETE</span> by Typing in Name of city&nbsp; 
<input type="text" name="cityD1"> 
<br><br> 
    <input class="styled-button" type="submit" name="selectList" value="Submit"><br><br> 
</form> 
<?php 
if (isset($_POST['selectList'])){ 
    teamnameD(); 
} 
function teamnameD() { 
    // check for a selection 
    if (empty($_POST['fieldName']) || empty($_POST['cityD1'])) { 
     echo 'Please select a row and city'; 
     exit(); 
    } 
    // database config 
    $servername = "localhost:3306"; 
    $username = ""; 
    $password = ""; 
    $dbname = ""; 
    // connect to the database 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    // check for connection error 
    if ($conn->connect_error) { 
     echo "Cannot Connect to database "; 
     exit(); 
    } 
    // prepare the query 
    if (!($stmt = $conn->prepare("DELETE FROM Teams WHERE ? = ?"))) { 
     echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
     exit(); 
    } 
    // bind the parameters 
    if (!$stmt->bind_param("ss", $_POST['fieldName'], $_POST['cityD1'])) { 
     echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error; 
     exit(); 
    } 
    // execute the query 
    if (!$stmt->execute()) { 
     echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; 
     exit(); 
    } else { 
     echo "Record deleted successfully"; 
    } 
    $conn->close(); 
} 
?> 
2

Код не будет вводить функцию должным образом.

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

<select> 

в

<select name="foo"> 

затем изменить

if (isset($_POST['teamnameD'])) { 
    teamnameD(); 
} 

в

if (isset($_POST['foo']) && $_POST['foo'] == 'teamnameD') { 
    teamnameD(); 
} 

У вас также есть проблемы внутри функции.

Вы используете $selectName и $selectCity перед объявлением. Попробуйте разместить объявление

$selectName = $_POST['foo']; //notice the change here! 
$selectCity = $_POST['cityD1']; 

на место до этой линии, где вы использовали их

$stmt = $conn->prepare ("DELETE FROM Teams WHERE $selectName LIKE $selectCity"); 

также, попробуйте изменить

$stmt = $conn->prepare ("DELETE FROM Teams WHERE $selectName LIKE $selectCity"); 

в

$sql = "DELETE FROM Teams WHERE $selectName LIKE $selectCity"; 

затем удалите эту строку

$stmt->execute(); 

не забывайте, что $selectName и $selectCity все еще должны получить тир значения перед «$ SQL» делает!

+0

Спасибо, я внес эти изменения, но не могу заставить его работать. Может ли быть проблема с моей записью sql? – Wil

+0

Мой плохой, исправленный мой ответ, пожалуйста, прочитайте его с самого начала и обратите внимание на изменения, которые я сделал, @Wil – jNull

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