Avatar billede blackunicorn Nybegynder
29. oktober 2014 - 21:49 Der er 5 kommentarer og
1 løsning

Check om nummer allerede eksisterer

Jeg har en lille side hvor folk kan tilmelde sig en sms liste.

Er der nogen der kan fortælle mig hvordan jeg får den til at tjekke, om nummeret allerede eksisterer i databasen ?

form.html
http://pastebin.com/nHPNYsiy

save.php
http://pastebin.com/pGcXbVd1
Avatar billede michael_stim Ekspert
29. oktober 2014 - 21:58 #1
Der er mange måder at gøre det på. Lav feltet i databasen unikt f eks, eller check om nummeret allerede eksisterer med en almindelig SELECT, før du inserter. Blot to måder at gøre det på.
Avatar billede olsensweb.dk Ekspert
29. oktober 2014 - 22:34 #2
du kunne lave en simpel select på id og en where betingelse med tlf = $tlf, som michael også skriver
løsning 1
tælle antal rækker det retunerer http://php.net/manual/en/mysqli-result.num-rows.php
er antal rækker størrer end 0 så findes det

løsning 2
du kan fetche resultatet, og kan dette lade sig gøre er der et resultat og id bliver sat, derefter tester du om id størrer 0 og er det det findes det
(utested)
     
<?php
$navn = $_POST['navn'];
$tlf = $_POST['tlf'];

// Create connection
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}


$sql = "SELECT id FROM smsliste WHERE tlf = '$tlf'"; // antager $tlf er uniq derfor ikke AND navn='$navn'
$rs = $conn->query($sql);
/* løsning 2 start
$id = 0;
if ($rs) {
    $row = $rs->fetch_assoc();
    $id = $row['id'];
    $rs->free();
}
if ($id > 0) {
løsning 2 slut */
   
$row_cnt = $rs->num_rows;  // løsning 1 start
if($row_cnt>0){            // løsning 1 slut

    echo "nummeret findes allerede";
} else {

    $sql = "INSERT INTO smsliste (navn, tlf) VALUES ('$navn','$tlf')";
    if ($conn->query($sql) === TRUE) {
        echo 'Tak for din tilmelding';
        die();
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
}
$conn->close();
?>
Avatar billede arne_v Ekspert
30. oktober 2014 - 01:17 #3
Jeg vil varmt anbefale loesningen med unikt indeks og fange fejl i INSERT.

SELECT og INSERT hvis den ikke findes loesningen ender normalt med noget skod kode som ikke er fler-bruger sikkert.

Hvis det skal laves rigtigt saa skal SELECT og INSERT puttes i samme transaktion og transaction isolation level skal vaere repeatable read eller serialized.

(og husk for MySQL at MyISAM ikke understoetter transaktioner - InnoDB eller andet er noedvendigt)
Avatar billede blackunicorn Nybegynder
04. november 2014 - 17:21 #4
ronols jeg brugte din løsning nr 2 og det virkede :)
Tak for hjælpen til ronols og andre der har givet deres input med.

ronols smid et var så skal du få point :)
Avatar billede olsensweb.dk Ekspert
05. november 2014 - 13:57 #5
får du her
Avatar billede arne_v Ekspert
13. november 2014 - 16:15 #6
Husk at kryds fingre for at koden ikke dukker op paa thedailywtf.com om nogle aar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester