Sagar_panchal 0 Newbie Poster

Hi everyone,

I recently switched my app from a paid-only model to a free trial in order to encourage more installs. The app provides features like AI lead quality scoring, quote-to-order conversion, BI dashboard, and customer chat – mainly focused on helping merchants better manage quote requests.

However, even after offering a free trial and running Shopify App Store PPC campaigns, I'm still not seeing the expected increase in installs or engagement. It’s been difficult to identify whether the issue is technical (e.g., listing optimization, app performance) or more related to marketing/discovery.

A few questions I’m hoping to get input on:
Could the earlier paid-only model have impacted my app’s ranking or visibility even after switching to free trial?
Are there known technical factors (e.g., metadata, listing structure, reviews, etc.) that might hinder discovery on the App Store?
Has anyone had success with third-party marketing channels (outside of Shopify PPC) for re-engaging past users or reaching new ones?
Any tips on what early indicators I should track to troubleshoot app store performance?
I'm open to constructive feedback and insights from other developers or partners who’ve faced similar challenges. If this isn't the right category for this question, I apologize and would appreciate being pointed in the right direction.

Thanks in advance!

natashasturrock 0 Newbie Poster Banned

Hey! You’re on the right path — I’ve done this in a few custom .NET development projects using ASP.NET Core with SQL Server. The idea of using a web service to handle login and registration is solid and keeps things clean.

Here’s what usually works:

Create a stored procedure in SQL Server that takes the email and password as parameters, hashes the password, and checks for a match in the Users table.

In your ASP.NET Core API, create a POST endpoint that calls this stored procedure using SqlCommand.

The API should return a success response if a matching user is found, or an unauthorized message if not.

I recommend hashing passwords with SHA-256 at minimum, or better, use salted hashes with something like PBKDF2 or bcrypt.

If you want, I can send over a simple registration flow too — just let me know!

WendyDolan -2 Newbie Poster

hey I’m actually exploring something similar with ASP.NET and user validation, though i am on a newer version. but the core idea should be the same using a web service to handle login and registration logic sounds super practical. would also love to see an example if anyone has a simple one to share, especially using SQL Server with stored procedures maybe?

WendyDolan -2 Newbie Poster

This is something I’ve been wondering about too. The wording around “applicable” s-maxage overriding stale-if-error is kinda vague. From what I’ve seen, s-maxage just sets how long a shared cache (like a CDN or proxy) can consider the response fresh — so I think if the resource is still within s-maxage, then stale-if-error wouldn’t even kick in, right?

But yeah, if s-maxage expires and stale-if-error is set, I’d expect the CDN to serve the stale copy if there’s an error upstream… unless that’s what they mean by it being “overridden”? idk it’s definitely not super clear.

Would love if someone with real-world experience on this with Cloudflare could chime in — does CF actually respect stale-if-error once s-maxage has passed and Always Online is disabled?

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

I feel like that's part of the UI that would be very different depending upon the context. For example, what would the message look like? This is meant to just be a backend utility function.

john_111 88 Junior Poster in Training

You should display a message acknowledging the upload was successful or that it failed (and why it failed), and perhaps it's new name.

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

Visual Studio 2008?

Yes, the OP specified they are using VS 2008.

Also 12 years late.

Not only not against the rules, but also not discouraged on DaniWeb. That's the beauty of forums that live on for decades.

rajshah85412 30 Newbie Poster

Here is the detailed answer :

You want to:

Register new users to your website.

Validate (log in) existing users using a web service.

You will achieve this by:

Creating a SQL database to store user information.

Developing a web service in ASP.NET to handle registration and login.

Connecting the web service to your database.

Optionally consuming this service from your website front-end.

🔧 Step-by-Step Process
Step 1: Create a Database Table
Start by designing a table in SQL Server where user data will be stored. This table should include fields like:

Username

Password (you can later add encryption)

Email address

This table will be used to store and retrieve user credentials.

Step 2: Create a New ASP.NET Web Service Project
In Visual Studio 2008:

Create a new website project using the "ASP.NET Web Service" template.

This will give you a .asmx file where you will define the web service methods.

Step 3: Add a Connection to the Database
Use the web.config file to store a connection string. This allows your web service to communicate with the SQL Server database.

Step 4: Create Two Web Service Methods
Define two main methods in your service:

RegisterUser – This method accepts user details (like username, password, and email) and stores them in the database. It checks for existing usernames to avoid duplicates.

ValidateUser – This method accepts login credentials and checks if they match any record in the database. If yes, login is successful.

