Mesaj Profil

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Mesaj Profil

Mesajde Ruben » Vin Aug 09, 2013 1:02 pm

Salutare,
De vreo 3 zile ma tot chinui sa fac un amarat de script care sa imi introduca in baza de date un mesaj. Daca a mers sa zica Succes daca nu sa zica ca a aparut o eroare.
Nu stiu de ce dar parca sunt batut in cap. Nu imi iese nimic. Orice as face numa Undefined variable sau Undefined index.... Deci va rog pe voi sa imi faceti un script simplu iar dupa sa vad unde tot greseam. Mentionez ca am cautat de m-am saturat pe google, cu tot cu if(isset($msjprofil))... $_POST.... de toate!, orice am facut numa undefined. Am incercat de toate. Deci va rog sa imi faceti voi un script de la 0 ca mie deja imi crapa capu, nici nu mai pot sa gadesc.
Multumesc....



Avatar utilizator
inginerul
Average Member
Mesaje: 111
Membru din: Sâm Dec 01, 2012 11:34 pm
Contact:

Re: Mesaj Profil

Mesajde inginerul » Vin Aug 09, 2013 1:53 pm

Cod: Selectaţi tot

<?php
$hostname = 'localhost';
$username = 'root';
$password = '';
$database = 'baza_date';

//conectare la serverul MySql
$conexiune = mysql_connect($hostname,$username,$password)
or die ('Nu ma pot conecta la server');

//Conectare la baza de date
$bazadate = mysql_select_db($database, $conexiune)
or die ('Nu gasesc baza de date');

$insert = "INSERT INTO `tabel` (`nume`, `prenume`) VALUES ('Gheorghe', 'Vasile')";
if (mysql_query($insert)) {
   echo 'Datele au fost adaugate';
}
else {
   echo 'Datele nu au fost adaugate';
}
?>

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Mesaj Profil

Mesajde Ruben » Vin Aug 09, 2013 7:20 pm

Multumesc de raspuns. Mi-am aerisit capul si vin acuma cu ceva mai concret:

Cod: Selectaţi tot

------------------------------------------------------------ HTML ------------------------------------------------------------
<form name="msjprofil" method="POST" action="setari.php"><table border="0" cellspacing="3" cellpadding="3" align="center"><tr align="center"><td><font color="#FFFFFF" size="4px"><b>Mesaj de profil:</b></font></td></tr><tr align="center"><td><textarea name="msjprofil" class="textarea" cols="25" rows="5" maxlength="2000" value=""></textarea></td></tr><tr align="center"><td><input type="submit" value="Adauga!"></td></tr></table></form>
------------------------------------------------------------ PHP ------------------------------------------------------------
<?php
include "dbc.php";
if(isset($_POST['msjprofil'])){
   $msjprofil = $_POST['msjprofil'];
}
$msj = 'UPDATE `utilizatori` SET `mesajprofil`="'.$msjprofil.'" WHERE utilizator="'.$_SESSION['utilizator'].'"';
$msjres = mysql_query($msj) or die(mysql_error());
if ($msjres) {
   echo 'Datele au fost adaugate';
}else{
   echo 'Datele nu au fost adaugate';
}
?>

Am combinat putin scriptul meu cu al lui inginerul.
Doresc ceva cam asa dar problema este ca imi zice direct Datele au fost adaugate fara sa fac nimic, doar intru in setari.php si imi spune Datele au fost adaugate. Mai doresc acest fix + definirea la variabila $msjprofil si nimic altceva. Multumesc :)

tedy
Average Member
Mesaje: 95
Membru din: Vin Ian 06, 2012 7:28 pm
Localitate: Ramnicu Valcea
Contact:

Re: Mesaj Profil

Mesajde tedy » Vin Aug 09, 2013 10:38 pm

Cod: Selectaţi tot

