2016-12-07 4 views
0

Итак, я новичок в php и с помощью mysql. В моей программе я попытался сделать простые функции редактирования, добавления и удаления. Ну, функции добавления и удаления работают, но что-то не так с редактированием ... Всякий раз, когда я иду на phpMyAdmin, чтобы проверить, есть ли изменения в базе данных, я не нашел ни одного ...
Я был бы очень благодарен, если бы кто-то мог вести меня в этой части ...Обновление данных, не работающих в Php и MySql

часть adminpanel.php:

if(array_key_exists('editshirt', $_POST)) 
{ 
    include 'editshirt.php'; 
    exit(); 
}if(array_key_exists('changeshirt', $_POST)) 
{ 
    if(!mysqli_query($dbconnect, 'update shirts set 
     shirtName="'.mysqli_real_escape_string($dbconnect, $_POST['shirtName']).'", 
     shirtDescription="'.mysqli_real_escape_string($dbconnect, $_POST['shirtDescription']).'", 
     shirtGender="'.mysqli_real_escape_string($dbconnect, $_POST['shirtGender']).'", 
     shirtColor="'.mysqli_real_escape_string($dbconnect, $_POST['shirtColor']).'", 
     shirtPrice="'.mysqli_real_escape_string($dbconnect, $_POST['shirtPrice']).'", 
     shirtPicture="'.mysqli_real_escape_string($dbconnect, $_POST['shirtPicture']).'", 
     where shirts.shirtId="'.mysqli_real_escape_string($dbconnect, $_POST['shirtId']).'')) 
     echo ' '; 
    exit(); 
} 

А вот мой editShirt.php

<?php 
$yas = mysqli_query($dbconnect, "select * from shirts where shirtId=".mysqli_real_escape_string($dbconnect, $_POST['shirtId'])); 
$roww = mysqli_fetch_array($yas); 

echo "<p>Edit Shirt:</p>"; 
echo "<form action='?' method='post'>"; 

/*echo "<label for='shirtName'>Shirt Name: </label> 
<input type='text' name='shirtName' value=".$roww['shirtName']."><br>";*/ 
echo "<label for='shirtName'>Shirt Name: </label> 
<textarea name='shirtName' style='resize:none'>".$roww['shirtName']."</textarea><br>"; 

echo "<label for='shirtDescription'>Description: </label> 
<textarea name='shirtDescription' rows='10' cols='30' style='resize:none'>".$roww['shirtDescription']."</textarea><br>"; 

echo "<label for='shirtGender'>Gender: </label> 
<input type='radio' name='shirtGender' value='0'"; 
if($roww['shirtGender']=='0') echo"checked='checked'"; 
    echo ">Male&nbsp&nbsp<input type='radio' name='shirtGender' value='0'"; 
if($roww['shirtGender']=='1') echo "checked='checked'"; 
    echo ">Female&nbsp&nbsp<input type='radio' name='shirtGender' value='1'"; 
if($roww['shirtGender']=='2') echo "checked='checked'"; 
    echo ">Unisex<br><br>"; 

echo "<label for='shirtColor'>Color: </label> 
<input type='radio' name='shirtColor' value='0'"; 
if($roww['shirtColor']=='0') echo "checked='checked'"; 
    echo ">Colored&nbsp&nbsp<input type='radio' name='shirtColor' value='1'"; 
if($roww['shirtColor']=='1') echo "checked='checked'"; 
    echo ">White&nbsp&nbsp<input type='radio' name='shirtColor' value='1'"; 
if($roww['shirtColor']=='2') echo "checked='checked'"; 
    echo ">Black<br><br>"; 

echo "<label for='shirtPrice'>Shirt Price: </label> 
<input type='text' name='shirtPrice' value=".$roww['shirtPrice']."><br>"; 

echo "<label for='shirtPicture'>Shirt Picture: </label> 
<input type='text' name='shirtPicture' value=".$roww['shirtPicture']."><br>"; 

echo "<input type='hidden' name='shirtId' value=".mysqli_real_escape_string($dbconnect, $_POST['shirtId']).">"; 

echo "<input type='submit' name='changeshirt' value='Update shirt'>"; 

echo "</form>";?> 
+2

Мой бог этот код невозможно прочитать. Но ваша вставка не будет работать, потому что вы используете двойные кавычки для строк внутри запроса. Вместо этого используйте одинарные кавычки. – Phiter

+0

У вас есть логика запроса обновления в adminpanel.php, где вы указали эту ссылку на файл в своей форме, что после отправки вашей формы ваш скрипт будет исполнять adminpanel.php? – Rupal

+0

и 'mysql_real_escape_string' не защитят от SQL-инъекций – Blueblazer172

ответ

1

Этот код написан в очень плохом состоянии, хотя я исправил код.

mysqli_query($dbconnect, "update shirts set 
    shirtName='".mysqli_real_escape_string($dbconnect, $_POST['shirtName'])."', 
    shirtDescription='".mysqli_real_escape_string($dbconnect, $_POST['shirtDescription'])."', 
    shirtGender='".mysqli_real_escape_string($dbconnect, $_POST['shirtGender'])."', 
    shirtColor='".mysqli_real_escape_string($dbconnect, $_POST['shirtColor'])."', 
    shirtPrice='".mysqli_real_escape_string($dbconnect, $_POST['shirtPrice'])."', 
    shirtPicture='".mysqli_real_escape_string($dbconnect, $_POST['shirtPicture'])."', 
    where shirts.shirtId='".mysqli_real_escape_string($dbconnect, $_POST['shirtId'])."'"); 

Надеюсь, это поможет.

0

Хотя ответ Маноя должен работать (проблема с цитированием), это еще не правильный способ решить проблему.

Ниже немного менее эффективны (но попытаться измерить разницу) однако (ИМХО) его намного более читаемым:

$d=array_map(array($dbconnect, 'real_escape_string'), $_POST); 
     // returns a numbered array 
$d=array_combine(array_keys($_POST), $d); 
     // restores the key names 
$upd="update shirts set 
    shirtName  ='$d[shirtName]', 
    shirtDescription='$d[shirtDescription]', 
    shirtGender  ='$d[shirtGender]', 
    shirtColor  ='$d[shirtColor]', 
    shirtPrice  ='$d[shirtPrice]', 
    shirtPicture ='$d[shirtPicture]', 
    where shirts.shirtId='$d[shirtId]'"; 
if (!mysqli_query($dbconnect, $upd) { 
     your_error_handler(mysqli_error($dbconnect) . "\nin\n" . $upd); 
     exit; 
} 

Здесь я устранил неоднократные призывы к mysqli_real_excape_string так что я могу отделить отладочные SQL от отладки PHP.

Но важные биты состоят в том, что расширенная генерация оператора sql хранится отдельно от условного вызова (и строка запроса сохраняется, если она нам понадобится впоследствии), а затем добавление вызова функции для сообщения о том, что произошло неправильно!

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

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