Problema con PHP + SQL !

idkfa46

Utente Attivo
17 Ott 2010
40
0
0
Ciao ragazzi... sto litigando con una pagina del mio sito!

Ringraziandovi anticipatamente della vostra disponibilità, vi sottopongo il mio problema:

Ho creato una pagina con 2 righe da compilare e un tasto per inviare i dati con il seguente codice:

<div class="column1-unit" align="center">
<div class="contactform" align="center">
<form method="post" action="{$script_url}?act=key">
<fieldset><legend> {$user.name}'s MALL POINTS DELIVERING SISTEM </legend>
<p>Please enter here the key gonna active now:</p>
<p> <input type="text" name="act_key" id="act_key" class="bigfield" value="{$form_key}" tabindex="1" /></p>
<p>Please enter here the point's quantity:</p>
<p> <input type="text" name="points" id="points" class="bigfield" value="{$form_points}" tabindex="2" /></p>
<p><input type="submit" id="submit" class="button" name="a_key" value="Submit"></p>
</fieldset>
</form>
</div>
</div>

Riferito alla seguente pagina key.php che dovrebbe prendere i dati inseriti in precedenza e scriverli in un database sql (database WEBSITE, tabella item_key)

qui vi posto il codice relativo nel key.php:

if (isset($_SESSION['aid']))
{
if (isset($_POST['a_key'])) {

$act_key = trim((isset($_POST['act_key']) ? $_POST['act_key'] : ''));
$points = trim((isset($_POST['points']) ? $_POST['points'] : ''));

$actkey = doQuery("INSERT INTO item_key (act_key,wasted,points) VALUES ('$act_key','0','.$points.')", DATABASE_WEBSITE);


if(!$actkey)
{
$oSmarty->assign('message', array( 'type' => 'error',
'messages' => array( 'Error key' ) ) );
}
else
{
$oSmarty->assign('message', array( 'type' => 'ok',
'messages' => array( 'Your key has been succesful actived!' ) ) );
}
}
}
else
{
$oSmarty->assign('message', array( 'type' => 'error',
'messages' => array( 'Please log-in to acces this feature!.' ) ) );
}



all'interno della pagina visualizzo l'errore "Error key"
e se controllo il database infatti non viene compilata nessuna riga :incazz2:

Matteo.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
scusa, ma ci sono alcune cose che non capisco
nel form htm ad es. per passare le variabili php (se sono variabili php) ho sempre visto questa sintassi

HTML:
<form method="post" action="<?php echo "$script_url?act=key"; ?>">

<input type="text" name="act_key" id="act_key" class="bigfield" value="<?php echo $form_key;?>" tabindex="1" />
cioè le varibili rinchiuse nei tag php talvolta anche
HTML:
<input type="text" name="act_key" id="act_key" class="bigfield" value="<?php =$form_key;?>" tabindex="1" />
comunque posso sbagliarmi.
inoltre nella parte php scrivi
PHP:
<?php
//.....
$actkey = doQuery("INSERT INTO item_key (act_key,wasted,points) VALUES ('$act_key','0','.$points.')", DATABASE_WEBSITE);
//......
$oSmarty->assign('message', array( 'type' => 'error', 'messages' => array( 'Error key' ) ) );
//.....
?>
doQuery è una tua funzione o classe? se si dove è definita la funzione o richiamata la classe?
sembrerebbe una classe in quanto poi dopo usi
$oSmarty->assign.....

inoltre una piccola cosa (altrimenti alex si arrabbia, e dato che è il tuo primo post ancora non lo conosci):
usa i tag html e php per racchiudere il codice (sono nella riga di formattazione del post)
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
24
Roma
alessandro1997.netsons.org
La variabile $oSmarty contiene un'istanza di Smarty, un famoso template engine (che giustifica anche le variabili "strane" all'interno del form) quindi c'entra poco con la funzione doQuery. Mi interesserebbe invece vedere quest'ultima, perché ad una prima lettura lo script non presente problemi, perciò immagino che l'errore stia proprio lì.
 

idkfa46

