Проблем с извеждане от дб

pro12

Registered
Имам следния код.
PHP:
<?php 

$host="localhost"; 

$db_user="root"; 

$db_password="root";   

$database="soft";  

$conn = new mysqli('localhost', 'root', 'root', 'soft');  

// Check connection 

if ($conn->connect_error) { 

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

}  

echo $_COOKIE['member_id']; 

$sql = "SELECT `name`, `member_id` FROM `members` WHERE member_id = ".$_COOKIE['member_id'].""; 

                          $result = $conn->query($sql); 

                           

                          $row = $result->fetch_assoc(); { 

                           

                          while($row = $result->fetch_assoc()) { 

  echo"$row[name]"; 

   

  } 

                          } 

?>
Проблема е че не извежда потребителите от дб а в нея има три потребитела. Ако махна това
PHP:
 WHERE member_id = ".$_COOKIE['member_id']."
Извежда два потребителя. Как да направя проверка за грешка?
Ето снимка на структурата на дб.
8627096N.png

Бд е на един форум ако е от значение.
 
Каква точно проверка за грешка искаш да направиш, кое е грешното? Ако искаш да проверяваш дали има или няма cookie, просто сложи един IF:

Код:
$sql = "SELECT `name`, `member_id` FROM `members` ";
if(isset($_COOKIE['member_id'])){
     $sql .= "WHERE member_id = ".$_COOKIE['member_id'];
}
 
Сега видях - махни задължително следния код, който е преди while цикъла:

$row = $result->fetch_assoc();

Защото вътре в цикъла $row се overwrhite-ва, и ако върнатия ред е само един, то при повторното извикване на fetch_assoc(), $row ще ти е празен, затова без WHERE виждаш само двама, вместо трима. Първият ред никога не го четеш заради по-горното.

Успех. :)
 
В стрингове елементите на масивите се извикват без кавички:

PHP:
echo "Inside double quotes: $_COOKIE[dada]";

src: http://php.net/manual/en/language.types.string.php#example-93
 
mitkosoft Благодоря оправих проблема! Имам един въпрос, но да не правя др тема ще питам тук. Направих си една функция.
PHP:
<?php
function username(){
$query= "SELECT `name`, `id`
FROM `user`
WHERE id='$id'" ;
$result = mysqli_query($conn, $query);
$row=mysqli_fetch_array($result);
$name=$row['name'];
echo $name;
}
username();
?>
Мога ли да изведа инфото от функцията без да пиша това
PHP:
username();
? Примерно така.
PHP:
echo $name;
 
Ами да, има, с глобална променлива:

Код:
$username = '';

function getUserName($id) {
    global $username;
    $query = "SELECT `name`, `id` FROM `user` WHERE id = '".$id."'";
    $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
    if(mysqli_num_rows($result) > 0){
        $row = mysqli_fetch_array($result) or die(mysqli_error($conn));
        $username = $row['name'];
    }else{
        $username = 'No such user with given ID';
    }
}
getUserName(1);
echo $username;

Но така или иначе пак трябва да извикаш функцията някъде в кода, а и не е добра практика, защото винаги можеш да забравиш да присвоиш стойност на глобалната променлива като ти стане по-голям кода, по-добре е да използваш директно резултата от функцията (и то с return, не echo, не винаги ще ти се налага да изписваш резултата, а само да работиш с него като данни), т.е.:

Код:
function getUserName($id) {
    $query = "SELECT `name`, `id` FROM `user` WHERE id = '".$id."'";
    $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
    if(mysqli_num_rows($result) > 0){
        $row = mysqli_fetch_array($result) or die(mysqli_error($conn));
        $name = $row['name'];
    }else{
        $name = 'No such user with given ID';
    }
    return $name;
}

echo $username = getUserName(1);
 
SVTerziev каза:
Вместо глобална променлива, може да се подава като параметър на функцията.

Бидейки параметър на функция (без да е декларирана като глобална вътре в нея), ще си остане в локалния scope на функцията:
Код:
$user = 'Ivan';

function getName($user){
    $user = 'Pesho';
    echo $user;
}

getName($user);
echo $user;

//резултат:
Pesho
Ivan
 
В крайна сметка нали ще си ползва функцията за извеждане на имената. Не виждам смисъл да си правиш функция, ако няма да я ползваш.
 
SVTerziev каза:
В крайна сметка нали ще си ползва функцията за извеждане на имената. Не виждам смисъл да си правиш функция, ако няма да я ползваш.

Напълно съм съгласен, затова и дадох по-горе втори пример, който и според мен е по-правилен, без наличие на globals.
 

Back
Горе