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.

Jeżeli kwerenda nic nie zwróciła to powinien być chociaż napis w stylu
Array ()
a nie pusta strona. W ogóle masz jakieś dane w bazie które może zwrócić ta kwerenda? sprawdzałeś ją w phpmyadmin?
Dane w bazie są, bo wykorzystuje je w innym pliku, gdzie wyświetlam graczy z serwera, ilość fragów czy czas online na serwerze.

Zauważyłem mały błąd w zapytanie SELECT
Było sprintf("SELECT * FROM users WHERE nick='%s'",, a powinno być sprintf("SELECT * FROM users WHERE server_id='%s'",
Po tej zmianie teraz wgl jest pusta strona. print_r dalej nic nie zwraca
Pokaż cały kod jaki teraz masz
Naprawione sprintf("SELECT * FROM _servers WHERE server_id='%d'", Tu był winowajca(wcześniej było sprintf("SELECT * FROM users WHERE server_id='%d'" ). Tak jest jak się kopiuje, a nie przepisuje :D
Jeszcze zamieniłem %s na %d to bo są integry, a nie stringi
<?php
session_start
();
#ini_set('display_errors',0);
ini_set('display_errors'1);
ini_set('display_startup_errors'1);
error_reporting(E_ALL);
$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(
$query $polaczenie->query(
            
sprintf("SELECT * FROM users WHERE server_id='%d'",
            
mysqli_real_escape_string($polaczenie$id))))
      {
          
$old_server_assoc $query->fetch_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(sprintf("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='%d'",mysqli_real_escape_string($polaczenie$id))))
          {
            
$_SESSION['server_edited'] = "Serwer został zeedytowany";
            
header('Location: servers.php');
          }
          else
          {
            throw new 
Exception($polaczenie->error);
          }
        }
        
$query->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;
}
?>
To jeszcze przy okazji dorzucę jeszcze jedną rzecz
$auto_inc = $ile_serwerow + 1;
        $polaczenie->query("ALTER TABLE _servers AUTO_INCREMENT = $auto_inc;");
Nigdy jeszcze nie spotkałem się z tym aby zmniejszać wartość inkrementacji po usunięciu rekordu. Po pierwsze po co to robić? Po drugie co się stanie kiedy będziesz miał 100 rekordów, ostatni będzie miał ID 100; następna wartość inkrementacji to 101. Ty po usunięciu rekordu zmieniasz wartość na 100. Przy wstawieniu następnego rekordu próbuje mu nadać klucz = 100, ale przecież taki już istnieje w bazie.
Pomyślałem, że będzie ładniej wyglądało, kiedy server_id będzie miał mniejsze wartości niż 50/60/1230
Testując to, nie miałem problemu, ale zaraz spróbuje to przetestować i edytuje post

Przy dodanych 6 rekordach, nie potrafię wywołać tego błędu.
Pierwszy server_id ma wartość 3, dodając następne dodaje 4,5,6,7,8,9. Kasując wszystkie prócz tego server_id = 3, dodając kolejny, znowu mam server_id = 4,5,6

To jest tylko do serwerów, więc myślę, że nie ma znaczenia jaki będzie server_id. Oczywiście, przy userach nie zrobię tego błędu i pozostawie AUTO_INCREMENT normalnie
Faktycznie taki problem nie występuje, myślałem że mysql jest trochę głupszy i da się ustawić początkową auto incrementację mniejszą niż największy aktualny klucz.

Jednak nadal nie używa się zmiany inkrementacji, z innych powodów. Id może być używany np. w relacjach z innymi tabelami, możesz sporo namieszać zmieniajac ID w jednej tabeli a zostawiając w drugiej. Przy przywróceniu z backupu możesz mieć problem itd. Ja bym nie szedł w stronę modyfikowania wartości auto incrementacji.
Chociaż raczej nie będę używał relacji pomiędzy różnymi tabelami to dziękuję za radę i z niej skorzystam :)



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

2 gości