Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

Pobieranie wartości z bazy przy wykorzystaniu GET

PHP  Założony przez  Patryk Stefański.

Witam, jak coś przepraszam za złe nazewnictwo tematu, ale nie wiem jak to nazwać.

Stworzyłem sobie acp i tak dalej tralala, doszedłem do serwerów i dodawania ich do bazy. Usuwanie jest zrobione w całości i teraz czas przyszedł na edycje.
Samo aktualizowanie danych(UPDATE) działa jak należy. Ale mam problem z pobieraniem ich z bazy i wpisywaniu ich do input. Wykorzystuje GET, aby przechwycić id serwera do drugiego pliku php

O czym mówię ?
   

Możliwe, że po prostu coś namieszałem przy próbie pobrania z bazy, ale nie mogę jakoś tego rozwiązać. Trzymajcie cały kod z pliku delservers.php
<?php
session_start
();
ini_set('display_errors',0);

$a trim($_GET['a']);
$id trim($_GET['id']);




require_once (
dirname(__DIR__).'/inc/connect.php');
try
{
  $polaczenie = new mysqli($host$db_user$db_password$db_name);
  if ($polaczenie->connect_errno!=0)
  {
    throw new Exception(mysqli_connect_errno());
  }
  else
  {
    if ($a == 'del' and !empty($id))
    {
      $polaczenie -> query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
      $polaczenie -> query("SET CHARSET utf8");
      if ($polaczenie->query("DELETE FROM _servers WHERE server_id='$id'"))
      {
        $_SESSION['server_deleted']="Serwer został usunięty !";
        $ile_serwerow = @$polaczenie->query("SELECT * FROM _servers");
  $ile_serwerow mysqli_num_rows($ile_serwerow);
        $auto_inc $ile_serwerow 1;
        $polaczenie->query("ALTER TABLE _servers AUTO_INCREMENT = $auto_inc;");

        header('Location: servers.php');
      }
      else
      {
        throw new Exception($polaczenie->error);
      }
    }
    else if ($a == 'edit' and !empty($id))
    {
      if($polaczenie->query("SELECT * FROM _servers WHERE server_id='$id'"))
      {
        $old_server_assoc mysqli_fetch_all($polaczenieMYSQLI_ASSOC);

        ?>
        <!DOCTYPE HTML>
        <html lang="pl">
          <head>
          <meta charset="utf-8" />
          <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
          </head>
          <body>
          <form method="post">
          Nazwa: <br /> <input type="text" name="new_server_name" value="<?php
          
echo $old_server_assoc['server_name']?>"  />
              <em>Podaj nową nazwę serwera</em>
              <br />
          Adres IP: <br /> <input type="text" name="new_server_ip" value="<?php
          
echo $old_server_assoc['server_ip']?>" />
              <em>Podaj nowy adres IP</em>
              <br />
          Port: <br /> <input type="text" name="new_server_port" value="<?php
          
echo $old_server_assoc['server_port']?>" />
              <em>Podaj nowy port</em>
              <br />
              <div class="form-group">
        <label for="exampleFormControlSelect2">Podaj grę</label><br />
        <select name="new_server_type[]" class="form-control" id="exampleFormControlSelect2">
          <option value="cs16">Counter Strike 1.6</option>
          <option value="csgo">Counter Strike GO</option>
          <option value="ts3">TeamSpeak 3</option>
        </select>
      </div>
              <input type="submit" value="Edytuj" />
            </form>
            </body>
          </html>
        <?php
        $new_server_name 
$_POST['new_server_name'];
        $new_server_ip $_POST['new_server_ip'];
        $new_server_port $_POST['new_server_port'];
        $new_server_type $_POST['new_server_type'];
        $new_server_type implode($new_server_type);
        $wszystko_yep true;
        if ($new_server_name == "")
        {
          $_SESSION['en_server_name'] = "To pole nie może być puste";
          $wszystko_yep false;
        }
        if ($new_server_ip == "")
        {
          $_SESSION['en_server_ip'] = "To pole nie może być puste";
          $wszystko_yep false;
        }
        if ($new_server_port == "")
        {
          $_SESSION['en_server_port'] = "To pole nie może być puste";
          $wszystko_yep false;
        }
        if ($new_server_type == "cs16")
        {
          $new_server_type "cs";
        }
        else if ($new_server_type == "csgo")
        {
          $new_server_type "cs";
        }
        else if ($new_server_type == "ts3")
        {
          $new_server_type "ts3";
        }
        if ($wszystko_yep == true)
        {
          $polaczenie -> query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
          $polaczenie -> query("SET CHARSET utf8");
          if ($polaczenie->query("UPDATE _servers SET server_name='$new_server_name', server_ip='$new_server_ip', server_port='$new_server_port', server_type='$new_server_type' WHERE server_id='$id';"))
          {
            $_SESSION['server_edited'] = "Serwer został zeedytowany";
            header('Location: servers.php');
          }
          else
          {
            throw new Exception($polaczenie->error);
          }
        }
        $polaczenie->free_result();
      }
    }
  }
  $polaczenie->close();
}
catch(
Exception $e)
{
  echo '<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o rejestrację w innym terminie!</span>';
  echo '<br />Informacja developerska: '.$e;
}
?>
$id = trim($_GET['id']);
$polaczenie->query("DELETE FROM _servers WHERE server_id='$id'")
Nie rób tego w ten sposób bo ktoś Ci zrobi krzywdę. Nawet w panelu administratora który nie będzie dostępny dla innych lepiej poprawnie escapować dane, a powinieneś to robić z każdą daną jaką dostaniesz od użytkownika/przeglądarki. Powinieneś użyć tej funkcji http://php.net/manual/en/mysqli.real-escape-string.php

