2016-06-20 19 views
0

Ich habe ein Formular, das von einem Sport-Trainer ausgefüllt wird. Ein Trainer kann mehrere Sportarten haben, die er trainiert, und ein Spieler kann mehrere Sportarten spielen. Wenn also ein Trainer einen Spieler zu einem Team-Roster hinzufügen möchte, muss ich prüfen, ob der Spieler existiert, und wenn dem so ist, dann füge einfach die Spieler-ID zu der Roster-Tabelle hinzu und füge den Spieler nicht erneut zur Spielertabelle hinzu. Unten ist die beste Darstellung dessen, was ich erreichen möchte.

if (isset($_POST['submit'])) { 

$email = mysqli_real_escape_string($con2, $_POST['email']); 

$sql1 = "SELECT id, email FROM users WHERE email='$email'"; 
$result = $con2->query($sql1); 


if ($result->num_rows > 0) { 

//here is where I want to just add specific information 


} //I have tried if $result == 0 and else if $result == 0 


//here is where I would add the user if the email doesn't exist. 

} <-- //I feel like the issue is the if (isset($_POST['submit'])) which end just before this line. 

So bekomme ich gemischte Ergebnisse auf, wo stelle ich das Ende des (isset ($ _ POST [ 'submit'])). Ich versuche herauszufinden, wie man den $ _POST behalten kann, aber nicht alles innerhalb von ausführen. Ich weiß das ziemlich gut, also bitte vergib mir, wenn meine Frage einfach erscheint. Danke, dass Sie sich die Zeit genommen haben, meine Frage zu überprüfen.

ZUSÄTZLICHE INFORMATIONEN So habe ich kein Problem, die Anzahl der Zeilen zu bekommen. Das Problem ist, dass der Benutzer, selbst wenn die E-Mail existiert, in der Benutzertabelle dupliziert wird, aber in den restlichen Tabellen wird der Benutzer nicht dupliziert. Grundsätzlich wird alles innerhalb von (iset ($ _ POST ['submit'])) ausgeführt, was sinnvoll ist, denn wenn das Formular übergeben wird, wird dies als wahr gewertet.

Im Wesentlichen möchte ich ein if sonst innerhalb der (isset ($ _ POST ['submit'])) ausführen, ohne beide ausgeführt werden, wenn das Sinn machen.

+4

** WARNUNG **: Wenn Sie 'mysqli' verwenden, sollten Sie [parametrisierte Abfragen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und [' bind_param' verwenden ] (http://php.net/manual/en/mysqli-stmt.bind-param.php), um Benutzerdaten zu Ihrer Anfrage hinzuzufügen. ** Verwenden Sie ** NICHT ** manuelles Escapen und String-Interpolation oder Verkettung, um dies zu erreichen, weil Sie schwerwiegende [SQL-Injektionsfehler] (http://bobby-tables.com/) erstellen werden, wenn Sie jemals vergessen, etwas richtig zu entkommen. – tadman

+0

versuchen Sie Benutzer zu aktualisieren, die in der Datenbank vorhanden sind? nur wenn er eine email hat? –

+0

Bitte aufhören zu testen 'num_rows' es ist nicht immer zuverlässig - die Daten sind immer. Wenn Sie sich die Ergebnisse nicht ansehen wollen, dann wählen Sie einfach "SELECT count (id) FROM Benutzer WHERE email = '$ email'". Und holen Sie das Ergebnis - es wird _ immer eine Zeile_ mit einer Zählung von Null oder mehr sein. Testen Sie immer "echte Daten", alles andere kann "unzuverlässig" sein. Sie können immer eine 'LIMIT 1' hinzufügen, wenn Effizienz ein Anliegen ist –

Antwort

0

Sie sollten parametrisierte Abfragen verwenden, wie von @tadman vorgeschlagen.

Aber ich werde nicht die Codes kritisieren, sondern schlagen die Funktion auszuprobieren:

mysqli_num_rows($result) 

Dies sollte Anzahl der Zeilen in der Ergebnismenge zurück. Bitte lassen Sie uns wissen, ob Sie das suchen.

+0

Ich lerne langsam das tun und nicht Methoden von PHP, so werde ich sicherlich an der richtigen oder bewährten Methoden des Schreibens von Dingen arbeiten. Ich versuche gerade jetzt, die Dinge im Griff zu haben. Ich werde versuchen, die mysqli_num_rows und sehen, ob dies das Problem behebt. – MBRD

+1

Ich bin froh, dass du lernst :) –

+1

Ok @RyanVincent, du musst das nicht immer wieder sagen. Aber ich muss zustimmen, dass Ihre Lösung zur Verwendung von 'count ($ id)' im @ MBRD-Fall funktionieren würde. Im Allgemeinen möchte ich die Erstellung einfacher SQL-Abfragen vermeiden, da sie zu einer Belastung für die Verwaltung werden können. –

0

ich Ihnen sehr einfaches Beispiel zeigen von mysqli es wünschen Ihnen helfen :)

<?php 
$servername = "localhost"; 
$username = "username";//YOUR USER NAME! 
$password = "password";//YOUR PASSWORD! 
$dbname = "myDB"; //YOUR DB NAME! 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
if (isset($_POST["save"])){ 
    $var1 = $_POST['memberID']; //form parameters 
    $var2 = $_POST['firstName']; //form parameters 
    $var3 = $_POST['surname']; //form parameters 
    $var4 = $_POST['email']; //form parameters 

    //query example 
    $query = "SELECT ".$var4." FROM City ORDER by ID DESC LIMIT 50"; 

    if ($result = $conn->query($query)) { 

    /* fetch object array */ 
    while ($row = $result->fetch_row()) { 
     printf ("%s (%s)\n", $row[0], $row[1]); 
    } 

    /* free result set */ 
    $result->close(); 
} 
$conn->close(); 

?> 

Sie this Seite zu sehen. möge es dir helfen zu verstehen, wie es funktioniert!

0

Haben Sie versucht:

.... 
$query = "SELECT* FROM City WHERE email=".$var4.""; 

    if ($result = $conn->query($query)) 
    { 
    if($result != " "){}//the player exist->DO SOMETHING 
    else{}//DO SOMETHING//the player not exist->DO SOMETHING 
    } 
... 

vielleicht habe ich dich nicht gut verstehen: |