Utente Attivo
17 Ott 2010
40
0
0
allora allora...
La variabile doQuery la troviamo in inc.functions.db.php ed è la seguente:


PHP:
/**
	 * Switch the database-context to either Accountserver or GameDB.
	 *
	 * @param string $db
	 * @return string
	 */

	function selectDB($db)
	{

		global $connections,$config;

		if (!isset($connections[$db]))
			die('Core-Error: Invalid database in selectDB()');

		if ($connections[$db]===false)
		{

			$connections[$db]	= @mssql_connect($config['db'][$db]['host'],$config['db'][$db]['user'],$config['db'][$db]['pass']);

			if ($connections[$db] === false)
			{

				$msg		= mssql_get_last_message();

				echo '<b>Core-Error</b>: Failed to connect to database!<br />';

				if (trim($msg)!='')
					echo 'Error: '.htmlspecialchars($msg);
				else
				{

					if (trim(strtolower($config['db'][$db]['host'])) == 'MM8966-50BEEA14\SQLSSO')
						$config['db'][$db]['host']	= 'MM8966-50BEEA14\SQLSSO';

					// Lets see if we can establish a connection to the db-server

					$file      = @fsockopen ($config['db'][$db]['host'], 80, $errno, $errstr, 10);

					if (!$file)
						$status = -1;  // Site is down
					else
					{
						$status	= 0;
						fclose($file);
					}

					if ($status == -1)
						echo 'Error: #'.$errno.', '.htmlspecialchars($errstr).'';
					else
						echo 'Error: Please check if MSSQL-service is running <b>and</b> reachable (firewall, etc.).';

				}

				if (DEBUG)
				{
					echo '<br /><br />';
					echo '<b>Connection-Details</b>:<br /><br />';
					echo '<table width="400">';
					echo '<tr><td>Host:</td><td>'.htmlspecialchars($config['db'][$db]['host']).'</td></tr>';
					echo '<tr><td>User:</td><td>'.htmlspecialchars($config['db'][$db]['user']).'</td></tr>';
					echo '<tr><td>Password:</td><td>'.htmlspecialchars($config['db'][$db]['pass']).'</td></tr>';
					echo '<tr><td>Database:</td><td>'.htmlspecialchars($config['db'][$db]['db']).'</td></tr>';
					echo '</table>';
				}

				die('');

			}

		}

		if ($connections[$db]!==false)
			mssql_select_db($config['db'][$db]['db']);

	}

	/**
	 * This is mostly a wrapper for mssql_query which logs queries.
	 *
	 * @param string $query
	 * @return mixed
	 */

	function doQuery($query,$db='')
	{

		global $stats;

		if (DEBUG)
		{
			$stats['queries'][]	= $query;
			$stats['querycount']	= $stats['querycount']+1;	// Number of queries
		}

		// change DB if neccessary

		if ($db!=='')
			selectDB($db);

		// perform query

		$result	= @mssql_query($query);

		if (DEBUG)
		{

			$fh	= @fopen(BASEDIR.'data'.DIRECTORY_SEPARATOR.'dblog.txt','a');
			@fputs($fh,$query."\n");

			if ($result !== true)
			{

				$error		= mssql_get_last_message();

				if ((stristr($error,'Changed database context') === false) && (stristr($error,'Datenbankkontext wurde auf') === false))
				{
					@fputs($fh,"\n".'ERROR: '.mssql_get_last_message()."\n");
				}

			}

			@fputs($fh,"\n\n".str_repeat('=',80)."\n\n\n");

			@fclose($fh);

		}

		//

		return $result;

	}

	/**
	 *  Very simple function to create an INSERT-statement from an array
	 *
	 * @param string $table
	 * @param string $data
	 * @return string
	 */

	function getInsert($table,$data)
	{

		$fields			= array();
		$values			= array();

		foreach ($data as $curdata)
		{

			$fields[]	= $curdata['field'];

			switch (strtolower($curdata['type']))
			{
				case 'i'	:
					$values[]	= (int)$curdata['value'];
					break;
				case 's'	:
					$values[]	= '\''.addslashes_mssql($curdata['value']).'\'';
					break;
				case 'd'	:
					$values[]	= 'CONVERT(datetime, \''.date('Y-m-d H:i:s',(int)$curdata['value']).'\', 120)';
					break;
			}

		}

		return 'INSERT INTO '.$table.' ('.implode(', ',$fields).') VALUES ('.implode(', ',$values).')';

	}

	/**
	 * A n addslashes-function for mssql as mssql uses different escape-chars.
	 *
	 * @param string $str
	 * @param string $inlike
	 * @param string $escape
	 * @return string
	 */

	function addslashes_mssql($str,$inlike=false,$escape='!')
	{

		if (is_array($str))
		{
			foreach($str AS $id => $value) {
				$str[$id] = addslashes_mssql($value,$inlike);
			}
		}
		else
		{

			$str	= str_replace("'", "''", $str);

			if ($inlike)
			{
				$str	= str_replace($escape, $escape.$escape, $str);
				$str	= str_replace('%', $escape.'%', $str);
				$str	= str_replace('[', $escape.'[', $str);
				$str	= str_replace(']', $escape.']', $str);
				$str	= str_replace('_', $escape.'_', $str);
			}

		}

		return $str;

	}