Step 5: Publish and Test the Service
Once …

rproffitt commented: Visual Studio 2008? Also 12 years late. -4
Dani commented: Replying to older threads is encouraged. Thanks :) +34
Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

I realize I could have done better when coming up with a safe name. As it stands, a file uploaded that has a file name in non-Latin characters will just end up with a bunch of underscores. I’m not even sure if that suffices as a file name, but for sure there will be collisions as multiple files are attempting to be saved with the same _ name.

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

Status update: we now use Cloudflare’s free rate limiting functionality. Back when I wrote this, Cloudflare charged for rate limiting. Note we have a Business account.

Biiim 182 Junior Poster

I felt like some fun, so I just put together an example for you using CDN's and bootstrap 5.

From what you are talking about you probably want to put some of that logic into the Javascript and not need to send a server request for each one, I usually do this kind of thing with javascript objects/arrays (eg settings['GB']['visa_req'] = false;settings['IN']['visa_req'] = true; then populate the form based on a selected country code) but it is up to you as long as you get something working. Just keep in mind that anything in Javascript can be messed around with, you need to make sure that the Server side controls the workflow - IE if a VISA is required you need to make sure the PHP checks it on the server side and don't trust the Javascript data as someone could flip it to false. I usually make arrays in PHP from a database and generate Javascript arrays from the PHP array so I don't have to make things twice, then on saving the PHP script always checks the database or PHP code for the actual value. Real users don't mess with the javascript so just be aware of possible ways of cheating the system and stop it from working but the real users will just use it as you programmed it.

I didn't include in my example an ajax request to a PHP page, my advice on that would be to print out messages at all the stages so …

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

Here's a quick bit of code to upload a file in PHP.

rproffitt commented: I always liked little Johnny Drop Tables. +17
Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

I happily just discovered the Cache-Control rules stale-if-error and stale-while-revalidate. I came across an article on Cloudflare's site that says that those two directives are ignored if CF's Always Online feature is enabled, so I've gone ahead and disabled that. However, I'm confused by the following quote:

The stale-if-error directive is ignored if Always Online is enabled or if an explicit in-protocol directive is passed. Examples of explicit in-protocol directives include a no-store or no-cache cache directive, a must-revalidate cache-response-directive, or an applicable s-maxage or proxy-revalidate cache-response-directive.

We do use s-maxage. Does that mean that stale-if-error is always ignored? An example of something we have is this:

Cache-Control: max-age=3600, s-maxage=86400, stale-while-revalidate=3600, stale-if-error=604800, public

Given the above, when is s-maxage considered "applicable" to override stale-if-error?

polcreation 0 Newbie Poster

I know that this is probably a hopeless question, but are there any automated scripts that would reliably and automagically convert my thousands upon thousands of lines of jQuery code into native Javascript?

Maybe try Haxe.org

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

This obviously does not make sense to do if you want to create or work with a User object or something of that sort.

I realize that in my previous post I incorrectly gave the example of $user = new stdClass(); $user->nickname = 'Dani';. My intention was not to say that it was good coding practice to represent a user of the app with an object of a generic type and dynamically start setting its properties. I meant to only illustrate that syntactically it was permitted. Perhaps incorrectly, I chose to demonstrate by continuing with the same user example that was used in the tutorial.

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

The first I agree would not make much sense to do because one would presume that the User class has its own set of getters and setters for a reason, and just creating random properties on a whim defeats the purpose of organizing and structuring your code by having the class in the first place. Nevertheless, I ran into this exact issue while trying to make the latest version of CodeIgniter 3 (which has now been deprecated in favor of CodeIgniter 4.x) compatible with PHP 8.2/8.3. As hinted above, the built-in Image_lib controller class that manipulates images does, indeed, create dynamic properties.

The second, which you say is worse, is something that I have been guilty of in the past when it comes to temporary variables that, for whatever reason, I want to be an object instead of an array. IMHO, there are two easy ways to create temporary objects:

// Create a PHP object and set 2 properties
$temp_obj = new StdClass();
$temp_obj->foo = 'bar';
$temp_obj->baz = 'bat';

// Create a PHP array with 2 elements
$temp_arr = array(
    'foo' => 'bar';
    'baz' => 'bat';
);

// Convert a PHP array to a PHP object
$temp_obj = json_decode(json_encode($temp_arr));

This obviously does not make sense to do if you want to create or work with a User object or something of that sort. However, if your code requires a quick way of creating and working with a simple object, either of these methods should suffice. Doing a cursory glance at …

