2017-06-25 7 views
1

Ich brauche deine Hilfe. Ich stecke an einem Punkt fest, an dem ich nicht herausfinden kann, wie man ein Produkt zweimal am Tag auf einem Webformular verbucht.PHP & MySQL - nicht dieselben Daten einfügen

Ich habe 41 Produkte auf täglicher Basis zu vermieten.

Mein Problem ist: wenn ein Kunde ein Produkt # 4 (pg_no) und das Datum 26-06-2017 bucht, dann kann ein anderer Kunde nicht dasselbe Produkt für den gleichen Zeitraum buchen.

Wenn ein Kunde das gleiche Produkt und das Datum auswählt, dann sollte eine Meldung erscheinen sagen „bereits ausgebucht - bitte wählen Sie ein anderes Datum“

Auch habe ich alles auf Datenbank-Ebene definieren?

Ihre Hilfe wird sehr geschätzt.

Bitte beachten Sie: Diese Regel gilt nur für Produkt # (pg_no) und Datumsfelder sind nicht für den gleichen Tag erlaubt.

<?php 
//connecting string 
include("dbconnect.php"); 
//assigning 
$pg_no=$_REQUEST['pg_no']; 
$name=$_REQUEST['Name']; 
$tele=$_REQUEST['Tele']; 
$city=$_REQUEST['City']; 
$date=$_REQUEST['Date']; 

//checking if pg_no and Date are same 
$check=mysqli_query($db_connect,"SELECT * FROM lstclient WHERE pg_no='{$pg_no}', Date='{$date}'"); 

    if(mysqli_fetch_row($check) ==0) 
    { 
     echo "Already booked please select another date<br/>"; 
    } 
    //if not the insert data 
    else 
    {   
     $query=mysqli_query($db_connect,"INSERT INTO lstclient(pg_no,Name,Tele,City,Date) VALUES('$pg_no','$name','$tele','$city','$date')") or die(mysql_error()); 
     } 
     mysqli_close($db_connect); 

    // messaging 
    if($query) 
     { 
      header("location:index.php?note=failed"); 
     } 
     else 
     { 
      header("location:index.php?note=success"); 
     } 

    ?> 
+0

Sie haben eklatante SQL-Injections, wenn dies jemals auf einem Server das reale Internet verbunden laufen Sie jede Eingabe entkommen muss, die Sie von einem $ _REQUEST erhalten, bevor sie mit einer SQL-Zeichenfolge zu bauen. Ich entkomme alles und es funktioniert großartig. Automatisierte Bots finden dies und essen Ihre Website zum Frühstück. – wedstrom

Antwort

1

erstellen UNIQUE KEY Einschränkung auf dem Tisch zwischen den beiden Spalten.

ALTER TABLE lstclient ADD CONSTRAINT `pg_no_date` UNIQUE (pg_no, date) 

Wenn Sie dann versuchen, eine Zeile einzufügen, die diese Einschränkung verletzt, wird mysql einen Fehler ausgeben. Sie sollten diesen MySQL-Fehler abfangen und mit dem korrekten Fehler antworten.

if(mysqli_errno() == 1062) { 
    // Duplicate key error 
} 
+0

danke phpd und ryan, ihr habt mir wirklich geholfen. –

+0

danke - PHPD und Ryan für Ihre Hilfe. ein weiteres Problem, könnten Sie mir bitte sagen, wie zu beheben - Echo "Bereits gebucht bitte wählen Sie ein anderes Datum
"; –

0

Fügen Sie Ihrer lstclient-Tabelle einen eindeutigen Schlüssel hinzu, wie Ryan vorgeschlagen hat. Auch Ihre Abfrage hat Syntaxfehler, sollte wie folgt sein.

SELECT * FROM lstclient WHERE pg_no='{$pg_no}' AND Date='{$date}'