Jump to content
manxten

Instructiunea SELECT MySQL - PHP

Recommended Posts

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 :)

Link to comment
Share on other sites

@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
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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...