inserire query in mysql

andrea1971

Nuovo Utente
29 Dic 2010
29
0
0
ciao a tutti ,premetto che sono un neofitta in programmazione e chiedo l'aiuto di qualcuno per fare questa piccola operazione,vorrei inserire in un database una tabella di parole piu ricercate sul mio sito,diciamo che qualcosa ho fatto ma dovrei risolvere,due cose ossia:
quando la query esiste gia,aumentare le hit,mentre se uno fa una ricerca senza inserire nessuna parola,dovrebbe non aggiornare nulla.
questo è la semplice struttura del database:


id
keywords
hit

mentre questo e' il codice php:

PHP:
$searchstring=($_REQUEST['searchtext']); 		
$sSQL="INSERT INTO ".PREFIX."pm_search SET  keywords='".$searchstring."'"; 		
$db->query($sSQL);

al momento funziona ma mi inserisce ogni query anche se esiste gia e mi crea un nuovo id per le parole vuote.

grazie mille!
 
Ultima modifica di un moderatore:
PHP:
if($_REQUEST['searchtext'] !='')
{
$searchstring=($_REQUEST['searchtext']);         
$sSQL="INSERT INTO ".PREFIX."pm_search SET  keywords='".$searchstring."'";         
$db->query($sSQL);
}else{
echo "Non hai ricercato alcuna key";
}
 
grazie

strano,ma cosi non mi inserisce nessun record neanche quando metto la parola!
intanto grazie del'aiuto
 
PHP:
if($_request['searchtext'] !='')
{
$searchstring=($_request['searchtext']);         
$ssql="insert into ".prefix."pm_search set  keywords='".$searchstring."'";         
$db->query($ssql);
}else{
echo "non hai ricercato alcuna key";
}




cosi funziona e solo che dovrei risovere il problema delle parole doppie e incrementare le hit se una parola esiste gia!!!
 
Prova così:
PHP:
<?php
// supponendo che $db sia un'istanza di PDO

if ($_REQUEST['searchtext'] != '') {
	$stm = $db->prepare('SELECT * FROM '. PREFIX .'pm_search WHERE keywords = ?');
	$stm->execute(array($_REQUEST['searchtext']));
	
	if ($stm->rowCount() > 0) {
		$sql = 'UPDATE '. PREFIX .'pm_search SET hit = hit + 1 WHERE keywords = ?';
	}
	else {
		$sql = 'INSERT INTO '. PREFIX .'pm_search (keywords, hit) VALUES (?, 1)';
	}
	
	$stm = $db->prepare($sql);
	$stm->execute(array($_REQUEST['searchtext']));
}
else {
	echo 'Non hai ricercato alcuna keyword.';
}
 
Prova così:
PHP:
<?php
// supponendo che $db sia un'istanza di PDO

if ($_REQUEST['searchtext'] != '') {
	$stm = $db->prepare('SELECT * FROM '. PREFIX .'pm_search WHERE keywords = ?');
	$stm->execute(array($_REQUEST['searchtext']));
	
	if ($stm->rowCount() > 0) {
		$sql = 'UPDATE '. PREFIX .'pm_search SET hit = hit + 1 WHERE keywords = ?';
	}
	else {
		$sql = 'INSERT INTO '. PREFIX .'pm_search (keywords, hit) VALUES (?, 1)';
	}
	
	$stm = $db->prepare($sql);
	$stm->execute(array($_REQUEST['searchtext']));
}
else {
	echo 'Non hai ricercato alcuna keyword.';
}



cosi funzionerebbe,l'unica cosa e' che mi inserisce anche le ricerche senza parola creando un id e lasciando vuoto la colonna keywords:
PHP:
$searchstring=($_REQUEST['searchtext']); 
$sSQL="SELECT keywords FROM ".PREFIX."pm_search WHERE keywords='".$searchstring."'";	
    $result = $db->query($sSQL);  
	
	  if($result->size()>0)
		{
		while($rs=$result->fetch())	
	
$sSQL="UPDATE ".PREFIX."pm_search SET hit = hit + 1 WHERE keywords='".$searchstring."'";
$db->query($sSQL);
	}
	else {
    $searchstring=($_REQUEST['searchtext']);		
$sSQL="INSERT ".PREFIX."pm_search SET  keywords='".$searchstring."'ON duplicate KEY UPDATE hit=hit+ 1 ";         
$db->query($sSQL);
}
 
