Добавить данные в соответствующие записи в базе данных MySQL - PullRequest
1 голос
/ 17 ноября 2010

У меня есть форма отправки, которая отправляет данные в базу данных.Затем я вывожу эти данные из базы данных в HTML.Теперь я должен отправить еще один фрагмент данных через форму обратно в базу данных.Я не могу понять, как сделать новые данные соответствующими существующим записям.

Это мой выходной код (данные из базы данных в HTML с новой формой для дополнительных данных):

<html>
<body>
<?php

mysql_connect(localhost,root,root);
@mysql_select_db(test) or die( "Unable to select database");
$query="SELECT * FROM submission";
$result=mysql_query($query);

$num=mysql_numrows($result);

mysql_close();
?>
<table border="0" cellspacing="2" cellpadding="2">
<tr>
<th><font face="Arial, Helvetica, sans-serif">Read By</font></th>
<th><font face="Arial, Helvetica, sans-serif">Date/Time</font></th>
<th><font face="Arial, Helvetica, sans-serif">URL</font></th>
<th><font face="Arial, Helvetica, sans-serif">Uploaded File</font></th>
<th><font face="Arial, Helvetica, sans-serif">Email / Twitter</font></th>
<th><font face="Arial, Helvetica, sans-serif"></font></th>
</tr>

<?php
$i=0;
while ($i < $num) {

$Date=mysql_result($result,$i,"Date");
$url=mysql_result($result,$i,"url");
$uploadedfile=mysql_result($result,$i,"uploadedfile");
$contact=mysql_result($result,$i,"contact");
?>

<tr><form name="reader" action="reader.php" method="POST">
<td><font face="Arial, Helvetica, sans-serif"><input type="checkbox" name="reader" value="Max"> Max <input type="checkbox" name="reader" value="Aaron"> Aaron</font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $Date; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $url; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $uploadedfile; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $contact; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><input type="submit" value="Submit"></font></td>
</form>
</tr>

<?php
$i++;
}
?>
</body>
</html>

И это код reader.php:

    <?php

$error=0;

$con = mysql_connect('localhost', 'root', 'root'); //Replace with your actual MySQL DB Username and Password
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("longform", $con); //Replace with your MySQL DB Name
$reader=mysql_real_escape_string($_POST['reader']); //This value has to be the same as in the HTML form file
$sql="INSERT INTO submission (reader) VALUES ('$reader')"; /*collect is the name of the MySQL table where the form data will be saved.name, email and comments are the respective table fields*/

if (!mysql_query($sql,$con)) {
 die('Error: ' . mysql_error());
}

$message="Done!";
mysql_close($con); 


?>

Прямо сейчас, reader.php добавляет новую запись базы данных с содержимым формы, мне нужно добавить эти данные в существующую соответствующую запись.

РЕДАКТИРОВАТЬ: Итак, я только что понял, что мне нужно использовать UPDATE вместо INSERT, но я понятия не имею, как ...

РЕДАКТИРОВАТЬ: я думаю, что я добился некоторого прогресса вправильное направление, благодаря комментаторам.Новый код все еще не работает, хотя:

Вывод + Форма:

<html>
<body>
<?php

$id=$_GET['id'];

mysql_connect(localhost,root,root);
@mysql_select_db(longform) or die( "Unable to select database");
$query="SELECT * FROM submission";
$result=mysql_query($query);

$num=mysql_numrows($result);

mysql_close();
?>
<table border="0" cellspacing="2" cellpadding="2">
<tr>
<th><font face="Arial, Helvetica, sans-serif">Read By</font></th>
<th><font face="Arial, Helvetica, sans-serif">Date/Time</font></th>
<th><font face="Arial, Helvetica, sans-serif">URL</font></th>
<th><font face="Arial, Helvetica, sans-serif">Uploaded File</font></th>
<th><font face="Arial, Helvetica, sans-serif">Email / Twitter</font></th>
<th><font face="Arial, Helvetica, sans-serif"></font></th>
</tr>