Używasz mysqli_fetch_all więc w rezultacie otrzymujesz arraya ze wszystkimi rekordami wyciągniętymi przez kwerendę. Pierwszy rekord powinien być nie pod $old_server_assoc['server_name'] a pod $old_server_assoc[0]['server_name'] Tutaj potrzebujesz tylko jednego wyniku więc użycie mysql_fetch_assoc powinno zadziałać. Jeżeli nie to po jego wywyłaniu pokaż
print_r($old_server_assoc); die();
Pobieranie wartości poprawione
if($polaczenie->query(
            
sprintf("SELECT * FROM users WHERE nick='%s'",
            
mysqli_real_escape_string($polaczenie$id)))) 

Ale dalej ten sam błąd. Po użyciu printf($old_server_assoc); die(); Wyświetla się pusta strona nic więcej.
Cały kod
<?php
session_start
();
ini_set('display_errors',0);

$a trim($_GET['a']);
$id trim($_GET['id']);





require_once (
dirname(__DIR__).'/inc/connect.php');
try
{
  
$polaczenie = new mysqli($host$db_user$db_password$db_name);
  if (
$polaczenie->connect_errno!=0)
  {
    throw new 
Exception(mysqli_connect_errno());
  }
  else
  {
    if (
$a == 'del' and !empty($id))
    {
      
$polaczenie -> query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
      
$polaczenie -> query("SET CHARSET utf8");
      if (
$polaczenie->query("DELETE FROM _servers WHERE server_id='$id'"))
      {
        
$_SESSION['server_deleted']="Serwer został usunięty !";
        
$ile_serwerow = @$polaczenie->query("SELECT * FROM _servers");
              
$ile_serwerow mysqli_num_rows($ile_serwerow);
        
$auto_inc $ile_serwerow 1;
        
$polaczenie->query("ALTER TABLE _servers AUTO_INCREMENT = $auto_inc;");

        
header('Location: servers.php');
      }
      else
      {
        throw new 
Exception($polaczenie->error);
      }
    }
    else if (
$a == 'edit' and !empty($id))
    {
      if(
$polaczenie->query(
            
sprintf("SELECT * FROM users WHERE nick='%s'",
            
mysqli_real_escape_string($polaczenie$id))))
      {
          
$old_server_assoc mysqli_fetch_assoc($polaczenie);
          
printf($old_server_assoc); die();
        
?>
        <!DOCTYPE HTML>
        <html lang="pl">
          <head>
              <meta charset="utf-8" />
              <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
          </head>
          <body>
              <form method="post">
                  Nazwa: <br /> <input type="text" name="new_server_name" value="<?php
                   
echo    $old_server_assoc['server_name'];?>"  />
              <em>Podaj nową nazwę serwera</em>
              <br />
                  Adres IP: <br /> <input type="text" name="new_server_ip" value="<?php
                   
echo    $old_server_assoc['server_ip'];?>" />
              <em>Podaj nowy adres IP</em>
              <br />
                  Port: <br /> <input type="text" name="new_server_port" value="<?php
                   
echo    $old_server_assoc['server_port'];?>" />
              <em>Podaj nowy port</em>
              <br />
              <div class="form-group">
                        <label for="exampleFormControlSelect2">Podaj grę</label><br />
                        <select name="new_server_type[]" class="form-control" id="exampleFormControlSelect2">
                          <option value="cs16">Counter Strike 1.6</option>
                          <option value="csgo">Counter Strike GO</option>
                          <option value="ts3">TeamSpeak 3</option>
                        </select>
                      </div>
              <input type="submit" value="Edytuj" />
            </form>
            </body>
          </html>
        <?php
        $new_server_name 
$_POST['new_server_name'];
        
$new_server_ip $_POST['new_server_ip'];
        
$new_server_port $_POST['new_server_port'];
        
$new_server_type $_POST['new_server_type'];
        
$new_server_type implode($new_server_type);
        
$wszystko_yep true;
        if (
$new_server_name == "")
        {
          
$_SESSION['en_server_name'] = "To pole nie może być puste";
          
$wszystko_yep false;
        }
        if (
$new_server_ip == "")
        {
          
$_SESSION['en_server_ip'] = "To pole nie może być puste";
          
$wszystko_yep false;
        }
        if (
$new_server_port == "")
        {
          
$_SESSION['en_server_port'] = "To pole nie może być puste";
          
$wszystko_yep false;
        }
        if (
$new_server_type == "cs16")
        {
          
$new_server_type "cs";
        }
        else if (
$new_server_type == "csgo")
        {
          
$new_server_type "cs";
        }
        else if (
$new_server_type == "ts3")
        {
          
$new_server_type "ts3";
        }
        if (
$wszystko_yep == true)
        {
          
$polaczenie -> query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
          
$polaczenie -> query("SET CHARSET utf8");
          if (
$polaczenie->query("UPDATE _servers SET server_name='$new_server_name', server_ip='$new_server_ip', server_port='$new_server_port', server_type='$new_server_type' WHERE server_id='$id';"))
          {
            
$_SESSION['server_edited'] = "Serwer został zeedytowany";
            
header('Location: servers.php');
          }
          else
          {
            throw new 
Exception($polaczenie->error);
          }
        }
        
$polaczenie->free_result();
      }
    }
  }
  
$polaczenie->close();
}
catch(
Exception $e)
{
  echo 
'<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o rejestrację w innym terminie!</span>';
  echo 
'<br />Informacja developerska: '.$e;
}
?>
Bo to miał być print_r, a nie printf
Dane przy aktualizacji serwerów też powinieneś wyescapować.
Też nic
   