?>


intendevi questo ?
Grazie per la disponibilità, Matteo
 
Ultima modifica:

idkfa46

Utente Attivo
17 Ott 2010
40
0
0
Non può essere che io abbia sbagliato qualcosa nella creazione della tabella SQL ?
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
24
Roma
alessandro1997.netsons.org
Potrebbe anche darsi. Sarebbe anche utile sapere l'errore preciso restituito dal database. Prova ad aggiungere dopo la chiamata alla funzione:
PHP:
or die(msql_error());
Alla fine deve venire una cosa del tipo:
PHP:
$actkey = doQuery('codice SQL...') or die(msql_error());
E vedi se ti restituisce qualcosa (probabilmente sì).
 

idkfa46

Utente Attivo
17 Ott 2010
40
0
0
ho provato... ottengo il seguente errore:

Fatal error: Call to undefined function msql_error() in C:\xampp\htdocs\sitopower\pages\mall\inc.key.php on line 34

e la riga 34 è proprio quella che ho appena modificato:

PHP:
$actkey = doQuery("INSERT INTO item_key (act_key,wasted,points) VALUES ('$act_key','0','.$points.')", DATABASE_WEBSITE) or die (msql_error());

:incazz2:
 

idkfa46

Utente Attivo
17 Ott 2010
40
0
0
BINGOOOOOOOOOOOOOOOOOOOoo
Problema risolto! è bastato modificare la riga:
PHP:
$actkey = doQuery("INSERT INTO item_key (act_key,wasted,points) VALUES ('$act_key','0','$points')", DATABASE_WEBSITE);
eliminando i puntini '.$points.' e '.$act_key.' !!!!

Ora però vorrei apportare una modifica... praticamente vorrei fare in modo che prima di scrivere la riga dovrei controllare che l' $act_key inserito non sia gia stato utilizzato per evitare di fare doppioni.... fattibile??? cosa consigliate???

grazie Matteo
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
prima di inserire fai una select di interrogazione con WHERE act_key='$act_key'.....
poi guardi se esistono record con


PHP:
$esistono=mysql_num_rows($query_interroga);
if($esistono==0){
   //inserisci il record
}else{
  echo "il valore $act_key è già esistente";
}
 

idkfa46

Utente Attivo
17 Ott 2010
40
0
0
Grandi Ragazzi.... Grazie ancora!!!!
Diciamo che la verità stava nel mezzo... per farlo funzionare ho inserito il seguente codice:

$query = doQuery("SELECT * FROM item_key WHERE act_key = '$act_key'", DATABASE_WEBSITE);