jkon 689 Posting Whiz in Training Featured Poster

I can't get it , why anyone would want to
$user = new User(); $user->nickname = 'Dani';
if nickname is not a public property of User , or even worse
$user = new stdClass(); $user->nickname = 'Dani';
?
Why ?

groverharleen 0 Newbie Poster

Hello,

please use developer tool while working on HTML/PHP with AJAX.
in the console you can easily track what was the POST/GET request made to PHP file and what is the responses shared by PHP file.

try debugging response accordingly or if still you face any trouble, please do share screen shot of Header / Request / Response Tabs. i'll guide you from here what is needed.

Regards,
Harleen Grover
Best Web Dealers

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

Oh, and an important bit I forgot to mention: PHP's built-in stdClass has the #[AllowDynamicProperties] attribute already added. In fact, you can see in the PHP docs that the definition of the stdClass is "a generic empty class with dynamic properties." That means that you can always be safe doing things like:

$user = new stdClass();
$user->nickname = 'Dani';
Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

In my increasingly futile attempt to remain using the now-defunct CodeIgniter 3 framework, I came across something that I figure might be worth sharing in case anyone else is maintaining older PHP codebases and suddenly things start breaking after a PHP upgrade.

With PHP 8.2, there’s a new warning that’s catching a lot of people off guard: dynamic properties are now deprecated. What that means is, you can no longer just assign a new property to an object without explicitly declaring it first in the class. If you do, PHP throws a warning like:

Creation of dynamic property SomeClass::$foo is deprecated

This happens when you do things like:

$user = new User();
$user->nickname = 'Dani';

If nickname wasn’t already declared in the User class, PHP used to just shrug and let it slide. Not anymore.

Obviously the best thing to do if you encounter this is declare properties ahead of time (obviously). However, if you prefer not to touch and sort through and refactor a lot of old, crusty code that was not written by you, there's an easy fix: Add #[\AllowDynamicProperties] to the top of the class, as so:

#[\AllowDynamicProperties]
class Images extends CI_Controller
{
    ...
}

It's a nice and easy MacGyver patch, until it stops working as well. (DaniWeb is currently on PHP 8.3.8 and it's still working.)

Hope this helps someone!

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

I have moved your post into the web development forum instead of the advertising/marketing forum where it was and tagged it appropriately.

Can you please provide the Javascript code as well as PHP code that is buggy so that we can help diagnose this for you. For example, if the JSON response is empty, it is most likely because of a bug in the PHP code. If the DOM doesn't reflect the new message, then that's a javascript issue.

What’s the best structure to manage these types of dynamic, country-specific conditions without hardcoding everything in JS?

I would store them in some form of database that PHP would have access to, and pass back ot javascript. None of the specific conditions should be hardcoded in javascript. I'm confused what you mean by hardcoding country-specific conditions in javascript, and yet using AJAX to have the PHP check a list. Do you mean the country-specific conditions are hardcoded in PHP instead of PHP utilizing a database?

Please provide your code :)

eservices 0 Newbie Poster

I’m working on a travel planning form that adjusts based on the selected nationality. For example, if someone picks a country like India, the form should display whether they need an electronic visa for places like Sri Lanka, and maybe show a short message or guide link.

I’m using JavaScript to detect changes in a <select> dropdown and send that to a PHP file via AJAX. The PHP checks a list and responds with JSON.

But I’m running into a few issues:

Sometimes the JSON response is empty, even though it works in the browser.

Other times, the DOM update doesn’t reflect the new message.

What’s the best structure to manage these types of dynamic, country-specific conditions without hardcoding everything in JS?

Any feedback appreciated — especially if you’ve done something similar for multi-country forms.

✅ This version:

Avoids links and commercial terms

Focuses on technical workflow (AJAX, PHP, JSON)

Mentions <link removed by moderator> as an example, not a pitch

geekinformatic 0 Newbie Poster

Hey! If you're using the CakePHP framework, you can connect to the Pinterest API with cURL and OAuth integration. Just follow Pinterest’s API docs for endpoints and token handling.

Montasser_1 0 Newbie Poster

Use mb_substr() instead of substr(). It handles multibyte characters and emojis correctly.

Here is the correct code:

$text = "私の名前はダバーです👩‍🚀";
$length = mb_strlen($text, 'UTF-8');
$new_text = mb_substr($text, 0, $length - 1, 'UTF-8');
echo $new_text;

https://flatcoding.com/tutorials/php/php-remove-last-character-from-string/
This code removes the last character without breaking the text

Thank you so much, it worked