<?php
$i=0;
while ($i < $num) {

$Date=mysql_result($result,$i,"Date");
$url=mysql_result($result,$i,"url");
$uploadedfile=mysql_result($result,$i,"uploadedfile");
$contact=mysql_result($result,$i,"contact");
?>

<tr><form name="reader" action="reader.php" method="POST">
<td style="display:none;"><input type="hidden" name="unique_id" value="<? echo $id; ?>"></td>
<td><font face="Arial, Helvetica, sans-serif"><input type="checkbox" name="reader" value="Max"> Max <input type="checkbox" name="reader" value="Aaron"> Aaron</font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $Date; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $url; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $uploadedfile; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $contact; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><input type="submit" value="Submit"></font></td>
</form>
</tr>

<?php
$i++;
}
?>
</body>
</html>

reader.php:

<?php

$error=0;

$con = mysql_connect('localhost', 'root', 'root'); //Replace with your actual MySQL DB Username and Password
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("longform", $con); //Replace with your MySQL DB Name

$reader=mysql_real_escape_string($_POST['reader']); //This value has to be the same as in the HTML form file

$query="UPDATE submission SET reader='$reader' WHERE id='$unique_id'";
mysql_query($query);
echo "Record Updated";
mysql_close();

?>

Любая помощь с этим полностью потрясет мой мир.

РЕДАКТИРОВАТЬ: Это работает!Я просто хотел опубликовать здесь функциональный код на случай, если кому-то еще это понадобится:

output.php

<html>
<body>
<?php

mysql_connect(localhost,root,root);
@mysql_select_db(test) or die( "Unable to select database");
$query="SELECT * FROM table WHERE field = '';
";
$result=mysql_query($query);

$num=mysql_numrows($result);

mysql_close();
?>
<table border="0" cellspacing="2" cellpadding="2">
<tr>
<th></th>
<th><font face="Arial, Helvetica, sans-serif">Read By</font></th>
<th><font face="Arial, Helvetica, sans-serif">Date/Time</font></th>
<th><font face="Arial, Helvetica, sans-serif">URL</font></th>
<th><font face="Arial, Helvetica, sans-serif">Uploaded File</font></th>
<th><font face="Arial, Helvetica, sans-serif">Email / Twitter</font></th>
<th><font face="Arial, Helvetica, sans-serif"></font></th>
</tr>

<?php
$i=0;
while ($i < $num) {
$id=mysql_result($result,$i,"id");
$date=mysql_result($result,$i,"date");
$url=mysql_result($result,$i,"url");
$uploadedfile=mysql_result($result,$i,"uploadedfile");
$contact=mysql_result($result,$i,"contact");
?>

<tr><form action="reader.php" method="POST">
<td><input type="hidden" name="id" value="<? echo $id; ?>"></td>
<td><font face="Arial, Helvetica, sans-serif"><input type="checkbox" name="reader" value="Max"> Max <input type="checkbox" name="reader" value="Aaron"> Aaron</font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $date; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $url; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $uploadedfile; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><?php echo $contact; ?></font></td>
<td><font face="Arial, Helvetica, sans-serif"><input type="submit" value="Submit"></font></td>
</form>
</tr>

<?php
$i++;
}
?>
</body>
</html>

reader.php

<?php

$error=0;

$con = mysql_connect('localhost', 'root', 'root'); //Replace with your actual MySQL DB Username and Password
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("longform", $con); //Replace with your MySQL DB Name

$reader=mysql_real_escape_string($_POST['reader']); //This value has to be the same as in the HTML form file
$id=mysql_real_escape_string($_POST['id']);
$query="UPDATE submission SET reader='$reader' WHERE id='$id'";
mysql_query($query);
echo "Record Updated";
mysql_close();
?>

Ответы [ 7 ]

1 голос
/ 17 ноября 2010

В вашей форме вы, вероятно, захотите добавить скрытое поле, которое является идентификатором для обновления. Таким образом, для каждой строки, которую вы извлекаете из базы данных, вы должны отобразить поля, которые вы хотите, чтобы они могли редактировать, а затем включить в форму type = hidden поля, которые включают идентификатор объекта или другую идентифицирующую информацию. Например:

<form>
    <input type="text" name="full_name" value="<?php echo $full_name ?>" />
    <input type="hidden" name="id" value="<?php echo $id ?>" />
</form>
0 голосов
/ 17 ноября 2010