Sembra che funziona!!!

NON SO NEANCHE IO COME HO FATTO MA COSI SEMBRA CHE FUNZIONI,COME LO VOLEVO!ANCHE SE FORSE C'E' QUALCHE CODICE DI TROPPO!
INTANTO GRAZIE MILLE DEL'AIUTO,SPEREM!

PHP:
$searchstring=($_GET['searchtext']); 
$sSQL="SELECT keywords FROM ".PREFIX."pm_search WHERE keywords='".$searchstring."'";	
    $result = $db->query($sSQL);  
	
	  if($result->size()>0)
		{
		while($rs=$result->fetch())	
	
$sSQL="UPDATE ".PREFIX."pm_search SET hit = hit + 1 WHERE keywords='".$searchstring."'";
$db->query($sSQL);
	}
	else if ($searchstring=($_GET['searchtext'])== NULL)
	{
    echo '';
}
else
	{
    $searchstring=($_GET['searchtext']);
			
$sSQL="INSERT ".PREFIX."pm_search SET  keywords='".$searchstring."'ON duplicate KEY UPDATE hit=hit+ 1 ";         
$db->query($sSQL);
}
 
ciao
PHP:
var_dump($_REQUEST['searchtext']); 
$searchstring=($_REQUEST['searchtext']); //subito prima o subito dopo questa istruzione
//..........
anche se sarebbe meglio come dice alex, in funzione di come trasmetti la variabile (form con action="post" e con un link mia_pag.php?searchtext=pinco ($_GET)

PHP:
var_dump($_POST['searchtext']); 
$searchstring=($_POST['searchtext']);
//...........
poi puoi inserire i var_dump anche dopo le $sSQL, var_dump($sSQL);
e vedere se vengono scritte come si deve
ricordati, una volta che lo script funzia, di toglierli o di commentarli (io generlmente li commento a memento di dove mi sono incastrato)
 
ampliamento

visto che adesso funziona ,come mio solito devo trovare qualcosa per complicarmi la vita,sto cercando aggiungendo il campo section nella tabella pm_search ,section sta per "categoria" e lo richiamo con questo codice:
PHP:
$section=($_GET['type']);

vorrei che se uno fa la ricerca solo della parola,mi crea un record cosi:

id 1
keywords ciao
hit 1
section 0


mentre se uno fa una ricerca con parola e categoria mi crea un record cosi:

id 1
keywords ciao
hit 1
section 14

dove ad esempio 14 sta per categoria "piante"

grazie per chi mi puo aiutare!!!
 
PHP:
$sql = 'SELECT * FROM tabella WHERE keywords = keyword';

if (isset($_GET['type']) && $_GET['type'] != '') {
    $sql .= ' AND section = ' . $_GET['type'];
}
Dovrebbe funzionare.

Comunque il tuo script non è assolutamente protetto contro le SQL injection. Se proprio sei deciso a non usare PDO, usa almeno funzioni come addslashes per assicurarti che nessun lamer possa cancellarti l'intero database con una tecnica vecchia come il cucco.
 
come faccio

come ho detto al'inizio del post,sono alle prime armi,e per questo molte cose non le conosco,ti volevo chiedere se passo a questo PDO,lo script che ho attualmente in uso ,funziona ugualmente ? e come faccio a passare in PDO, con un dominio aruba mysql??


grazie,grande!!!
 
Sembra che la libreria pdo sia installata

come ho detto al'inizio del post,sono alle prime armi,e per questo molte cose non le conosco,ti volevo chiedere se passo a questo PDO,lo script che ho attualmente in uso ,funziona ugualmente ? e come faccio a passare in PDO, con un dominio aruba mysql??


grazie,grande!!!

Ho fatto una verifica e sembra che la libreria PDO mysql sia installata,io uso questo PHP.INI qui:

http://webx196.aruba.it/CP/index.php?ak=phpinfo&ini=reg_off_magicquota_off

Se vuoi dare un'occhiata? grazie ancora!!
 

Discussioni simili