Avatar billede _what_ Nybegynder
13. september 2006 - 10:05 Der er 20 kommentarer og
1 løsning

Like søgning ud fra felt

Jeg har en side hvor jeg skal finde en mail adresse ved hjælp af en søgning. Problemet er at flere mails er rodet dvs. at der er et mellemrum før eller efter adressen, derfor kan jeg ikke finde dem direkte med WHERE =.

Jeg er nød til at bruge noget LIKE %% halløj men har lidt bøvl med at få den til at virke.

Jeg skal have lavet du med den her kode..

$mailname = mysql_query("SELECT * FROM  mail_systen WHERE m_email LIKE '%". $_POST["email"] ."%'") or die(mysql_error());
$count = (mysql_num_rows($mailname));
if($count == 1) {

Jeg vil tro mit problem ligger i at få styret " og ' korrekt.

Nogen der kan få skruet den rigtig sammen.
$_post kommer selvfølgelig fra en form på siden og søgning bliver lavet når mail er indtastet i feltet og der trykkes ok.

Håber der nogen som kan hjælpe.
Avatar billede spyrodrag Nybegynder
13. september 2006 - 10:50 #1
Hej.

Du skriver FROM mail_systen. Skulle det ikke have været: mail_system?

Hvis det ikke er fejlen, så prøv at skrive = i stedet for LIKE. :-)

Venlig hilsen,
Martin.
Avatar billede onkel_satan Nybegynder
13. september 2006 - 10:53 #2
hmm det lyder maerkeligt, jeg har lige proevet på min egen maskine og det virker fint.
Kan se at du checker om du har fået et hit. Er du sikker på at du ikke får mere end 1 hit ?
Proev etc. at skrive $count ud og se hvor mange rows den har returneret.
Avatar billede _what_ Nybegynder
13. september 2006 - 11:10 #3
Det er mail_systen jo og jeg kan netop ikke bruge = som jeg også skriver.

Onkel_satan ahh det var jo fordi at lige præcis den mail jeg testede med var der to gange. Hvis jeg ændre til $count => 1 så for jeg bare en blank side.

Det der skal ske er at den søger på en mail og og hvis den findes i databassen skal den slettes.

Er der en nem måde jeg kan gå databasen igennem for dubletter ??
Avatar billede _what_ Nybegynder
13. september 2006 - 11:24 #4
Jeg har nu funder dubletter ved hjælp af følgende...

select m_email, count(m_email) as antal from mail_systen group by m_email having count(m_email)>1

Det giver mig en fin liste over de mails der står der flere gange og hvor mange gange de står der... der er dog ikke nogen nem måde til at trykke på dem og slette den ene. Da den finder lige godt 500 ville det være rart at kunne komme igennem dem lidt nemmere end kopiere og søg ved dem alle sammen....
Avatar billede onkel_satan Nybegynder
13. september 2006 - 11:46 #5
Nu ved jeg ikke praecis hvad der er din side goer, men jeg ville nok forslå at forbygge imod dubeltter. Dette kan du goere ved at goere dit m_email felt unikt. Så skal mysql nok brokke sig hvis du forsoeger at indsaette en eksisterende email adresse.
Hvis du allerede har en database med dubletter i ville jeg lave et midlertidigt script i php til at rense ud med. Foerst koere du en "select m_email, count(m_email) as antal from mail_systen group by m_email having count(m_email)>1" for at finde alle dubletterne. Derefter kan du loope alle dubletterne igennem og slette dem en af gangen, du kan f.eks. springe den foerste over og slette resten.
Avatar billede _what_ Nybegynder
13. september 2006 - 12:13 #6
Der kan ikke oprettes nye dubletter i systemet men jeg har hentet en gammel database ind som en anden har lavet og der er nogen i.

Jeg kan nemt finde dem frem som jeg skrev jeg har gjort.. men hvordan løber jeg resultatet igennem og sletter de forskellige uden at slette alle... hvis der er 4 som er ens skal den jo kun slette de 3. Hvis 2 ens kun slette 1 osv...

Er jeg nød til at gå dem igennem manuelt eller kan man kode sig ud af noget ??
Avatar billede onkel_satan Nybegynder
13. september 2006 - 13:18 #7
Noget ale det her