Ale wszystkie dane czy tylko tak?
if ($polaczenie->querysprintf("UPDATE _servers SET server_name='$new_server_name', server_ip='$new_server_ip', server_port='$new_server_port', server_type='$new_server_type' WHERE server_id='%s'",mysqli_real_escape_string($polaczenie$id)))) 
Odblokuj wyświetlanie błędów dodaj na samym początku
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
(20.12.2018, 19:14)Patryk Stefański napisał(a): Ale wszystkie dane czy tylko tak?
Wszystkie, wszystkie.
Zapomniałem o tym <facepalm>
Error
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, object given in E:\xampp\htdocs\acp\delservers.php on line 49
Linia 49
$old_server_assoc mysqli_fetch_assoc($polaczenie); 


Nowe errory tamten naprawiłem

Notice: Undefined index: new_server_name in E:\xampp\htdocs\acp\delservers.php on line 84
Notice: Undefined index: new_server_ip in E:\xampp\htdocs\acp\delservers.php on line 85
Notice: Undefined index: new_server_port in E:\xampp\htdocs\acp\delservers.php on line 86
Notice: Undefined index: new_server_type in E:\xampp\htdocs\acp\delservers.php on line 87
Warning: implode(): Argument must be an array in E:\xampp\htdocs\acp\delservers.php on line 88