PHP:
if(mssql_num_rows($query) > 0) 
                                                                                           { 
                                                                                                         $oSmarty->assign('message',			array( 'type'		=> 'error',
											'messages'	=> array( 'KEY USED, TRY WITH A DIFFERENT ONE!' ) ) );
                                                                                            } 
                                                                 else 
                                                                           { 


			$actkey = doQuery("INSERT INTO item_key (act_key,wasted,points) VALUES ('$act_key','0','$points')", DATABASE_WEBSITE);
			
			
			if(!$actkey) 
						{
							$oSmarty->assign('message',			array( 'type'		=> 'error',
											'messages'	=> array( 'Error key' ) ) );
						}
					else
						{				
							$oSmarty->assign('message',			array( 'type'		=> 'ok',
										'messages'	=> array( 'Your key has been succesful actived!' ) ) );
						}
                                                                              }

Praticamente come detto dal mitico Ale con la seguente modifica:
la parte
PHP:
$query = doQuery("SELECT * FROM item_key WHERE act_key = {$act_key}", DATABASE_WEBSITE);
è stata modificata così...
PHP:
$query = doQuery("SELECT * FROM item_key WHERE act_key = '$act_key'", DATABASE_WEBSITE);
come suggerito da Borgo Italia ;))))

Ehehehe Grazie ancora! tornerò presto a disturbarvi con nuovi dubbi :):):):):):)
Matteo
 
Discussioni simili
Autore Titolo Forum Risposte Data
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
M Problema con php per calcolo costo percentuale PHP 7
L [PHP] Problema con Telegram PHP 1
N [Apache] problema con estensione php Apache 0
C [PHP] Problema con download file PHP 0
M [PHP] Problema con preg_match PHP 1
gandalf1959 [PHP] problema con l'utilizzo di Header PHP 3
M [PHP] Problema con query select PHP 2
S [PHP] Problema con istruzione "use" PHP 23
Cosina [PHP] fwrite problema con le parole accentate PHP 9
F [PHP] Problema con number_format PHP 3
C Apache Cordova problema con php Programmazione 1
T PHP+MYSQL: problema con quelle maledette lettere accentate... PHP 5
F [PHP] Problema con array multidimensionale PHP 4
F Problema con pagine login in PHP PHP 2
A [PHP] Problema invio mail con funzione mail() PHP 3
gandalf1959 problema con la codifica caratteri accentati e speciali tra php e mysql PHP 3
webmachine [PHP][MYSQL] Problema con le SELECT PHP 5
alessandra86 [PHP] Popolamento database con form ricorsivi - problema array (foreach ) PHP 5
C [PHP] problema con un esercizio PHP 2
P [PHP] Problema con accenti ed apostrofi PHP 0
R [PHP] Problema stampa array bidimensionali con formula $html.=<<<myHtml... PHP 2
M [PHP] problema con preg_match PHP 11
L [PHP] problema con upload e javascript (upload multiplo) Javascript 2
D [PHP] problema con xml PHP 13
T4MAR4 [PHP] Problema ricerca con apostrofo PHP 2
xone Problema FPDF con pagina dinamica PHP PHP 1
A Problema con getCurrentPosition e passaggio variabili da javascript a PHP Javascript 3
SebaGravi [PHP] problema url semantici con .htaccess PHP 3
L [PHP] problema parsing con comando file get contents PHP 7
L Problema con recupero dati in PHP cURL e JAVA con server PHP 1
zammaeng [PHP] Problema form con lista PHP 8
M [PHP] Problema con algoritmo struttura iterativa PHP 2
D Problema con query in php PHP 5
S Problema con script php-javascript PHP 2
M [PHP] Problema con query PHP 17
C [PHP] Problema con creazione csv PHP 3
B sitoweb responsivo problema con include php HTML e CSS 1
neo996sps PHP/MySQL - Problema con generazione array PHP 14
P problema con codice php... PHP 7
C Problema con html e php :D PHP 1
E php problema incremento e decremento di 2 variabili con click da pulsante PHP 0
G Problema con codice php PHP 1
L xml e php. Problema con i nodi PHP 4
P Problema con file di registrazione in php, non funziona e dà continui errori PHP 0
R problema con pagine php apache su centos 5.3 Apache 1
V problema con mail e php PHP 6
X Problema con php e javascript jQuery 0
IImanuII Problema con php e cache. PHP 6

Discussioni simili