MAY_261 0 Newbie Poster

Use mb_substr() instead of substr(). It handles multibyte characters and emojis correctly.

Here is the correct code:

$text = "私の名前はダバーです👩‍🚀";
$length = mb_strlen($text, 'UTF-8');
$new_text = mb_substr($text, 0, $length - 1, 'UTF-8');
echo $new_text;

https://flatcoding.com/tutorials/php/php-remove-last-character-from-string/
This code removes the last character without breaking the text

larsmw commented: What about mb_rtrim() ? It should do the job also +0
Montasser_1 0 Newbie Poster

I try to remove the last character from a string with Japanese text and emojis using this code:

<?php

$text = "私の名前はダバーです👩‍🚀";
$new_text = substr($text, 0, strlen($text) - 1);
echo $new_text;

The output breaks the characters and shows garbage. How do I fix this?

Reverend Jim 5,259 Hi, I'm Jim, one of DaniWeb's moderators. Moderator Featured Poster

Those guidelines have essentially applied to any software with a user interface over the last fifty years.

Reminds me of a scene from"Third Rock From the Sun". Don (policeman) talking about a cop's life, ends with "and any day you come home alive is a good day." Tommy replies, "isn't that pretty much a good day for everyone?"

Or like saying the key to successful stock investments in 2025 is to buy stocks when they are low and sell them when they are high.

Ramesh sharama -11 Newbie Poster

In 2025, a successful website goes beyond just good looks. It needs to be fast-loading, mobile-friendly, and accessible to all users. Strong user experience (UX), clean navigation, and clear calls to action are essential. Integrating SEO best practices, secure protocols (HTTPS), and scalable backend systems is also vital. Websites should be responsive, optimized for Core Web Vitals, and designed with performance and user engagement in mind. Regular updates and user feedback loops help keep the site relevant and effective.

If you have suggestions or feedback on this question, please reply with your response and share your knowledge about web development.

Reverend Jim commented: Too generic and obvious to be useful. -3
Dani commented: AI generated? -8
trcooke 34 Newbie Poster

This feels like a solved problem. Have you done any research for existing "off the shelf" property sales / real estate website solutions? I would start there as it could save you and your client a whole bunch of time and money compared to building one yourself from scratch.

kearawill -12 Newbie Poster

Hey developers 👋

I’m working on a new project for a client — a estate agency Ilford, and I’m wondering how much of this could be streamlined or even built with AI tools?

The site needs standard features like:

Property listings

Service request forms (for tenants)

Payment gateway

Backend for property managers to update info

Possibly a tenant login area

I’ve used Webflow and WordPress in the past, but I'm curious whether AI tools (like ChatGPT, Copilot, or even no-code builders with AI integration) can speed up the development or help automate backend features.

Anyone here built something similar with AI? What tools or approaches would you recommend?

Appreciate any advice 🙌

Bavadharani_1 0 Newbie Poster Banned

Challenges include:

Cash flow mismanagement

Tax compliance

Budgeting errors

Unprotected IP

Wealth Empires solves all of these with expert services like:

Accurate bookkeeping

GST compliance

Tax planning

Trademark protection

Reverend Jim 5,259 Hi, I'm Jim, one of DaniWeb's moderators. Moderator Featured Poster

Generally speaking you'll get as much effort in the responses as you put into asking the question. In this case next to none.

Balaji_14 0 Newbie Poster Banned

what are the challenges??

Reverend Jim commented: Zero errfort put into the question +0
Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

I don’t personally know Android development or mobile development at all. However, others here might. Please start a new question by clicking here.

Erussuhsh 17 Newbie Poster

Hi I'm new to android app development can you teach me how to make a app

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