I kod
<?php
        $new_server_name 
$_POST['new_server_name'];
        
$new_server_ip $_POST['new_server_ip'];
        
$new_server_port $_POST['new_server_port'];
        
$new_server_type $_POST['new_server_type'];
        
$new_server_type implode($new_server_type);
        
$wszystko_yep true
zobacz tak, zamiast mysqli_fetch_assoc($polaczenie); $polaczenie->fetch_assoc();
Ten problem rozwiązałem tak
if($rezul $polaczenie->query(
            
sprintf("SELECT * FROM users WHERE nick='%s'",
            
mysqli_real_escape_string($polaczenie$id))))
      {
          
$old_server_assoc mysqli_fetch_assoc($rezul); 
No można i tak, jednak gdy korzystasz już z wersji obiektowej to lepiej robić wszystko w jednym stylu.
ERROR
Fatal error: Uncaught Error: Call to undefined method mysqli::fetch_assoc() in E:\xampp\htdocs\acp\delservers.php:49 Stack trace: #0 {main} thrown in E:\xampp\htdocs\acp\delservers.php on line 49
kod
if($polaczenie->query(
            
sprintf("SELECT * FROM users WHERE nick='%s'",
            
mysqli_real_escape_string($polaczenie$id))))
      {
          
$polaczenie->fetch_assoc($old_server_assoc); 

while($old_server_assoc =$polaczenie->fetch_assoc()) { 
Tak też nie działa ten sam error
zobacz
if($query = $polaczenie->query(
            sprintf("SELECT * FROM users WHERE nick='%s'",
            mysqli_real_escape_string($polaczenie, $id))))
      {
          $query->fetch_assoc();
Okej, działa po części.
   
Tylko po tekscie wnioskuję, że tablice są puste, bo nie ma nic w tablicy $old_server_assoc['server_name'] , a kiedy robię tak. to nic nie ma $old_server_assoc = $query->fetch_assoc();


Notice: Undefined index: new_server_name in E:\xampp\htdocs\acp\delservers.php on line 84

Notice: Undefined index: new_server_ip in E:\xampp\htdocs\acp\delservers.php on line 85

Notice: Undefined index: new_server_port in E:\xampp\htdocs\acp\delservers.php on line 86

Notice: Undefined index: new_server_type in E:\xampp\htdocs\acp\delservers.php on line 87

Warning: implode(): Argument must be an array in E:\xampp\htdocs\acp\delservers.php on line 88
Tylko te tablice są puste, to domyślam, że trzeba dać !isset() ??
$new_server_name $_POST['new_server_name'];
        $new_server_ip $_POST['new_server_ip'];
        $new_server_port $_POST['new_server_port'];
        $new_server_type $_POST['new_server_type'];
        $new_server_type implode($new_server_type); 
Zrób teraz tego print_ra na $old_server_assoc
KOD
if($query $polaczenie->query(
            
sprintf("SELECT * FROM users WHERE nick='%s'",
            
mysqli_real_escape_string($polaczenie$id))))
      {
          
$old_server_assoc $query->fetch_assoc();
          
print_r($old_server_assoc); die();
        
?>

Rezultat:
Pusta strona 0 błędów



Użytkownicy przeglądający ten wątek:

1 gości