------------------------------------------------------------ HTML ------------------------------------------------------------
<form name="msjprofil" method="POST" action="setari.php"><table border="0" cellspacing="3" cellpadding="3" align="center"><tr align="center"><td><font color="#FFFFFF" size="4px"><b>Mesaj de profil:</b></font></td></tr><tr align="center"><td><textarea name="msjprofil" class="textarea" cols="25" rows="5" maxlength="2000" value=""></textarea></td></tr><tr align="center"><td><input type="submit" value="Adauga!"></td></tr></table></form>
------------------------------------------------------------ PHP ------------------------------------------------------------
<?php

require_once 'dbc.php';

if (count($_POST))
{
    mysql_query("UPDATE `utilizatori` SET `mesajprofil` = '$_POST[msjprofil]' WHERE utilizator='$_SESSION[utilizator]'") or die('Datele nu au fost adaugate deoarece a aparut o eroare SQL: ' . mysql_error());
    echo 'Datele au fost adaugate.';
}



Sunt probleme de logica in fostul tau script, intai verifici daca s-a trimis ceva prin $_POST si in cazul acesta setezi o variabila dar tu totusi mai departe mergi cu adaugarea in DB indiferent de situatie. Normal sa-ti dea undefined.

Pentru ce am scris acum recomand totusi inainte de adaugare sa faci validari (lungimea potrivita a string-ului, securitate anti xss/sqli, etc)

Validarile le-ai face fix inainte de mysql_query()

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Mesaj Profil

Mesajde Ruben » Sâm Aug 10, 2013 10:47 am

Well... functioneaza dar numai o problema, explica si mie cum ai ajuns la scriptul acesta. :roll: si cum sa fiu sigur ca o $_POST trimite o informatie.

tedy
Average Member
Mesaje: 95
Membru din: Vin Ian 06, 2012 7:28 pm
Localitate: Ramnicu Valcea
Contact:

Re: Mesaj Profil

Mesajde tedy » Sâm Aug 10, 2013 12:23 pm

E destul de straight-forward scriptul.

- intai includ fisierul cu conexiunea la db. Te sfatuiesc ca intotdeauna sa folosesti require_once pentru acest lucru iar fisierul sa fie cuprins intre ' ', nu " ", (' ') sau alte combinatii.
- apoi numar, folosind functia count(), elementele superglobalului $_POST (global, neglobal, e totusi un array si ii putem numara elementele). Daca count($_POST) returneaza ceva diferit de 0, adica exista elemente in $_POST, inseamna ca formularul a fost trimis spre server prin metoda POST. Daca nu inseamna ca utilizatorul inca completeaza la date si nu a apasat butonul Submit.
- in cazul in care datele au fost trimise, execut un query in baza de date prin intermediul functiei mysql_query(). Observa ghilimelele duble pe care le folosesc ca sa wrappez query-ul. Cand PHP intalneste ghilimelele duble va parsa continutul dintre ele si daca intalneste variable (de ex $_POST['msjprofil'] sau $_SESSION['utilizator']), le va inlocui cu valoarea lor.
- imediat dupa executarea query-ului afisam mesajul de succes deoarece nimic rau nu s-ar fi putut intampla (cu exceptia uneri erori SQL pe care o prevenim mai sus, scriptul se va opri acolo), nu avem validari, etc.

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Mesaj Profil

Mesajde Ruben » Sâm Aug 10, 2013 12:44 pm

