Bonjour,
Le plus simple c'est de le faire en PHP car mysql ne sert pas à faire des conditions aussi complexes. D'autant que la date, vous allez l'insérer en PHP, donc il n'y a pas grand chose à rajouter.
On suppose que dans la table de votre base de données, vous avez la date d'enregistrement. Pour limiter à 30 par jour, il faudra au préalable vérifier dans la table le nombre d'enregistrement pour la journée. Par exemple ça donnera :
$sql = "SELECT COUNT(date) AS nbenregistrements FROM table WHERE date = now()";
$req = mysql_query($sql);
$enreg = mysql_fetch_array($req);
$datedemain = time() + (24 * 60 * 60); // ajout de 24h en secondes
$sqldate = ($enreg['nbenregistrements'] > 30) ? date("Y-m-d", $datedemain) : date("Y-m-d", time());
Par contre votre condition peut poser problème telle quelle donc faites attention.
Par exemple si un jour vous avez 70 demandes d'enregistrements, il faudra que la date se mette sur après demain et non demain. Et si c'est vraiment cela que vous souhaitez faire (reporter d'un jour tous les 30 enregistrements), il faudra utiliser le quotient (avec floor). Ca donnera quelque chose comme ça :
$sql = "SELECT COUNT(date) AS nbenregistrements FROM table WHERE date = now()";
$req = mysql_query($sql);
$enreg = mysql_fetch_array($req);
$nbjourstoadd = floor($enreg['nbenregistrements'] / 30);
$datecalculee = time() + ($nbjourstoadd * 24 * 60 * 60); // ajout de 24h en secondes
$sqldate = ($nbjourstoadd < 1) ? date("Y-m-d", time()) : date("Y-m-d", $datecalculee);
Et pour les 15h30, le principe est à peu près le même, sauf qu'il faudrait créer le "timestamp" (traduction en secondes depuis le 1er jan 1970) de la date d'aujourd'hui à 15h30, que vous allez pouvoir comparer avec le timestamp courant (on l'obtient avec time() ) :
$month = date("m", time());
$day = date("d", time());
$year = date("Y", time());
$ts1530 = mktime(15, 30, 0, $month, $day, $year);
$tsnow = time();
$datedemain = time() + (24 * 60 * 60); // ajout de 24h en secondes
$sqldate = ($tsnow > $ts1530) ? date("Y-m-d", $datedemain) : date("Y-m-d", $tsnow);
Ensuite le $sqldate qui résulte de ces opérations sera la date à insérer en base de données.
C'est fait grossièrement, à vous de l'adapter suivant le nom de votre table, le type de votre champ date (car attention le
WHERE date = now() compare au jour/mois/année si le champ date est ainsi, mais si votre champ date est un timestamp ou prend en compte les secondes la comparaison ne passera plus, il faudra faire autrement).