Page 1 sur 1

Warning: Illegal string offset 'category' in

Posté : 20 avr. 2016, 22:31
par Daniel
Bonjour a tous.
quelqu'un pourrait me aider?
je suis très débutant et je ne arrive pas toujours le même erreur :-(
include('config.php');
	require_once 'easybitcoin.php';
	$client = new Bitcoin($rpc['login'] , $rpc['password'] , $rpc['ip'] , $rpc['port']) or die('Error: could not connect to RPC server.');
	
	$lastPayout = time();
	$adresses = array();

	function getAddress($trans)
	{
		global $client;
		$address = "";

		$details = $client->getrawtransaction($trans["txid"], 1);

		$vintxid = $details['vin'][0]['txid'];
		$vinvout = $details['vin'][0]['vout'];

		try {
			$transactionin = $client->getrawtransaction($vintxid, 1);
		}
		catch (Exception $e) {
			die("Error with getting transaction details.\nYou should add 'txindex=1' to your .conf file and then run the daemon with the -reindex parameter.");
		}
		
		if ($vinvout == 1)
			$vinvout = 0;
		else
			$vinvout = 1;
		
		$address = $transactionin['vout'][!$vinvout]['scriptPubKey']['addresses'][0];
		return $address;
		echo $address;
	}
	
		// Paying out
		$query = mysqli_query($mysqli,'SELECT * FROM `transactions` WHERE `state` = 1 ORDER BY `date` ASC;');
		if (mysqli_fetch_assoc($query)) {
			$query = mysqli_query($mysqli,'SELECT * FROM `transactions` WHERE `state` = 1 ORDER BY `date` ASC;');
			while($row = mysqli_fetch_assoc($query))
			{
			if ($row['date'] + $config['payout-check'] < time()) {
				$txout = $client->sendfrom($config['ponziacc'], $row['address'], round((float)$row['topay'], 4) - ($row['amount'] * $config['fee']));
				mysqli_query($mysqli,"UPDATE `transactions` SET `state` = 2, `out` = '" . $txout . "' WHERE `id` = " . $row['id'] . ";");
				print("Paying:<br>");
				print($row['topay'] . " " . $config['val'] ." sent to " . $row['address'] . ".\n");
				echo ("<br>");
				}
			}
		}

		// Parsing and adding new transactions to database
		print("Parsing transactions...\n");
		echo ("<br>");
		$transactions = $client->listtransactions($config['ponziacc'], 100);
		$i = 0;
//		if (getAddress($transactions))
//		{
		foreach ($transactions as $trans)
		{
			echo("" . ++$i . ",\n");
			
			if ($trans['category'] != "receive" || $trans["confirmations"] < $config['confirmations'])
				continue;
			
			if ($trans['amount'] > $config['max'] || $trans['amount'] < $config['min'])
			{
				$query = mysqli_query($mysqli,'SELECT * FROM `transactions` WHERE `tx` = "'.$trans['txid'].'";');
				echo $query;
				if (!mysqli_fetch_assoc($query))
				{
					if ($trans['amount'] < 0)
						continue;

					if ($config['sendback'])
						$client->sendtoaddress(getAddress($trans), $trans['amount'] - ($trans['amount'] * $config['fee']));
					else
						$client->sendtoaddress($config['ownaddress'], $trans['amount'] - ($trans['amount'] * $config['fee']));
						
					mysqli_query($mysqli,"INSERT INTO `transactions` (`id`, `amount`, `topay`, `address`, `state`, `tx`, `date`) VALUES (NULL, '" . $trans['amount'] . "', '0', '0', '3', '" . $trans['txid'] . "', " . (time()) . ");");
					print($trans['amount'] + " - Payment has been sent to you!\n");
					continue;
				}
			}
		
			$query = mysqli_query($mysqli,'SELECT * FROM `transactions` WHERE `tx` = "'.$trans['txid'].'";');
			if (!mysqli_fetch_assoc($query)) // Transaction not found in DB
			{
				$amount = $trans['amount'];
				$topay = $amount * (1.0 + $config['income']);
				print("Transaction added! [" . $amount . "]\n");
				echo ("<br>");
				$address = getAddress($trans);

				mysqli_query($mysqli,"INSERT INTO `transactions` (`id`, `amount`, `topay`, `address`, `state`, `tx`, `date`) VALUES (NULL, '" . $amount . "', '" . $topay . "', '" . $address . "', '0', '" . $trans['txid'] . "', " . (time()) . ");");
			}
		}
//	}
		
		$query = mysqli_query($mysqli,"SELECT SUM(amount) FROM `transactions`;");
		$query = mysqli_fetch_row($query);
		$money = $query[0];
		
		$query = mysqli_query($mysqli,"SELECT SUM(topay) FROM `transactions` WHERE `state` > 0;");
		$query = mysqli_fetch_row($query);
		$money -= $query[0];
		
		$query = mysqli_query($mysqli,"SELECT * FROM `transactions` WHERE `state` = 0 AND `topay` > 0 ORDER BY `id` ASC;");
		while($row = mysqli_fetch_assoc($query))
		{
		echo ("<br>");
			print("Money: " . $money . "\n");
			if ($money < $row['topay'])
				break;
				
			mysqli_query($mysqli,"UPDATE `transactions` SET `state` = 1 WHERE `id` = " . $row['id'] . ";");
			$money -= $row['topay'];
		}
		
		echo ("<br>");
		echo ("Waiting...\n");

Re: Warning: Illegal string offset 'category' in

Posté : 21 avr. 2016, 08:18
par Spols
Hello,

Pourrais tu nous donner le message d'erreur au complet, Merci.
Et si il correspond à une ligne particulière indique nous laquelle.

Re: Warning: Illegal string offset 'category' in

Posté : 21 avr. 2016, 16:05
par Ryle
Bonjour,

A confirmer en fonction du message d'erreur et de la ligne, mais à vue de nez, je dirais qu'au moment où tu testes $trans['category'] != "receive", $trans['category'] n'existe pas. Php affiche alors un avertissement pour te dire que tu ne peux pas comparer quelque chose qui n'existe pas à une chaîne.

Tu peux ajouter un isSet() pour t'assurer que la variable (ou l'index) que tu veux utiliser existe bel et bien avant de l'utiliser :
if (isSet($trans['category']) && $trans['category'] != "receive") ...