Multumesc, am intelese totul. FF bine ai explicat dar.... la functia cu count nu am inteles prea bine, am inteles cum functioneaza si asa, dar alta metoda nu este? Una mai simpla si mai buna? Nu zic ca e rea, ca am inteles oarecum cum functioneaza si mi-am dat seama, numai ca parca e mai complicat de folosit, sau mi se pare mie.... Daca o sa vreau sa o folosesc la alt script cred ca 99% o sa ma blochez. O metoda diferita nu este? :(
Ultima oară modificat Sâm Aug 10, 2013 12:51 pm de către Ruben, modificat 1 dată în total.

tedy
Average Member
Mesaje: 95
Membru din: Vin Ian 06, 2012 7:28 pm
Localitate: Ramnicu Valcea
Contact:

Re: Mesaj Profil

Mesajde tedy » Sâm Aug 10, 2013 12:50 pm

if (isset($_POST['submit'])), if (!empty($_POST)) sau if ($_POST) sau probabil mai sunt si altele

* - unde am scris submit treci numele inputului cu butonul de submit. Daca ai la finalul formei <input type="submit" value="Trimite" name="butonas">, vei folosi $_POST['butonas'] pentru verificare.


Edit: Te-ar putea interesa si asta poate. Personal nu am folosit conditia prezentata acolo niciodata dar articolul pare ca merita citit.
Ultima oară modificat Sâm Aug 10, 2013 12:55 pm de către tedy, modificat 1 dată în total.

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Mesaj Profil

Mesajde Ruben » Sâm Aug 10, 2013 12:53 pm

Aha... Multumesc, ai putea la scriptul functional de mai sus sa mil mai faci odata dar prin if(isset($_POST['submit'])) ? Sunt incepator... defapt nu chair incepator dar fazele cu Notice: Undefined ma omoara... ieri aveam capu cat sura.... :(

tedy
Average Member
Mesaje: 95
Membru din: Vin Ian 06, 2012 7:28 pm
Localitate: Ramnicu Valcea
Contact:

Re: Mesaj Profil

Mesajde tedy » Sâm Aug 10, 2013 12:58 pm

Cod: Selectaţi tot

------------------------------------------------------------ HTML ------------------------------------------------------------
<form name="msjprofil" method="POST" action="setari.php"><table border="0" cellspacing="3" cellpadding="3" align="center"><tr align="center"><td><font color="#FFFFFF" size="4px"><b>Mesaj de profil:</b></font></td></tr><tr align="center"><td><textarea name="msjprofil" class="textarea" cols="25" rows="5" maxlength="2000" value=""></textarea></td></tr><tr align="center"><td><input name="submit" type="submit" value="Adauga!"></td></tr></table></form>
------------------------------------------------------------ PHP ------------------------------------------------------------
<?php

require_once 'dbc.php';

if (isset($_POST['submit']))
{
    mysql_query("UPDATE `utilizatori` SET `mesajprofil` = '$_POST[msjprofil]' WHERE utilizator='$_SESSION[utilizator]'") or die('Datele nu au fost adaugate deoarece a aparut o eroare SQL: ' . mysql_error());
    echo 'Datele au fost adaugate.';
}



PS: Ai probleme in a manipula datele dintr-un formular, as spune ca esti incepator de-a binelea, nu "de fapt nu chiar incepator" :mrgreen:

Ruben
Average Member
Mesaje: 91
Membru din: Joi Iul 04, 2013 10:31 pm

Re: Mesaj Profil

Mesajde Ruben » Sâm Aug 10, 2013 1:04 pm

Aici da, chiar sunt incepator daca chiar nu stiu sa verific daca se trimit informati prin $_POST, oricum stiu sa fac si alte lucruri, dar pe bucati, de asta ziceam ca nu chiar incepator, oricum, stiu eu cat stiu dar aici sunt bata. Nu imi intra in cap cu sa setez o variabila. Daca citesti primul meu post din topicul asta ai sa afli la ce ma refer. Multumesc pentru script si pentru atentia trasa.

tedy
Average Member
Mesaje: 95
Membru din: Vin Ian 06, 2012 7:28 pm
Localitate: Ramnicu Valcea
Contact:

Re: Mesaj Profil

Mesajde tedy » Sâm Aug 10, 2013 1:25 pm

Uhm, chiar nu vreau sa fiu carcotas dar incerc sa-mi dau seama cum poti face `alte lucruri` cand nu intelegi prea bine cum functioneaza variabilele, etc.

Daca te intereseaza niste tips & tricks despre de unde sa incepi si unde sa termini, si totodata linkuri cu documentatie, am scris ceva aici, poate te ajuta.

In rest, daca te mai impotmolesti si nu reusesti sa pleci singur, fa un thread nou :P Bafta.


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 42 vizitatori