sql_connect();
$sqlQuery = "select m_email from mail_system group by m_email having count(m_email)>1";
$reuslt = sql_hent_funktion($sqlQuery);
foreach($result as $row){
    $sqlQuery = "SELECT id FROM mail_system WHERE m_email='".$row[0]."'";
    $result2 =  sql_hent_funktion($sqlQuery);
    for($i=1; count($result2) > $i; $i++ ){ // Her springer vi den foerste over (hvis vi ville slette alle skulle $i=0) og sletter resten
        $row2 = $result2[$i];
        $sqlQuery2 = "DELETE FORM mail_system WHERE id='".$row2[0]."'";
        sql_query_funktion($sqlQuery2);
    }
}
sql_close();
Avatar billede _what_ Nybegynder
13. september 2006 - 13:29 #8
Har nu lavet en php fil med følgende kode. Det virker dog stadig ikke :(

Jeg ved ikke lige hvad der går galt. Det ID du selecter på et tidspunkt hva er det for et ??

Smid et svar om alle omstændigheder så du kan få nogle points.

<?
include ("mysql_connect.php");
mysql_connect($host,$user,$pass);
mysql_select_db($db);

$sqlQuery = "select m_email from mail_systen group by m_email having count(m_email)>1";
$reuslt = sql_hent_funktion($sqlQuery);
foreach($result as $row){
    $sqlQuery = "SELECT id FROM mail_systen WHERE m_email='".$row[0]."'";
    $result2 =  sql_hent_funktion($sqlQuery);
    for($i=1; count($result2) > $i; $i++ ){ // Her springer vi den foerste over (hvis vi ville slette alle skulle $i=0) og sletter resten
        $row2 = $result2[$i];
        $sqlQuery2 = "DELETE FORM mail_systen WHERE id='".$row2[0]."'";
        sql_query_funktion($sqlQuery2);
    }
}

?>
Avatar billede onkel_satan Nybegynder
13. september 2006 - 13:53 #9
ohh ja.. glemte jeg lige at naevne hehe... tror jeg mp have gang i kaffemaskinen

Ovenstående virker kun hvis dine raekker har en unik atribute som f.eks. et id nr. (jeg gaettede bare på at du havde det og var kaldt ID). Hvis ikke du har en unik attribute er ikke muligt at pege på en specifik raekke.

Og så skal du lige huske at 'sql_hent_funktion()' og 'sql_query_funktion()' er fiktive funktion. De findes ikke med mindre du selv implementer dem.
Jeg kan klart anbefale at laver en mysql.php fil hvor du har dine sql funktioner. Det goer meget hurtigere (og paenere)at lave database kald.

Du kan få den jeg bruger, så slipper du selv for at lave den.
Gem det her i en mysql.php fil

function sql_connect() {
  $server = "localhost";
  $bruger = "root";
  $kodeord = "";
  $_database = "";

  if (!mysql_connect("$server","$bruger","$kodeord")) {
    udskriv_fejl("Kunne ikke oprette en forbindelse til MySQL.");
  }

  if(!mysql_select_db("$_database")) {
    udskriv_fejl("Kunne ikke vælge databasen: $database");
  }
}

function sql_query_anwser($query) {
  $resultat = mysql_query($query);

  if(!$resultat) {
    udskriv_fejl("Kunne ikke udføre: <em>$query</em>");
  }

  while($raekke = mysql_fetch_array($resultat)) {
    $resultat_array[] = $raekke;
  }

  return $resultat_array;
}

function sql_query($query) {
  $resultat = mysql_query($query);

  if(!$resultat) {
    udskriv_fejl("Kunne ikke udføre: <em>$query</em>");
  }
    return true;
}

function sql_close() {
  if(!mysql_close()) {
    udskriv_fejl("Kunne ikke lukke forbindelsen til MySQL!");
  }
}

function udskriv_fejl($fejl) {
  echo "<p>$fejl";

  if ($mysql_fejl = mysql_error()) {
    echo "<br>Fejlen er: <em>$mysql_fejl</em>";
  }

  exit;
}

Fra nu af skal du bare skrive include('mysql.php');
og saa kan du fyre dine database kald af ved bare ar skrive

sql_connect();
sql_query("INSERT INTO tabel SET navn='Christian'"); // bruges til indsaet, slet redigere
$result = sql_query_anwser("SELCET * FROM tabel"); // Bruges til hente fra fra databasen
sql_close();
foreach($result as $row) echo $row[0] // Udskriver: Christian
Avatar billede _what_ Nybegynder
13. september 2006 - 14:09 #10
Jeg har en id række som er primære og selvfølgelig uniq. Skulle bare være sikker på det var det du mente :)

Jeg connecter jo til databasen øverst i filen med mysql connect og den del virker fint nok er det samme jeg bruger alle steder :)

Har lige retet det lidt til nu så det bruger den id jeg har

<?
include ("mysql_connect.php");
mysql_connect($host,$user,$pass);
mysql_select_db($db);

