PHP MYSQL ARRAY check if string is in array - php

I have user input which in this case will be Hello
$command = mysqli_real_escape_string($con,$_POST['command']);
a variable called $dialogue_unlock is populated through some scripts. Which for testing will output 'Hello','Goodbye'
$dialogue_unlock .= ',\''. $discuss_row['discussion_text'].'\'';
Im then trying to see if the user input matches the array
$dialogue_array = array($dialogue_unlock);
if(!in_array("$command", $dialogue_array)){
$err .= 'Invalid Question';
}
As a test im using
echo $err. '<br>';
echo $command. '<br>';
echo $dialogue_unlock;
I get
Invalid Question
Hello
'Hello','Goodbye'
I just cant wrap my head around it as 'hello' is definitely in 'Hello','Goodbye'. Can anybody offer some advise please.
Many thanks.

It looks as though your array contains the 1 element with the text 'Hello','Goodbye' and when you look for Hello it doesn't match. What you should do is add each item of $discuss_row['discussion_text'] to $dialogue_array directly using (in whatever loop you build up $dialogue_unlock)
$dialogue_array[] = $discuss_row['discussion_text'];
So when you add Hello and Goodbye then it will be two separate elements in the array.
Just make sure that before this loop you initialise the array...
$dialogue_array = [];

Try this.
$command = mysqli_real_escape_string($con,$_POST['command']); /// hello
$dialogue_unlock .= ',\''. $discuss_row['discussion_text'].'\''; /// 'Hello','Goodbye'
$dialogue_unlock = explode(',', $dialogue_unlock); /// dialogue_unlock to array
foreach ($dialogue_unlock as $a) {
if (strpos($command, $a) !== FALSE) {
echo "Match found";
}
else
{
echo "Not found!";
}
}

Related

Multidimensional session php array echoing

I have a PHP session array where it can be counted as multidimensional array, basically I am trying to store data inside my session array and i am successfully obtaining that part of the task. The main issue is, I am not able to echo them specifically and I have to use var_dump. When I try to print them with echo i got an notice which says array to string conversion. Please any help I would be appreciated how to print them with their own specific keys or values. The code as follows:
if (!is_array($_SESSION['products']['names'])){
$_SESSION['products']['names'] = array();
$_SESSION['products']['names']['prices']= array();
}else {
$pros = $_SESSION['products']['names'];
if (in_array($product->getName(), $pros, true)){
echo 'The product is available in your basket';
} else {
array_push($_SESSION['products']['names'],$product->getName());
array_push($_SESSION['products']['names']['prices'], $product->getPrice(Currency::getCurrentCurrency()));
foreach ($_SESSION['products'] as $val){
echo $val['names'];
echo $val['prices'];
}
}
}
The output that I receive as follows:
Notice: Undefined index: names in
Array to string conversion in
Use join() function in your foreach, like this:
echo join('<br>', $val);
Or instead of
echo $val['prices'];
write
echo $val['names']['prices'];
This is your problem...
// Here your assigning `['names']` as a string..
array_push($_SESSION['products']['names'],$product->getName());
// Then here you're overwriting the string with an array...
array_push($_SESSION['products']['names']['prices'], $product->getPrice(Currency::getCurrentCurrency()));
Change the first one to this..
array_push($_SESSION['products']['names']['name'],$product->getName());
Assuming $product->getPrice() returns a string or a number...
foreach ($_SESSION['products'] as $val){
foreach($val['names'] as $name){
echo $name['name'];
echo $name['prices'];
}
}
There is no issue with the code you have here. I don't see you trying to echo or vardump them directly so please show the code you are echoing them out specifically or the output from above and which line is giving you an issue.
If you want to echo each one out with it's price.
for($i=0;$i<count($_SESSION['products']['names']);$i++) {
echo $_SESSION['products']['names'][$i] . " " . $_SESSION['products']['names']['price'][$i];
}

how to check empty value from array?

