NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Kód funguje len 1x

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Marek Burda
Člen
Avatar
Marek Burda:21.4.2017 12:49

Zdravím :) Pracujem na maličkom projekte kde aktuálne potrebujem vypísať zopár vecí. Prečo mi prvý riadok echa funguje ale ak znovu zavolám echo tak už nefunguje ?
<?php
mysql_connect("xxxx","xx­xxx","xxxxx") or die("Unable to connect");
mysql_select_db("xxxxxx­") or die("Unable to choose database");

$select = mysql_query("SELECT * FROM xxxx WHERE id='".$_SESSI­ON["id"]."' ;");
while( $row = mysql_fetch_as­soc($select))

echo "".$row["name"]­."  ";
echo "".$row["name"]­."  ";

?>

Poprípade existuje jednoduchší spôsob ako vypísať veci zo sessionu ?
Skúsil som použiť toto :
echo "".$_SESSION["na­me"]."  ";
No tam je problém že ak zmením napr to name v databáze tak už ho na stránke neaktualizuje. Pomôže len odhlásenie a znovu prihlásenie (pri prihlásení mám identifikovanú premenu čo znamená to name a kde ho má kód hľadať takto tu :)
$sql_dotaz = "SELECT * FROM xaxax WHERE name = '".$name."' AND password = '".$password."';";
mysql_select_db("xa­xaxa") or die("Unable to choose database");
$vysledok = mysql_query($sql_do­taz) or die(mysql_error());
echo mysql_num_row­s($vysledok);
if(mysql_num_row­s($vysledok) == 1){
$name = mysql_fetch_a­rray($vysledok);
$_SESSION["name"] = $name["name"];

Príjde mi to takto moc zložité aby som musel každú vec identifikovať pri logine ved predsa by mal php vedieť že ak ťahá zo sessionu tak vie odkiaľ ťahá. Ano viem že to mám určite zle tak preto potrebujem poradiť. ďakujem veľmi pekne

 
Odpovědět
21.4.2017 12:49
Avatar
Odpovídá na Marek Burda
Matúš Petrofčík:21.4.2017 12:56

Marečku, tam hore nad tým poľom kde si písal ten text je taká značka </>, pomocou ktorej sa vkladajú kódy do komentárov, aby sa dali lepšie čítať.

Nahoru Odpovědět
21.4.2017 12:56
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Marek Burda
Člen
Avatar
Marek Burda:21.4.2017 13:00

Jaj prepáčte :) Zabudol sam nato úplne pretože som su späť po roku a pol :D Upraviť to už asi nejde čo ?

 
Nahoru Odpovědět
21.4.2017 13:00
Avatar
Odpovídá na Marek Burda
Matúš Petrofčík:21.4.2017 13:02
<?php
mysql_connect("xxxx","xxxxx","xxxxx") or die("Unable to connect");
mysql_select_db("xxxxxx") or die("Unable to choose database");

$select = mysql_query("SELECT * FROM xxxx WHERE id='".$_SESSION["id"]."' ;");
while( $row = mysql_fetch_assoc($select))

echo "".$row["name"]."  ";
echo "".$row["name"]."  ";

?>

by som napísal takto:

<?php
mysql_connect("xxxx","xxxxx","xxxxx") or die("Unable to connect");
mysql_select_db("xxxxxx") or die("Unable to choose database");

$select = mysql_query("SELECT * FROM xxxx WHERE id='" . $_SESSION["id"] . "'");

while( $row = mysql_fetch_assoc($select)) { // dal som to do kučeravých zátvoriek
        echo $row["name"];
        echo $row["name"];
}

?>

Keď si to nemal v tých kučeravých zátvorkách, tak sa while cyklus vzťahoval iba na to prvé echo. Teda aspoň to si myslím. Skús to takto v tých zátvorkách.

Btw. nemal by si používať mysql_* funkcie, už sú zastarané. Namiesto nich sa používa mysqli_* (všimni si to i) alebo PDO (v tutoriáloch sa používa).

Taktiež nemusíš zbytočne pridávať prázdne reťazce k tomu čo vypisuješ :)

echo "".$row["name"]."  "; // ee, načo?
echo $row["name"]; // stačí nie?
Editováno 21.4.2017 13:03
Nahoru Odpovědět
21.4.2017 13:02
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Marek Burda
Člen
Avatar
Marek Burda:21.4.2017 13:09

Super už to vypíše aj druhýkrát. Problém ale nastane znovu ak sa budem snažiť vypísať to name mimo kučeravých zátvoriek napríklad niekde úplne inde na tej istej stránke.... čo potom ? ..

 
Nahoru Odpovědět
21.4.2017 13:09
Avatar
Odpovídá na Marek Burda
Matúš Petrofčík:21.4.2017 13:11

Poprípade existuje jednoduchší spôsob ako vypísať veci zo sessionu ?
Skúsil som použiť toto :

echo "".$_SESSION["name"]."  ";

No tam je problém že ak zmením napr to name v databáze tak už ho na stránke neaktualizuje. Pomôže len odhlásenie a znovu prihlásenie (pri prihlásení mám identifikovanú premenu čo znamená to name a kde ho má kód hľadať takto tu :)

No ja by som do session ukladal iba identifikátor prihláseného užívateľa: id. Ak chceš potom vypísať meno užívateľa, tak je dobré si ho z databázy za každým vybrať (samozrejme pri jednom zobrazení stránky len raz :) ).

Keď to chceš takto v session, tak si to meno v session pri tej zmene mena aktualizuj.

Nahoru Odpovědět
21.4.2017 13:11
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Marek Burda
Matúš Petrofčík:21.4.2017 13:14

Tak to nerob cez cyklus while :) Ten až skončí, zanikne aj premenná $row.

$row = mysqli_fetch_row($result);

Jo a všimni si tlačíko "Odpovědět", inak mi neprídu upozornenia že si mi odpovedal :)

Editováno 21.4.2017 13:17
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
21.4.2017 13:14
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Marek Burda
Člen
Avatar
Marek Burda:21.4.2017 13:19

Teraz klape už všetko :) A pritom stačilo ,,zmazať jedno slovíčko´´ a to while :D Ďakujem veľmi pekne som rád že táto komunita mi tu vždy pomôže ak je nejaký problém :D Ešte raz ďakujem :) Keby niečo ozvem sa

 
Nahoru Odpovědět
21.4.2017 13:19
Avatar
Odpovídá na Marek Burda
Matúš Petrofčík:21.4.2017 13:20

Nz, skús sa pozrieť na http://www.itnetwork.cz/php/databaze, je tam pekne vysvetlená práca s DB pomocou PDO :)

Nahoru Odpovědět
21.4.2017 13:20
obsah kocky = r^2 ... a preto vlak drnká
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.