$sqlQuery = mysql_query ("select m_email from mail_systen group by m_email having count(m_email)>1" or die(mysql_error());
$reuslt = sql_hent_funktion($sqlQuery);
foreach($result as $row){
    $sqlQuery = "SELECT m_id FROM mail_systen WHERE m_email='".$row[0]."'";
    $result2 =  sql_hent_funktion($sqlQuery);
    for($i=1; count($result2) > $i; $i++ ){ // Her springer vi den foerste over (hvis vi ville slette alle skulle $i=0) og sletter resten
        $row2 = $result2[$i];
        $sqlQuery2 = "DELETE FORM mail_systen WHERE m_id='".$row2[0]."'";
        sql_query_funktion($sqlQuery2);
    }
}

?>

Nu er det vel fint nok ned til din sql_hent_funktion. Går ud fra det er der den går galt i byen...
Avatar billede onkel_satan Nybegynder
13. september 2006 - 14:18 #11
Yep.. du skal bare have rettet mysql kaldende til. Vil klart anbefale dig at bruge de funktioner jeg har givet dig. De goer det saa meget nemmere og simplet, plust at den udskriver sql fejlen hvis der skulle vaere nogen.
Avatar billede _what_ Nybegynder
13. september 2006 - 14:26 #12
Har nu lavet en fil med nøjagtig det du skrev og smidt op og lavet følgende kode i php fil også. Når jeg går ind på siden for jeg bare en hvid side ingen reaktioner eller fejl.
<?
include ("mysql.php");

$sqlQuery = "select m_email from mail_systen group by m_email having count(m_email)>1";
$reuslt = sql_hent_funktion($sqlQuery);
foreach($result as $row){
    $sqlQuery = "SELECT m_id FROM mail_systen WHERE m_email='".$row[0]."'";
    $result2 =  sql_hent_funktion($sqlQuery);
    for($i=1; count($result2) > $i; $i++ ){
        $row2 = $result2[$i];
        $sqlQuery2 = "DELETE FORM mail_systen WHERE m_id='".$row2[0]."'";
        sql_query_funktion($sqlQuery2);
    }
}

?>
Avatar billede onkel_satan Nybegynder
13. september 2006 - 14:32 #13
sql_hent_funktion() og sql_query_funktion() var bare nogle jeg greb ud af den blå luft.
Hvis du bruger den mysql.php fil (hvilket du siger du goer) hedder de sql_query_anwser() og sql_query()
Avatar billede onkel_satan Nybegynder
13. september 2006 - 14:34 #14
Husk sql_connect() og sql_close() også :)
Avatar billede _what_ Nybegynder
13. september 2006 - 14:48 #15
Ja ok det var lidt en koger fra min side at glemme det... har lige smidt det ind men problemet er det samme :(
Avatar billede onkel_satan Nybegynder
13. september 2006 - 15:02 #16
nu har du vel husket at saette
$kodeord = "dit_kodeord";
$_database = "din_database";
?
Jeg har ikke selv afproevet koden saa jeg kan ikke garantere at det virker men jeg kan ikke se hvorfor det ikke skulle virke. Proev evt. at debugge lidt på det. Om ikke andet så burde du kunne se ideen med koden.
Avatar billede _what_ Nybegynder
13. september 2006 - 15:13 #17
Kan godt se ideen ja og har selvfølgelig husket at udfylde de ting ellers havde jeg vel også fået en fejl havde jeg ikke...

Kan sgu ikke se fejlen i det :((

Husk og smid et svar :)
Avatar billede _what_ Nybegynder
13. september 2006 - 15:16 #18
De ting som sql_hent_funktionen er vel stadig ikke defineret eller er de ??

Koden:::

<?
include ("mysql.php");
sql_connect();
$sqlQuery = "select m_email from mail_systen group by m_email having count(m_email)>1" or die(mysql_error();
$reuslt = sql_hent_funktion($sqlQuery);
foreach($result as $row){
    $sqlQuery = "SELECT m_id FROM mail_systen WHERE m_email='".$row[0]."'" or die(mysql_error();
    $result2 =  sql_hent_funktion($sqlQuery);
    for($i=1; count($result2) > $i; $i++ ){
        $row2 = $result2[$i];
        $sqlQuery2 = "DELETE FORM mail_systen WHERE m_id='".$row2[0]."'" or die(mysql_error();
        sql_query_funktion($sqlQuery2);
    }
}
sql_close();
?>
Avatar billede onkel_satan Nybegynder
13. september 2006 - 15:21 #19
Ok retter lige det hele til saa :D

include ("mysql.php");
sql_connect();
$sqlQuery = "select m_email from mail_systen group by m_email having count(m_email)>1" ;
$reuslt = sql_query_anwser($sqlQuery);
foreach($result as $row){
    $sqlQuery = "SELECT m_id FROM mail_systen WHERE m_email='".$row[0]."'";
    $result2 =  sql_query_anwser($sqlQuery);
    for($i=1; count($result2) > $i; $i++ ){
        $row2 = $result2[$i];
        $sqlQuery2 = "DELETE FORM mail_systen WHERE m_id='".$row2[0]."'";
        sql_query($sqlQuery2);
    }
}
sql_close();


sådan der
Avatar billede _what_ Nybegynder
13. september 2006 - 15:56 #20
Fatter minus det vil bare ikke virke for stadig bare en blank hvid side uden der sker noget som helst :(
Avatar billede _what_ Nybegynder
16. november 2006 - 12:05 #21
fixet
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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