OK. So i have a json_encoded string like this:
{"MostViews":"1","Tags":"","PhotoSize":""}
Decoded it so it looks like this:
$specificdetail = json_decode('{"MostViews":"1","Tags":"","CanvasSize":""}',true);
print_r(specificdetail);
// printed array
Array
(
[MostViews] => 1
[Tags] =>
[PhotoSize] =>
)
Now you can see in the array there are two items Tags and PhotoSize are empty.
and My Requirement is that:
I am creating a dynamic div which will be visible if i got item with a value. I mean item should have any value. if all have empty then i will not show the div.
So i just did the basic thing to extract the array value:
$counter=0;
foreach($specificdetail as $specificd)
{
if(!empty($specificd)){
$counter++;
}
}
if(!empty($counter))
{
echo "<div>Detail:</div>";
}
Now it is giving me this Fatal Error:
Fatal error: Cannot access empty property
And i have also tried to use key=>value pair and checked the value but same result.
Can anybody tell me whats wrong with this? I know that many questions related to this fatal error have been asked before and i have checked few of them but non of them helped me?
Please Help.
OK. so i just did a little change in my if condition and also used the key=>value pair
foreach($specificdetail as $key=>$specificd)
{
if($specificd !== '' ){
$counter++;
}
}
echo $counter; // it gives me 1 which is true because there is only one item is not empty
BTW thanks everybody to giving your precious time.
Try this instead:
if($counter != 0)
Hello just put this code
$empty=array();
$feed=array();
$k=0;
$count_feeed=0;
$count_empty=0;
foreach($specificdetail as $key=>$val){
if($val != ""){
$feed[$k][$key]=$val;
$count_feeed++;
}else{
$empty[$k][$key]=$val;
$count_empty++;
}
$k++;
}
echo "<br/> Total feeding element: $count_feed;";
echo "<br/> Total empty element: $count_empty;";
echo "Your feeding array which is not empty.";
echo "<pre>";
print_r($feed);
echo "<br/>";
echo "Your empty array which is empty.";
echo "<pre>";
print_r($empty);
echo "<br/>Enjoy....";
Let me know if any bug
first json decode your code with json_decode() function then ,
$old_count=count($array);
$new_count=count(array_filter($array));
$number_of_empty_values=($old_count - $new_count);
echo $number_of_empty_values;

php - search an array for a string

<?php // SEARCH TAGS FOR A SPECIFIC TAG
$tags = CollectionAttributeKey::getByHandle('recipe_tags'); // attribute handle of tags to search
$tagToFind = 'Videos'; // declare the specific tag to find
$selectedTags = array($page->getAttribute($tags->getAttributeKeyHandle())); // get tags associated with each page and put them in an array
foreach ($selectedTags as $tag) { // output tags separately
echo $tag; // ECHO TEST - check that individual tags associated with each page are outputting correctly
if ($tag == $tagToFind) { // if $tag is equal to $tagToFind
echo ' Found';
} else {
echo ' Not found';
}
}
?>
echo $tag; outputs the list of tags associated with each page so I'm pretty sure the issue is how I'm checking if 'Videos' is in the list of tags.
The above outputs the following list: Breakfast Brunch Budget Meal Easy Lunch Quick Meals Supper Vegetarian Videos and Not found even though Videos is in the list.
I've also tried using in_array to look for 'Videos' like this:
if (in_array($tagToFind, $selectedTags, true)) { // search the array for $tagToFind - true = strict
echo ' Found';
} else {
echo ' Not found';
}
But get the same result - I'm new to php so sorry if this is easy.
Any help would be much appreciated.
Cheers
It seems that $selectedTags an array of one string, since your foreach only loops once
You should try doing
$selectedTags = explode(" ",$page->getAttribute($tags->getAttributeKeyHandle()));
Then use in_array function
$page->getAttribute($tags->getAttributeKeyHandle())
seems to return a string.
In that case
$selectedTags = array($page->getAttribute($tags->getAttributeKeyHandle()));
makes no sense - you get an array containing one long string.
What you want to to is:
$selectedTags = $page->getAttribute($tags->getAttributeKeyHandle());
if(stristr($selectedTags, $tagToFind)){
// do something
}
else{
// do something else
}
Then Better to use....
if(strcmp($tag , $tagToFind))
{
echo "Found";
}
else
{
echo "Not found";
}
may this works for you

returning sql array in php