Вот тут у вас, похоже, проблемы: $sql="INSERT INTO submission (reader) VALUES ('$reader')";<br>

Попробуйте заменить это на: if($_POST['unique_id']){ $sql = "UPDATE submission (reader) VALUES ($reader) WHERE id = $unique_id LIMIT 1;"; }else{ $sql="INSERT INTO submission (reader) VALUES ('$reader')"; }<br>

0 голосов
/ 17 ноября 2010

Привет, Меган, зод правильный. Во-первых, вам нужно передать идентификатор для представления таблицы. Затем вам нужно проверить, существует ли запись. Вы можете сделать это двумя способами:

SELECT COUNT(*) as total FROM submission WHERE ID = $id

Если всего> 0, значит, вам нужно обновить; в противном случае вам нужно вставить запись.

Если вы используете MySQL (как показывает код). Вы также можете использовать «ON DUPLICATE KEY UPDATE»

INSERT INTO submission (id, Date,url,uploadedfile,contact) VALUES (1,'2010-12-31','www.google.com', 'Megan')
 ON DUPLICATE KEY UPDATE Date = now();

Это удобный инструмент, но вы должны проверить, относится ли он к вам. Вы можете получить больше информации об этой функции на следующем сайте: http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

0 голосов
/ 17 ноября 2010

Расширяя ответ zod, каждая запись в базе данных должна иметь уникальный идентификатор, который zod ссылается на id.

 id INT NOT NULL AUTO_INCREMENT, 
 PRIMARY KEY(id),

Теперь вы можете ссылаться на каждую запись по ее идентификатору и при «добавлении [ing] th [e] данных к существующей соответствующей записи».Вы можете сказать

 UPDATE .. FROM ... WHERE id = '$id'
0 голосов
/ 17 ноября 2010

Краткий ответ: Вам необходимо реорганизовать форму.

Менее краткий ответ: ваша страница способна показывать существующие записи и создавать новые. Что не делает, так это предоставьте возможность редактировать существующие (именно это вы и хотите сделать).

И форма редактирования, и новая форма почти идентичны: главное отличие заключается в том, что форма должна предоставить текущий идентификатор редактируемой записи. Страница отправки может затем использовать это, чтобы выяснить, нужно ли создать оператор INSERT или оператор UPDATE.

Рендеринг формы для редактирования также должен быть сделан. В URL-адресе должен быть указан способ указания какой строки, обычно по идентификатору, которую страница может использовать, чтобы получить только эту строку из базы данных для предварительного заполнения отредактированных полей.

(В долгосрочной перспективе вы также должны либо найти платформу, либо создать собственную. Это позволит вам изолировать вызовы SQL от генерации страниц и обработки данных.)

0 голосов
/ 17 ноября 2010
//Assuming - parameters ready, connection establish and $connString set
$sql1 = "SELECT * FROM submissions";
$res = mysql_query($sql, $connString);

//loop like you did, but check out foreach loops, mysql_fetch_assoc, alternative forms

    $id=mysql_result($result,$i,"id");  //similarly for other fields
    //HTML form, elements, submit button as necessary for elements in $res
    echo "<input type='hidden' name='submission_row_id' id='prev_insert_id_".$i."' value='$prevId' />"; 
       //within loop and form.  HTML with php tag for variable is fine too, im just fairly unfamiliar

//end loop

reader.php - оставьте большую часть своих

$reader=mysql_real_escape_string($_POST['reader']); 
$id = $_POST['submission_row_id'];
$sql2="INSERT INTO submission (id, reader) VALUES ($id,'$reader')";
$sql2success = mysql_query($sql2, $connString);
$outmessage = $sql2success ? 
              "Successful -  table1 row $prevId updated" :
               "Failure on update - $sql2"

echo $outmessage; //among other things
0 голосов
/ 17 ноября 2010

получить идентификатор существующей строки, которую вы хотите вставить.

На самом деле это не вставка.Его обновление.

Для этого необходимо выполнить запрос на обновление.

UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value

выполнить проверку состояния в php.

if(id exist)
run update
else
run insert

http://www.w3schools.com/php/php_mysql_update.asp

http://www.weberdev.com/get_example-4392.html

разберитесь в примерах по ссылке выше и попробуйте реализовать ее в своем скрипте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...