Jump to content
manxten

Instructiunea SELECT MySQL - PHP

Recommended Posts

Posted

Recent m-am apucat de un site si am dat peste o problema. Am o pagina html cam asa:


<form action='update.php' method='POST'>
<table>
<tr>
<td>Selecteaza camp</td>
<td>
<select name='camp'>
<option value='categorie'>Categorie</option>
<option value='produs'>Produs</option>
<option value='pret'>Pret</option>
<option value='stoc'>Stoc</option>
</select>
</td>
</tr>
<tr>
<td>Valoare veche</td>
<td><input type='text' name='val_veche' size='30'></td>
</tr>
<tr>
<td>Valoare noua</td>
<td><input type='text' name='val_noua' size='30'></td>
</tr>
<tr>
<td align='center' colspan='2'><br /><input type='submit' value='Updateaza produs'></td>
</tr>
</table>
</form>

In care "categorie", "produs", "pret", "stoc" sunt si campuri in baza de date.

Nelamurirea mea este cum as putea updata tabelul din baza de date selectand o anumita categorie pe care sa o updatez(cu ajutorul listei din select) unde sa inlocuiesc 'valoare veche' pe care o dau de la tastatura cu 'valoare noua' de asemenea data de la tastatura.

Ideea mea era(cu asta doar selectez sa vad daca exista in DB ca apoi update-ul e usor):


$camp = $_REQUEST['camp'];
$vv = $_REQUEST['val_veche'];
$vn = $_REQUEST['val_noua'];
$query = "SELECT * FROM tabel WHERE $camp=$vv";
$result = mysqli_query($db, $query);
$numrows = mysqli_num_rows($result);
if($numrows)
{
echo "produsul exista";
}
else
echo "fail! Produsul nu exista";

In toata asta nu se executa interogarea si $numrows ramane 0. Stiu probabil e din cauza ca nu asa se scrie interogarea, dar am incercat si cu apostrof + concatenate ceva de gen

$query = "SELECT * FROM tabel WHERE " . " '$camp' ". '=' ." '$vv' "";

si tot nu merge.

Daca ma puteti ajuta astept raspunsuri :)

Posted (edited)

@manxten

sintaxa de la query ar trebui s? fie a?a


$query = "SELECT * FROM `tabel` WHERE `".$camp."` = '".$vv."'";

..iar variabilele alea f?-le $_POST ?i sanitizeaz? tot ce într? în db...

//fara injuraturi.

@eusimplu, ai dreptate.. voiam s? ajung cât mai repede la acel ps care mi-a fost cenzurat

LE: înc? o chestie, folose?te întotdeauna liniile de mai jos când e?ti "under development". De exemplu dac? aveai error_reporting î?i ar?ta c? sintaxa nu este corect?.


ini_set('display_errors', '1');
error_reporting(E_ALL);

Edited by EAdrian
Posted (edited)

Coloanele intr-o sintaxa MySQL sunt marcate cu ` si nu cu ', cu apostrof sunt marcate doar valorile.

Deci:

$query = "SELECT * FROM `tabel` WHERE `$camp` = '$vv' ";

Si $camp nu trebuie sa accepte orice, doar A-Z, deci mai sus de query:

 $camp = preg_replace('/[^a-z]/i', '', $camp); 

A scris Gecko un tutorial despre regex, citeste-l!

Nu accepta si $_GET cand tu ar trebui sa accepti doar $_POST, e nesecurizat. Ai putea lua in considerare sfatul lui EAdrian.

@IMAGINARY: Eu cu Adrian nu ne certam ca sa vedem care o are mai mare, ne certam deoarece il consideram un subiect util de dezbatut. Si tu ai putea lua in considerare sfatul lui EAdrian.

Edited by eusimplu
Posted (edited)

@eusimplu

merge instructiunea ta.

o sa tin cont de acum incolo de chestia cu $_GET si $_POST. Inca sunt junior in industrie. :D

@ CrisTany

cu instructiunea lui eusimplu merge. pana acum nu se executa interogarea de aia nu gasea nimic

Edited by manxten
Posted

Fail programming si logic.

Ma.

Tu cum faci chestia aia, daca ai 5 produse cu aceeasi categorie, sau 5 produse cu acelas nume ( absurd, dar poate difera categoria ).

Tu le schimbi pe toate odata.

Daca nu intelegi ce vreau sa zic, revin cu un edit.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...