I am having trouble in returning data in php from an SQL query. here is my code:
public function get_audit_message($productId,$accountId)
{
$sql_list ="SELECT notes
FROM ".$this->tables_audit."
WHERE productId = '".mysql_real_escape_string($productId)."'
AND accountId = '".mysql_real_escape_string($accountId)."'
";
$query = $this->db->query($sql_list);
if($query->num_rows() > 0)
{
$return = $query->result_array();
return $return;
}
else return false;
}
the reason I am having trouble is that as it is at return $return; returns the correct number of results but only displays the word "array". then if i change it to return $return[0]; returns the first entry of information correctly.
So what i want to be able to do is select all array numbers e.g return $return[*]; if only was possible.
Any suggestions would be much appreciated.
return $return; is the correct way to return an array from this function, but you can't just echo() the return value, since it's an array. When you try to echo an array, you get just the literal word "Array" (this also raises a notice which you would've seen with error reporting turned on).
You have to iterate over it and print each array element out, or use implode():
$array = $obj->get_audit_message($productId,$accountId); // However you call it
echo implode( "<br />\n", $array) . "<br />\n";
Or:
$array = $obj->get_audit_message($productId,$accountId); // However you call it
foreach( $array as $el) {
echo $el . "<br />\n";
}
Both of the above snippets will produce the exact same output.
There is several easy ways to display content of PHP Array in HTML.
The most simple is to view it via print_r command like this:
print_r ($my_array);
If you need to be "nice" formatted, add PRE tag like this:
echo "<pre>";
print_r($my_array);
echo "</pre>";
or like this:
echo "<pre>".print_r($my_array, 1)."</pre>";
Also, there is similar var_dump and var_export PHP function:
echo "<pre>";
var_dump($my_array);
echo "</pre>";
or
echo "<pre>";
var_export($my_array);
echo "</pre>";
Just choose your preferred stile.

How to parse a web service returned response into an array in PHP

I am updating my question with a few breakthroughs i was able to achieve today. I used get_object_vars.
This code was able to print out the value i am trying to iterate over.
$fileStatus = $ServicesLink->GetFileStatus(array('Ticket'=>$ticket,'ProjectID'=>$pidobtained,'SourceLanguageID'=> "", 'TargetLanguageID'=> "",'FileID'=> "",'Filename'=>""));
$arrayPid = array();
foreach($fileStatus->GetFileStatusResult->FileStatuses->FileStatus as $fileStatusObtained)
{
$arrayPid = get_object_vars($fileStatusObtained);
//$arrayPid =$fileStatusObtained ;
}
echo is_array($arrayPid) ? 'Array' : 'not an Array';
echo "<br>";
echo("Count of array ".count($arrayPid));
echo "<br>";
print_r('<pre>'. print_r($arrayPid) .'</pre>');
This http://www.image-share.com/ijpg-1163-165.html is what i saw as a result.
Now since this Object has objects inside it along with the values i need i.e. FileID,FileName etc. I am seeing the error message but a glimpse of the output. The code i used was this (just a very minor change from the above. I used a foreach)
$fileStatus = $ServicesLink->GetFileStatus(array('Ticket'=>$ticket,'ProjectID'=>$pidobtained,'SourceLanguageID'=> "", 'TargetLanguageID'=> "",'FileID'=> "",'Filename'=>""));
$arrayPid = array();
foreach($fileStatus->GetFileStatusResult->FileStatuses->FileStatus as $fileStatusObtained)
{
$arrayPid = get_object_vars($fileStatusObtained);
//$arrayPid =$fileStatusObtained ;
}
echo is_array($arrayPid) ? 'Array' : 'not an Array';
echo "<br>";
echo("Count of array ".count($arrayPid));
echo "<br>";
//print_r('<pre>'. print_r($arrayPid) .'</pre>');
foreach($arrayPid as $val) {
echo ($val);
echo "<br>";
}
}
As a result of this i saw the following output http://www.image-share.com/ijpg-1163-166.html .
The index number 1 occupies the object and hence the error for string conversion.
If i use a For loop instead of the foreach in the code just above,i am unable to print the values.
I tried:
for($i=0;$i<(count($arrayPid));$i+=1)
{
echo($arrayPid[$i]);
}
But this would print nothing.
Could any one help me with a way so that i can iterate and have the values inside that array $arrayPid.
Would like to have your suggestions, views, doubts on the same.
I am sorry that i am using imageshare but that is the only way i can share my screens.
Thanks
Angie
The correct way to use it is:
foreach($fileStatus->GetFileStatusResult->FileStatuses->FileStatus as $fileStatusObtained)
{
$arrayPid = get_object_vars($fileStatusObtained);
//print_r($fileStatusObtained->FileID);
$fileId [] = $fileStatusObtained->FileID;
...
}

Categories