Re: Warning: Illegal string offset 'category' in

Posté : 21 avr. 2016, 23:00
par Daniel
bonsoir,
alors oui
le message complet est:

Notice: Undefined index: category in /home/www/webperso/cron.php on line 71

encore merci d'avance

Re: Warning: Illegal string offset 'category' in

Posté : 21 avr. 2016, 23:01
par Daniel
Bonjour,

A confirmer en fonction du message d'erreur et de la ligne, mais à vue de nez, je dirais qu'au moment où tu testes $trans['category'] != "receive", $trans['category'] n'existe pas. Php affiche alors un avertissement pour te dire que tu ne peux pas comparer quelque chose qui n'existe pas à une chaîne.

Tu peux ajouter un isSet() pour t'assurer que la variable (ou l'index) que tu veux utiliser existe bel et bien avant de l'utiliser :
if (isSet($trans['category']) && $trans['category'] != "receive") ...

MERCI,
je vais essayer!

Re: Warning: Illegal string offset 'category' in

Posté : 21 avr. 2016, 23:06
par daniel
avec cette modif:
Alors Maintenant cela me affiche plusieurs erreurs:
if (isSet($trans['category']) && $trans['category'] != "receive")
Warning: Illegal string offset 'amount' in /home/www/monsite/cron.php on line 72

Warning: Illegal string offset 'amount' in /home/www/monsite/cron.php on line 72

Warning: Illegal string offset 'txid' in /home/wouaf896/www/monsite/cron.php on line 74

Catchable fatal error: Object of class mysqli_result could not be converted to string in /home/wouaf896/www/monsite/cron.php on line 75

Re: Warning: Illegal string offset 'category' in

Posté : 22 avr. 2016, 09:59
par Ryle
Tu as vraisemblablement le même problème avec ta variable $trans['amount'] que tu utilises sans tester au préalable si celle-ci existe.
Même problème encore avec $trans['txid'] ...

Il faudrait je pense vérifier que la variable $trans que tu utilises dans ton foreach contient bien les informations et les index dont tu as besoin.

Quant à l'erreur fatale, c'est parce que tu essayes d'afficher à l'écran un objet mysqli_result qui est l'objet résultat de ta requête comme si c'était une chaine de caractère... or ce n'est pas le cas :)

Re: Warning: Illegal string offset 'category' in

Posté : 23 avr. 2016, 21:56
par daniel
ok,
je vais laisser tomber car sa me dépasse
dommage ce justement ce que je cherchait... :-(