-
Ajutor script PHP-Mysql
Salutare,
Problema mea este putin cam stupida pentru un cunoascator al php-ului si bineinteles, a bazelor de date mysql.
Am 2 tabele:
#angajat : angajat_id, angajat_nume, angajat_prenume etc.
#cim : cim_id, angajat_id, etc.
Cand introduc in baza de date in tabela cim, fiecare inregistrare are si angajat_id, de unde sa pot face niste conexiuni. In cazul meu, un angajat poate avea mai multe inregistrari CIM, dar difera numarul, data, functia, salariul etc.
Acum, am facut o optiune de incetare cim si anume:
Cod PHP:
<a href="?show=inceteazacim&cim_id=<? echo $rows['cim_id']; ?>">inceteaza contractul</a>
In pagina ?show=inceteazacim&cim_id=XXX spre exemplu, unde XXX este id-ul unuia din angajati, am urmatorul formular:
Cod PHP:
<?php
$host="";
$username="";
$password="";
$db_name="";
$tbl_name="cim";
$tbl_name2="angajat";
mysql_connect("$host", "$username", "$password")or die("nu ma pot conecta");
mysql_select_db("$db_name")or die("nu pot selecta DB");
$sql=mysql_query"SELECT * FROM $tbl_name, $tbl_name2 where cim_id=$tbl_name2.cim_id, $tbl_name1=$tbl_name2.angajat_id";
$rows = $result[angajat_prenume];
?>
<fieldset><label>Nume si prenume</label><input type="text" value="<? echo $rows['angajat_nume']; ?> <? echo $rows['angajat_prenume']; ?>">
<?php mysql_close(); ?>
Problema este ca nu-mi afiseaza numele si prenumele angajatului si sincer sa fiu, nu inteleg unde gresesc... Ma puteti ajuta, va rog?
Multumesc anticipat.
-
o problema e ca dupa mysql_query nu ai un fetch;
iti recomand sa vezi exemplul #1 de aici: PHP: mysql_fetch_assoc - Manual
functia mysql_query nu returneaza direct un set de rezultate, ci un pointer catre o zona din care trebuie ulterior extrase rezultatele intr-un array simplu / array asociativ / obiect / etc cu o functie de fetch;
o alta problema pare sa fie si queryul care nu sunt convins ca e corect dpdv sql;
iti recomand sa printezi inainte stringul pe care il dai functiei mysql_query si sa incerci sa il rulezi direct intr-un client mysql (probabil phpmyadmin) sa vezi daca intoarce rezultatul pe care il astepti tu de la el;
daca in phpmyadmin merge.. ramane sa cauti problema in codul php.. daca nu.. lucrezi la sql pana iti iese si apoi te intorci la php;
bafta,
-
Am reusit, intr-un final. Codul pe care l-am facut este urmatorul:
Cod PHP:
<?php
$host=""; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name="cim"; // Table name
$tbl_name2="angajat"; // Table name
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$cim_id=$_GET['cim_id'];
$sql="SELECT * FROM $tbl_name, $tbl_name2 WHERE cim_id='$cim_id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);
echo $rows['angajat_nume'];
echo ' ';
echo $rows['angajat_prenume'];
mysql_close(); ?>
-
citind enuntul initial si comparand cu exemplul de cod din final as remarca:
1. $cim_id e folosit ca numar de contract si nu ca id de angajat;
2. selectului ii lipseste un join si nu va functiona corect pt mai mult de un angajat
3. scriptul va afisa mereu cel mult un contract (chiar daca teoretic angajatul poate avea mai multe) macar pentru faptul ca lipseste acel while din exemplul de cod de la php.net
-
Corect, asta am observat si eu intre timp... Imi apare acelasi angajat, la orice contract as da.. Mai imi omor eu putin neuronii, trebuie sa-i dau de cap...
-
Mi se pare foarte neclar descrisa problema, nu vad cum ai putea primi ajutor de calitate.
Din ce am inteles cred ca urmatorul query ti-ar putea fi de folos.
SELECT * FROM $tbl_name2 t2 LEFT JOIN $tbl_name t1 ON t1.angajat_id=t2.angajat_id AND t1.cim_id='$cim_id'
Sper ca nu am facut greseli, nu am testat queryul. Iti recomand sa stai cateva ore sa citesti macar SQL Tutorial , o sa iti scuteasca multa bataie de cap.
Spor!