Как я могу получить доступ к трем страницам просмотра с контроллером в PHP с codeIgniter? - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь создать веб-сайт, где пользователь будет вводить свое имя и фамилию, а база данных будет хранить данные.Кроме того, также будет опция, в которой пользователь может добавить данные или просмотреть все записи.Теперь моя проблема заключается в том, что всякий раз, когда я получаю доступ к http://localhost/assign9/, который является моим индексом, отображается только signup.php, после чего я не буду хранить данные после того, как я нажму на кнопку отправить.Как сделать код, как если бы 3 кода работали в последовательности?signContr.php (контроллер для assign9) класс signContr расширяет CI_Controller {

public function index(){
$this->load->view('signup');
}
public function insert(){
$this->load->view('saveinfo');
}
public function display(){
$this->load->view('displayinfo');
}
 public function _construct(){
      parent::_construct();
      $this->load->helper('url');
     }
}

signup.php

    <h1>Sign in</h1>
    <div class="container">
        <div class="sign-up-content">
            <form method="POST" class="signup-form">

                <div class="form-textbox">
                    <label for="fname">First Name:</label>
                    <input type="text" name="fname" id="fname" />
                </div>
                <div class="form-textbox">
                    <label for="lname">Last Name:</label>
                    <input type="text" name="lname" id="lname" />
                </div>

                <div class="form-textbox">
                    <input type="submit" name="submit" id="submit" class="submit" value="Create account" />
                </div>
            </form>
        </div>
    </div>
</div>

saveinfo.php

$fname = filter_input(INPUT_POST, 'fname');
$lname= filter_input(INPUT_POST, 'lname');
if (!empty($fname)||!empty($lname)){
$host = "localhost";
$dbUsername = "root";
$dbPassword = "";
$dbname = "information";
//create connection
$conn = new mysqli($host, $dbUsername, $dbPassword, $dbname);
if (mysqli_connect_error()) {
 die('Connect Error('. mysqli_connect_errno().')'. mysqli_connect_error());
} else {
  $sql = "INSERT Into name(fname,lname) values('$fname','$lname')";

 if ($conn->query($sql)) {
  echo '"New record inserted sucessfully"  <br>';

  echo '<a href=\assign9\application\views\displayinfo.php>'
  . 'Click here to view all usernames and passwords</a>';
 } else {
  echo "Error!";
 }

 $conn->close();
}
} else {
 echo "All fields are required";
 die();
}
?>
}

?>

displayinfo.php

<body>
<h1>Records</h1>
<br><br><br>
<table>
    <tr>

        <th>First Name</th>
        <th>Last Name</th>
    </tr>

    <?php

        $conn = mysqli_connect("localhost", "root","", "information");

        if($conn->connect_error){
            die("Connection failed: " .$conn->connect_error);
        }


        $result = mysqli_query($conn,"SELECT * FROM name");

        if($result->num_rows>0){
            while($row = mysqli_fetch_array($result)){
                echo
                "<tr><td>".  $row["fname"].
                "</td><td>". $row["lname"].
                "</td></tr>";
            }
            echo "</table>";

        } else{
                echo "0 result";
            }
        $conn->close();
    ?>
</table>
<br><br>
<input type="button" value="Add Data"                    
 onclick="window.location.href='http://localhost/assign9/'"/>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

ну, во-первых, мы должны понять, что такое MVC

  • Модель
  • Вид
  • Контроллер

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

поэтому здесь вам нужно определить несколько вещей.

как у codeigniter есть несколько доступных библиотек / помощников - база данных (обновление ваших учетных данных) - форма (загрузка на всех страницах, связанных с формой)

Автоматически ваша база данных доступна в вашей модели, поэтому нет необходимостиподключитесь снова.

, поэтому на первой странице localhost/assign9

в вашем routes.php вы должны определить маршрутизатор по умолчанию.который будет выглядеть так:

$ route ['default_controller'] = 'welcome / index';// здесь welcome это имя контроллера, а index это имя функции / метода

теперь в представлениях, создайте папку с именем контроллера welcome, а затем создайте файл index.php, который является вашим файлом представления, означает все ваши html или phpсвязанный код будет здесь.

Здесь вам нужно использовать Помощник Codeigniter FORM и создать форму, используя это.Нет необходимости определять форму вручную по одному элементу.Используйте форму, это будет легко и быстро.

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

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

У Codeigniter уже есть возможность использовать настройку модели и вставить ее, иначе она выдаст ошибку.

Так что используйте :)

0 голосов
/ 04 декабря 2018

Прежде чем заняться вашей проблемой, я действительно думаю, что вам будет полезно почитать немного о том, как работает MVC, и первые главы руководства пользователя CodeIgniter.Я избавлю вас от многих сомнений.

Сказав это, в вашем коде много проблем:

1.- методы конструктора гораздо лучше размещаются в верхней частиконтроллер (до любых пользовательских методов) 2.- ваш основной метод index() вызывает представления, в которых он не нуждается.Если вам нужно отобразить форму, просто вызовите $this->load-view('signup'); Представления должны иметь всю логику для хранения данных в базе данных (которая находится между контроллером и моделью)

3. - ваше представление регистрации создает форму, ноне определено никаких действий (<form method="post" action="controller/method"> было бы целесообразно) 4.- форма должна указывать на другой метод (не index()), который будет принимать пользовательский ввод, проверять его и обрабатывать, вставляя в базу данных,Например, если форма указывает на 'signcontr / process', вы должны определить:

public function process()
{
    // code that validates and processes user input
}

После того, как метод process() выполнит свою работу, вы можете вызвать представление подтверждения ($this->load->view('signup_confirmation'); дляпример), который отображает результат действия пользователя.

Многое можно написать о вашем коде.Я настоятельно рекомендую следовать руководству пользователя CI (оно содержит базовые примеры, которые позволят вам лучше понять, как CI может облегчить вашу жизнь) и соответствующим образом переписать ваш код

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