2013-08-17 4 views
0

Я очень новичок в php и mysqli и нашел отличный учебник, но мне нужна помощь.показать отдельную запись на новой странице с отправкой идентификатора строки

я хотел строку быть связываемых и отправить его на другую страницу с именем single.php? ID = ROWID так будет показывать одну запись

это то, что я получил до сих пор.

<html> 
    <head> 
     <title>MySQLi Tutorial</title> 

    </head> 
<body> 

<?php 
//include database connection 
include 'db_connect.php'; 

$action = isset($_GET['action']) ? $_GET['action'] : ""; 

if($action=='delete'){ //if the user clicked ok, run our delete query 

     $query = "DELETE FROM users WHERE id = ".$mysqli->real_escape_string($_GET['id']).""; 
     if($mysqli->query($query)){ 
       echo "User was deleted."; 
     }else{ 
       echo "Database Error: Unable to delete record."; 
     } 

} 

$query = "select * from users"; 
$result = $mysqli->query($query); 

$num_results = $result->num_rows; 

echo "<div><a href='add.php'>Create New Record</a></div>"; 

if($num_results){ 

    echo "<table border='1'>";//start table 
     //creating our table heading 
     echo "<tr>"; 
       echo "<th><a href=\"single.php?id={$id}\">Firstname</></th>"; 
       echo "<th>Lastname</th>"; 
       echo "<th>Username</th>"; 
       echo "<th>Action</th>"; 
     echo "</tr>"; 

     //loop to show each records 
     while($row = $result->fetch_assoc()){ 
      //extract row 
      //this will make $row['firstname'] to 
      //just $firstname only 
      extract($row); 

      //creating new table row per record 
      echo "<tr>"; 
       echo "<td>{$firstname}</td>"; 
       echo "<td>{$lastname}</td>"; 
       echo "<td>{$username}</td>"; 
           echo "<td>"; 
             echo "<a href='edit.php?id={$id}'>Edit</a>"; 
             echo "/"; 
             echo "<a href='#' onclick='delete_user({$id});'>Delete</a>"; 
           echo "</td>"; 
      echo "</tr>"; 
     } 

     echo "</table>";//end table 

}else{ 
     //if table is empty 
     echo "No records found."; 
} 

//disconnect from database 
$result->free(); 
$mysqli->close(); 

?> 

<script type='text/javascript'> 

    function delete_user(id){ 
     //this script helps us to 

     var answer = confirm('Are you sure?'); 
     if (answer){ //if user clicked ok 
      //redirect to url with action as delete and id to the record to be deleted 
      window.location = 'index.php?action=delete&id=' + id; 
     } 
    } 
</script> 

</body> 
</html> 

Я прав, думая, что буду отправлять идентификаторы строк в URL-адресе?

echo "<th><a href=\"single.php?id={$id}\">Firstname</></th>"; 

, но у меня возникают проблемы с single.php, какой код мне нужно поставить, чтобы показать единственную запись?

я был на этом некоторое время и не получил не были близки, так что я удалил код и проглотил свою гордость искать помощь:/

заранее спасибо

+0

Вы можете использовать тот же код, который использовался для отображения нескольких записей, но вместо этого заменить запрос на что-то вроде «select * from users» где id = '". $ _ GET [' id ']."'; –

+0

что бы мне пришлось заменить? Я очень сожалею, что я новичок/noob, и нужен ли какой-либо код с добавлением? –

ответ

-1

в вашем single.php

$id=$_GET['id']; 
$query="select * from users where id='".$id."'"; 
+0

проголосовать для чего? –

+0

не подсказка, это было не мне –

+2

Для SQL-инъекции в первую очередь и с использованием $ _REQUEST также –

1

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

Несколько вещей, чтобы рассмотреть

  • Никогда использовать MySQLi как есть, но только в виде некой высшей библиотеки абстракции уровня.
  • Никогда не используйте 0: с помощью real_escape_string в коде приложения, но используйте только подготовленные инструкции.
  • Никогда Смешайте свой код базы данных с выходом HTML. Сначала получите данные, затем начните вывод.
  • Никогда использовать метод GET для изменения данных.

Здесь приведен пример, основанный на вышеуказанных принципах. Он делает все основные операции CRUD:

<? 
include 'safemysql.class.php'; // a library 
$db = new SafeMysql(); 
$table = "test"; 

if($_SERVER['REQUEST_METHOD']=='POST') { 
    if (isset($_POST['delete'])) { 
    $db->query("DELETE FROM ?n WHERE id=?i",$table,$_POST['delete']); 
    } elseif ($_POST['id']) { 
    $db->query("UPDATE ?n SET name=?s WHERE id=?i",$table,$_POST['name'],$_POST['id']); 
    } else { 
    $db->query("INSERT INTO ?n SET name=?s",$table,$_POST['name']); 
    } 
    header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']); 
    exit; 
} 
if (!isset($_GET['id'])) { 
    $LIST = $db->getAll("SELECT * FROM ?n",$table); 
    include 'list.php'; 
} else { 
    if ($_GET['id']) { 
    $row = $db->getRow("SELECT * FROM ?n WHERE id=?i", $table, $_GET['id']); 
    foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v); 
    } else { 
    $row['name']=''; 
    $row['id']=0; 
    } 
    include 'form.php'; 
} 

Он использует шаблоны для отображения данных:

list.php

<a href="?id=0">Add item</a> 
<? foreach ($LIST as $row): ?> 
<li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a> 
<? endforeach ?> 

и form.php

<form method="POST"> 
<input type="text" name="name" value="<?=$row['name']?>"><br> 
<input type="hidden" name="id" value="<?=$row['id']?>"> 
<input type="submit"><br> 
<a href="?">Return to the list</a> 
</form> 
<? if ($row['id']):?> 
<div align=right> 
<form method="POST"> 
<input type="hidden" name="delete" value="<?=$row['id']?>"> 
<input type="submit" value="Удалить"><br> 
</form> 
</div> 
<?endif?> 

здесь идет часть для отображения.

if ($_GET['id']) { 
    $row = $db->getRow("SELECT * FROM ?n WHERE id=?i", $table, $_GET['id']); 
    foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v); 
    } else { 
    $row['name']=''; 
    $row['id']=0; 
    } 
    include 'form.php'; 

, если вы не хотите, чтобы показать форму - создать еще один шаблон под названием single.php с любой разметки вы хотите

+0

+1. А также ** НИКОГДА ** использовать короткие теги, например ' Yang

0

Single.php

Я использую PDO, если вы хотите, чтобы вы могли сделать это и с MySQLi.

<?php 
    include("db_connect.php"); // database configuration file 
    if(isset($_GET['id']) 
    { 
     $id = (int) $_GET['id']; 
     $sql = "SELECT * FROM `users` WHERE id=?"; 
     $query = $conn->prepare($sql); // $conn is PDO object yours can be different 
     $query->bindValue(1,$id); 
     $query->execute(); 
     if($query){ 
      $row = $query->fetch(); // 
     }else{ 
      echo "Error with Database"; 
     } 
    }   
    else // Error for the Id selection 
    { 
     echo("ID is not selected"); 
    } 
?> 

Нет цикла while, потому что вы хотите всего 1 запись. переменная $ row предназначена только для теста, потому что я не знаю ваших полей в вашей базе данных

<table border="1"> 
    <tr> 
     <td>ID</td> 
     <td>Firstname</td> 
     <td>Lastname</td> 
    </tr> 
    <tr> 
     <td><?php echo $row['id]; ?></td> 
     <td><?php echo $row['firstname']; ?></td> 
     <td><?php echo $row['lastname']; ?></td> 
    </tr> 
</table>