In other words, if you just need days or hours you can do something like $diff->d or $diff->h (All properties available here, but if you want to calculate a runner's start time and end time and then do something like "You ran the race in 08:33:56!" then you could use the format() method to make it easier.

Hope this all makes sense, and glad you got it working. (Also, just to confirm, you now have two datetime-local input boxes and no more date picker on its own, right?

Erussuhsh commented: Hi can you help me Dani +0
Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

Also just one more question regarding your code, I will have to minus 1 hour from the total hour difference, do I have to use the %h - 1?

Just in case you haven't figured this out yet, the answer is no :)

In my code above, see where I am showing you what $diff looks like on line 15? You should be able to do something like this:

$hours = $diff->h;
$total_hours = $diff->h - 1;
echo "Total hours: $total_hours";

Alternatively, this should also work:

$total_hours = $diff->format('%h') - 1;

This is all untested code. :)

Mr.M 123 Future Programmers

Thank you, you saved me, I've been trying for weeks now. It works now perfectly with your code.

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

Oh goodness, I’m sorry! I made a typo. Remove the new keyword. I’ve edited my post above.

Mr.M 123 Future Programmers

I'm getting an error saying the date_create class can not be found

Mr.M 123 Future Programmers

Thanks, to clarify what I meant regarding the dates is that I have a date input that shows a calendar when a user click on it to choose the date for which the register is being marked for.

Then I also have 2 time inputs one is for timein and the other is for timeout.

Let me try your code and see if it does solve the problem I've been having.

Also just one more question regarding your code, I will have to minus 1 hour from the total hour difference, do I have to use the %h - 1?

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

I am confused when you say the HTML time picker input box can be set to 20:00 for time in and 5:00 for time out, because <input type="time" ...> only allows the end-user to specify a time, not a time and date combination. Should it always be assumed that if the time out is earlier than the time in, that it is the next day? Otherwise, if the time out is later than the time in, should it always be assumed that it is the same day?

Perhaps what you mean to say is that you are using <input type="datetime-local"> which makes a lot more sense, because then the end-user specifies both a date and time together.

Let's assume that the datetime-local control is used and both a start and an end are submitted via an HTTP POST form.

We can now do something such as this:

// Get start and end date/time combos from HTTP form
$start = $_POST['start'];
$end = $_POST['end'];

// Create DateTime objects in PHP for us to work with
$start_object = date_create($start);
$end_object = date_create($end);

// Get the difference represented as a PHP object
$diff = date_diff($start, $end);

// $diff is now a PHP object of how many years, months, days, hours, seconds

// See for ourselves what $diff looks like
var_dump($diff);

// Specify a string that says how to format the time interval
$format = '%d days, %h hours, %i minutes';

// Format the difference in a way we want
echo 'The time difference …
Erussuhsh commented: Hi can you help me Dani +0
Mr.M 123 Future Programmers

Hi DW, I'm trying to mark attendance register which has the date for which that register is being marked for as well as the date which the register is actually marked on.

For Date as well as Marked Date.

I also have two time picker textboxs which one is for time in and the other is for time out.

Now I've been trying to use even time diff to get time difference between the two times provided but there are issues, basically timediff doesn't seem to work proper it also bring like 18 where it means to bring 8,there's always that first digit which confuses everything.

Another problem is that the register can be marked for anytime meaning it can also be marked for let say 20:00 to 05:00AM the next day morning also it can be marked for 02:00AM to 11:00AM which means the shift started from 2 in the morning to 11 am of the same day and so on.

Basically it can be for anytime at and day and it can even cross days now the problem is also properly calculating how many hours and minutes apart.

Does anyone know a way to tackle this as I've said I've tried using time difference but it's not working as it should.

ashishkumar56 0 Newbie Poster

Creating a porn website isn’t bad if you approach it with the right mindset and follow the law. You’ll need adult-friendly hosting, clear age checks, and strong privacy protection. It's easy to lose focus, so treat it like a business.

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

I feel like the solution might be in that blog

It's not. The blog article whose link was snipped has nothing to do with API authorization errors.

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

OK, I'm a little confused. You're an SEO guy who linked to a blog article about 401 errors on an SEO firm's website. The link to that article was snipped from your post for being self-promotional in nature. (I assumed you were just trying to get the backlink.) However, you're saying the 401 error is from using the Auth0 API. Can you post your code that connects to the API please? (And why, as an SEO guy, are you writing API calls?)

Marcus_8 0 Newbie Poster

Yes, I did, but due to some Auth0 guideline, I can't share the link there.

Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

Oh, it looks as if you're referring to auth0, as I see you've also posted over there. It says you've attached a diagram of the request flow but I'm not seeing it.

Marcus_8 commented: https://www.daniweb.com/programming/web-development/threads/543379/why-am-i-getting-a-401-unauthorized-error-when-calling-the-management-api +0
Dani 4,675 The Queen of DaniWeb Administrator Featured Poster Premium Member

What management API?

Marcus_8 0 Newbie Poster

Hi everyone,

I'm getting a 401 Unauthorized error when trying to call the Management API from my web app. I've already checked my token, headers, and API endpoint, but nothing seems to work. However, I’m still confused and can’t figure out where exactly I’m going wrong.

I feel like the solution might be in that blog, but I can’t pinpoint what I’m missing. Has anyone faced a similar issue? Could you help me understand what I should double-check or fix?