Гаден бъг с id

teroristd

Registered
Здравейте, момчета и момичета :) помогнете да реша следния проблем.
Имам две таблици guestbook и guestbook_view. Направил съм прост админ панел, като админа на сайта да може да избере мнение от книгата за гости и да го сложи да се вижда. И точно тук е бъгът. По принцип няма проблем с добавянето но когато се даде бек на браузъра и цялата информация се изтрива от таблицата. За да ме разберете по добре в guestbook са всички мнения а в guestbook_view само това което трябва да се добави и го слагам там с гет ид. Ето кода, който използвам ако имате питанки кажете. Мерси предварително.

<?php

$id = $_GET['id'];

if($id){
$query = mysql_query("SELECT * FROM `guestbook` where id='$id' ");
$row = mysql_fetch_array($query);


echo "<p> <input type='text' name='name' value='$row[name]' style='width:200px;' > </p>";
echo "<p> <input type='text' name='email' value='$row' style='width:200px;' > </p>";
echo "<p> <textarea name='message' rows='4' cols='29' > $row[message] </textarea> </p>";



//ZA MNENIQTA
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$zaqvka_mnenie = mysql_query("UPDATE guestbook_view SET name='$name', email='$email', message='$message'");

}else{

$query = mysql_query("SELECT * FROM `guestbook_view`");
$row = mysql_fetch_array($query);

echo "<p> <input type='text' name='name' value='$row[name]' style='width:200px;' > </p>";
echo "<p> <input type='text' name='email' value='$row[email]' style='width:200px;' > </p>";
echo "<p> <textarea name='message' rows='4' cols='29' > $row[message] </textarea> </p>";

//ZA MNENIQTA
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$zaqvka_mnenie = mysql_query("UPDATE guestbook_view SET name='$name', email='$email', message='$message'");

}



?>
 
Еми като дадеш "back" на браузъра ти се изпълнява заявката UPDATE с празни $_POST полета предполагам.

Проверявай ги.

PHP:
if (!empty($_POST['name']) //...и другите

{
//тука заявката
}
else {

//съобщение за грешка/ редирект и т.н.

}
 
е да де то че се изпълнява така е ама как да предотвратя изтриването на вече взетата информация, понеже ид-то го взимам от друга страница където изкарвам всички мнения и чрез бутон от тип <a href='upload.php?id=$row[id]'>Постави мнинието</a> слагам мнението в ъплоад пхп и там вече като му дам субмит и то се слага ама ако влезнеш директно в ъплоад пхп и не дадеш субмит а бек и изчезва.
 
Пиши по разбрано, ако може!
Проверки! Дали е празно ID-то, да не може да се влиза директно в upload.php и т.н. Запазвай ID-то в сесия... начини колкото искаш.

Лек офтопик:

Или пускате прекалено малко код, или пускате по 1500 реда копи/пест от някоя готова система с въпроса: "помощкъдеегрешката".
То мързела страшна работа!
Като трябва да се свърши работа, ако трябва ще напишеш кода пак - ясно, и четливо без "Тука include това, там се влиза отнякъде си..."
Показваш каква ти е логиката, за да може да го разберат и други.
 
Извинявай Ромбец ако съм те обидил но нито ми е готова система нито ме мързи, пробвал съм доста преди да пиша за помощ, но явно не ми достигат знанията. Вариянта да не може да се влиза директно в ъплоад не ме урежда. Логиката ми е че мненията на потребителите може да са много а ще се вижда само едно от тях, което ще избере админа. За това съм ги направил на отделна страница с бутон добави към тях ( всичко за което пиша става въпрос за админ панела а не за самия сайт ). Кода който съм дал е точно този с който добавя мнението. Това с проверка дали е празно полето не става защото, когато влезеш в ъплоад то не е празно, става такова само ако дадеш бек от браузъра. Две таблици са защото едната съдържа всички мнения а другата само вече избраното.
Надявам се да съм бил изчерпателен но единственото което не мога да разбера е защо се получава така, и как да го предодвратя. Мерси.
 
По кода който съм дал, if($id){} се изпълнява ако все още не е избрано мнение или ако е избрано ново от страницата с мненията а else{} когато влезнеш направо в ъплоад демек точно той трябва да пази информацията и я пази освен ако не се даде бек на браузъра.
 
PHP:
<?php
header('Cache-Control: private');

$id = $_GET['id'];

if($id){
$query = mysql_query("SELECT * FROM `guestbook` where id='$id' ");
$row = mysql_fetch_array($query);


echo "<p> <input type='text' name='name' value='$row[name]' style='width:200px;' > </p>";
echo "<p> <input type='text' name='email' value='$row[email]' style='width:200px;' > </p>";
echo "<p> <textarea name='message' rows='4' cols='29' > $row[message] </textarea> </p>";



//ZA MNENIQTA
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];	
$zaqvka_mnenie = mysql_query("UPDATE guestbook_view SET name='$name', email='$email', message='$message'");

}else{

$query = mysql_query("SELECT * FROM `guestbook_view`");
$row = mysql_fetch_array($query);

echo "<p> <input type='text' name='name' value='$row[name]' style='width:200px;' > </p>";
echo "<p> <input type='text' name='email' value='$row[email]' style='width:200px;' > </p>";
echo "<p> <textarea name='message' rows='4' cols='29' > $row[message] </textarea> </p>";

//ZA MNENIQTA
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];	
$zaqvka_mnenie = mysql_query("UPDATE guestbook_view SET name='$name', email='$email', message='$message'");

}



