адресная книга в php - PullRequest
       11

адресная книга в php

0 голосов
/ 12 июня 2011

алло!

Я студент университета, и я хочу создать адресную книгу, используя php, где кто-то может просмотреть таблицу со всеми перечисленными контактными данными (например, имя, телефон, электронная почта), и будет возможность

- добавление нового контакта и

-editing удаление существующего контакта.

Я создал таблицу с соответствующими полями в моей базе данных, и я написал некоторый код (найденный в Интернете, но он не работал + 20 часов попытки заставить его работать самостоятельно ... без правильный результат), который показывает таблицу контактов, но:

Редактирование вообще не работает

Когда удаление работает, оно удаляет контакты от последнего к первому, а не строку, которую я выбираю

когда я ставлю код для удаления в комментариях, работает «Добавить»

когда код для удаления является функциональным, тогда «Добавить» фактически «удаляет» (если таблица не пуста, в этом случае она добавляет до ОДНОГО контакта).

Если кто-нибудь может дать мне несколько советов / предложений о том, что изменить, пожалуйста, сделайте!

Вот мой код:

<html>
<head>
    <title>Address Book</title>
</head>
<body> 
<?php

mysql_connect("localhost", "mydb", "mypassword") or die(mysql_error()); 
 mysql_select_db("mydb") or die(mysql_error()); 

 if (isset($_POST['mode']))
 {

 $mode = $_POST['mode'];
 $id = $_POST['id'];
 $name = $_POST['name'];
$phone = $_POST['phone'];
$email= $_POST['email'];

if ($mode=="add") 

{Print '<h2>Add Contact</h2> <p> 
<form action="" method=post> 
<table> 
<tr><td>Name:</td><td><input type="text" name="name" /></td></tr> 
<tr><td>Phone:</td><td><input type="text" name="phone" /></td></tr> 
<tr><td>Email:</td><td><input type="text" name="email" /></td></tr>
<tr><td colspan="2" align="center">
<input type="hidden" name="mode" value="added" />
<input type="submit" value="Submit" />
</td></tr> 
</table> </form> <p>'; }

if ($mode =="added") 
{mysql_query ("INSERT INTO address (name, phone, email) VALUES ( '$name', '$phone', '$email')"); 
echo "New contact added successfully!";}

if ($mode=="edit") 
{Print '<h2>Edit Contact</h2>  <p> 
<form action="" method=post> 
<table> 
<tr><td>Name:</td><td><input type="text" value="'; 
Print $name;  print '" name="name" /></td></tr> 
<tr><td>Phone:</td><td><input type="text" value="'; 
Print $phone; print '" name="phone" /></td></tr> 
<tr><td>Email:</td><td><input type="text" value="'; 
Print $email; print '" name="email" /></td></tr> 

<tr><td colspan="2" align="center"><input type="submit" /></td></tr> 
<input type=hidden name=mode value=edited> 
<input type=hidden name=id value='; Print $id; print '> 
</table> 
</form> <p>'; 
} 

if($mode=="edited") 
{mysql_query ("UPDATE address SET name = '$name', phone = '$phone', email = '$email' WHERE id = $id"); 
Print "Data Updated!<p>";}


if ($mode=="remove") 
{mysql_query ("DELETE FROM address where id=$id");
Print "Entry has been removed <p>";}

}




$data = mysql_query("SELECT * FROM address ORDER BY name ASC") 
 or die(mysql_error()); 
Print '<h2>Address Book</h2><p>
<form action="" method=post> 
<table border cellpadding=3>

<tr><th width=100>Name</th><th width=100>Phone</th><th width=200>Email</th><th width=100       colspan=2>Admin</th></tr>

<td colspan=5 align=right>
<input type ="hidden" name = "mode" value="add"/> <input type = "submit" value="Add Contact"/>';


while($info = mysql_fetch_array( $data )) 
{ 
Print "<tr><td>".$info['name'] . "</td> "; 
Print "<td>".$info['phone'] . "</td> "; 
Print "<td> <a href=mailto:".$info['email'] . ">" .$info['email'] . "</a></td>"; 

Print '<td>
<input type ="hidden" name="mode" vlaue="edit"/>
<input type ="submit" value="Edit"  
?id='. $info['id'] .'&name=' . $info['name'] .'
    &phone=' . $info ['phone'] .'&email=' . $info['email'] .'/></td>'; 


Print "<td>
<input type ='hidden' name='mode' value='remove'/>
<input type ='hidden' name='id' value = ".$info['id']." />
<input type ='submit' value = 'remove' /> </td></tr>  "; 

} 

Print "</table>";
Print " </form>"; 

 if(!$mode) echo "You may add, edit or delete a contact";
echo $mode;



 ?> 
</body> 
 </html>

1 Ответ

1 голос
/ 12 июня 2011

Причина, по которой вещи не ведут себя так, как вы ожидаете, заключается в том, что все ваши ряды помещаются в одну большую форму. Поэтому существует несколько скрытых полей <input type ='hidden' name='id' value = ".$info['id']." />, каждое из которых отправляется при нажатии любой из кнопок «Отправить». Но на самом деле значение, которое будет передано вашему сценарию, будет последним значением, то есть идентификатором последней строки.

Один из способов обойти это - использовать ссылку с идентификатором в качестве аргумента $ _GET в URL, например:

<a href="scriptname.php?mode=edit&id=".$info['id'].">Edit</a>

Затем вы можете изменить строку рядом с вершиной, чтобы использовать $mode = $_GET['mode']; и $id=$_GET['id']

Как только вы получите идентификатор в пути, вы можете отобразить форму с редактируемыми полями просто для этого конкретного идентификатора.

if ($mode == 'edit')
{
     $data = mysql_query("SELECT * FROM address WHERE id=$id");
     // then fetch the row data and populate the HTML form
}

Конечно, приведенный выше пример уязвим для SQL-инъекций http://php.net/manual/en/security.database.sql-injection.php, поэтому было бы разумнее использовать более надежный метод - см. Ссылку для получения совета!

...