?>
 
Не бе глупости, нито се обиждам нито нищо. Някак си неразбрано ми беше написаното. И аз се извинявам ако съм бил рязък, ама в някои теми искам да се включа,а като не достига информация откачам :)

Я кажи дали кода на @Evolution работи ли?

Това:

PHP:
header('Cache-Control: private');

... ли върши работата, защото аз си мислех съвсем друг подход... по сложен.
 
rombeca каза:
Не бе глупости, нито се обиждам нито нищо. Някак си неразбрано ми беше написаното. И аз се извинявам ако съм бил рязък, ама в някои теми искам да се включа,а като не достига информация откачам :)

Я кажи дали кода на @Evolution работи ли?

Това:

PHP:
header('Cache-Control: private');

... ли върши работата, защото аз си мислех съвсем друг подход... по сложен.
Няма да е друго, тей като това забранява на браузъра да хешира информацията която е пратил. Така браузъра забравя, че е натиснат бутона и като обнови му се обновява страница без да го пита или да добавя повторно мнението на потребителя.
 
teroristd каза:
:) не знам защо ама и с хедъра си е абсолютно същото
PHP:
<?php

$id = $_GET['id'];

if($id){
$query = mysql_query("SELECT * FROM `guestbook` where id='$id' ");
$row = mysql_fetch_array($query);


echo "<p> <input type='text' name='name' value='$row[name]' style='width:200px;' > </p>";
echo "<p> <input type='text' name='email' value='$row[email]' style='width:200px;' > </p>";
echo "<p> <textarea name='message' rows='4' cols='29' > $row[message] </textarea> </p>";



//ZA MNENIQTA
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];   
$zaqvka_mnenie = mysql_query("UPDATE guestbook_view SET name='$name', email='$email', message='$message'");

}else{

$query = mysql_query("SELECT * FROM `guestbook_view`");
$row = mysql_fetch_array($query);

echo "<p> <input type='text' name='name' value='$row[name]' style='width:200px;' > </p>";
echo "<p> <input type='text' name='email' value='$row[email]' style='width:200px;' > </p>";
echo "<p> <textarea name='message' rows='4' cols='29' > $row[message] </textarea> </p>";

//ZA MNENIQTA
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];   
$zaqvka_mnenie = mysql_query("UPDATE guestbook_view SET name='$name', email='$email', message='$message'");
header('Location: ' . $_SERVER['REQUEST_URI']);
exit;
}



?>
 
И така не става ама май разбрах от къде идва проблема. Значи в ъплоад добавям и други работи картинки, заглавия и т.н няма да пускам целия код че е много но съм го направил на секции демек ето как почва една голяма форма хтмл

<form action="upload.php" enctype="multipart/form-data" method="post">

и вътре пхп-та с код

<?php

ала бала
?>

и така до последното пхп което е за мненията

и затварям формата долу пак в хтмл формат

<input id="submit" type="submit" name="submit" value="Добави промените">

</form>

та не съм дал такъв тип проверка if(isset($_POST['submit'])){ на формата понеже ми е хтмл. Има ли някакъв начин въпреки че е разделено така да направя проверката
 
teroristd каза:
И така не става ама май разбрах от къде идва проблема. Значи в ъплоад добавям и други работи картинки, заглавия и т.н няма да пускам целия код че е много но съм го направил на секции демек ето как почва една голяма форма хтмл

<form action="upload.php" enctype="multipart/form-data" method="post">

и вътре пхп-та с код

<?php

ала бала
?>

и така до последното пхп което е за мненията

и затварям формата долу пак в хтмл формат

<input id="submit" type="submit" name="submit" value="Добави промените">

</form>

та не съм дал такъв тип проверка if(isset($_POST['submit'])){ на формата понеже ми е хтмл. Има ли някакъв начин въпреки че е разделено така да направя проверката
Пробвай като сложиш това:
PHP:
header('Cache-Control: private');
най-горе в файла на upload.php и кажи какъв е резултата?
 

Back
Горе