ilch Forum » Allgemein » HTML, PHP, SQL,... » Sql id suchen und gruppe ausgeben

Geschlossen
  1. #1
    User Pic
    XxMaTzExX Mitglied
    Registriert seit
    28.05.2008
    Beiträge
    1.039
    Beitragswertungen
    14 Beitragspunkte
    Hallo,

    ich versuch ja nach wie vor php zu lernen...

    ich wollte so kleine art von "kunden verwaltung" schreiben.

    ich lasse mit diesem hier die kunden in einer dropdown anzeigen und wähle sie aus. ich lasse die id mitgeben vom auto_increment um die gruppe zu finden.

    <?php
    
    
    	
    $abfrage ="SELECT `vorname`, `nachname`, `kunde`, `id` FROM `kunden` ORDER BY `kunde`" ;
    
        echo '<form action="index.php?changekunde" method="POST">';
    echo 'Kunden auswählen: <select name="liste">';
    $ergebnis = mysql_query($abfrage);
      while($row = mysql_fetch_object($ergebnis))
        {
    
    echo '<option value="'.$row->id.'">'.$row->vorname.' '.$row->nachname.' , '.$row->kunde.'</option>';
    
    
        }
    	echo '</select>';
    	echo '<input type="submit" style="margin-left:5px;" value="weiter..">';
      ?>




    so nun möchte ich mit dem nächsten script einfach anhand der id die komplette gruppe ausgeben, habe jetzt schon viele versuche unternommen aber leider keine lösung gefunden :-(

    <?php
    
    $liste = $_POST['liste'];
    
    $sql = "SELECT `kunde`, `id` FROM `kunden` WHERE id >".$liste."";
    $erg = db_query($sql);
    while ($row = mysql_fetch_array($erg))
    {
        echo $row->kunde;
    	} 
    
    ?>


    aber ich glaube hier bin ich auf dem holzweg...danke schonmal für die hilfe!
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Ithron Hall Of Fame
    Registriert seit
    21.01.2006
    Beiträge
    2.659
    Beitragswertungen
    24 Beitragspunkte
    1. Ach, ich lass die blöden Beispiele.. welche Fehlermeldung kommt? (siehe dazu meine Signatur, 2. Teil lächeln )

    2. Du kannst nicht $row->field machen wenn du mysql_fetch_array genutzt.


    Zuletzt modifiziert von Ithron am 01.09.2009 - 16:44:28
    ZitatZitat geschrieben von loW

    Ja ich habs gesehen und wenn ichs kostenlos bekomm dann zahl ich doch nix dafür oder?
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    XxMaTzExX Mitglied
    Registriert seit
    28.05.2008
    Beiträge
    1.039
    Beitragswertungen
    14 Beitragspunkte
    da ich ja array hingeschrieben hab ich vogel kam da ja keine error meldung...

    ZitatZitat
    MySQL Error:
    1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    in Query:
    SELECT `kunde` FROM `kunden` WHERE id >

    Debug backtrace:
    @ mysql.php:32 -- debug_bt()
    @ mysql.php:50 -- db_check_error(...)
    @ changekunde.php:6 -- db_query(...)
    @ self.php:71 -- require_once(...)
    @ index.php:24 -- require_once(...)

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /srv/www/vhosts/xbox-cup.net/httpdocs/include/contents/selfbp/selfp/changekunde.php on line 7



    <?php
    
    $liste = $_POST['liste'];
    
    $sql = 'SELECT `kunde` FROM `kunden` WHERE id >'.$liste.'';
    $erg = db_query($sql);
    while ($row = mysql_fetch_object($erg))
    {
        echo $row->kunde;
    	} 
    
    ?>
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Ithron Hall Of Fame
    Registriert seit
    21.01.2006
    Beiträge
    2.659
    Beitragswertungen
    24 Beitragspunkte
    $sql = "SELECT `kunde`, `id` FROM `kunden` WHERE `id` > '$liste'";


    Die ` existieren nicht zum Spaß in MySql. War schon positiv überrascht das du die benutzt (tue es auch weiterhin!), aber bei WHERE id hattest du es vergessen. id ist ein Schlüsselwort für MySql, deswegen gibt es da Probleme.

    Btw: Wenn du " für einen String benutzt kannst du Variablen direkt einfügen ohne vorher den String zu unterbrechen, das ist nur bei ' nötig.


    Zuletzt modifiziert von Ithron am 01.09.2009 - 17:11:22
    ZitatZitat geschrieben von loW

    Ja ich habs gesehen und wenn ichs kostenlos bekomm dann zahl ich doch nix dafür oder?
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Dazzel Mitglied
    Registriert seit
    28.10.2006
    Beiträge
    236
    Beitragswertungen
    1 Beitragspunkte
    Aber die " sind beim PHP-Parser aufwendiger zu parsen und das heißt es geht auf die Performence...

    Aber bei kleinen sachen ist das auch wiederrum egal xDD
    externer Link || Clanpage
    dazzit.de || Meine Hompage
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Ithron Hall Of Fame
    Registriert seit
    21.01.2006
    Beiträge
    2.659
    Beitragswertungen
    24 Beitragspunkte
    Ich benutze " prinzipiell nur für mysql_query, so hab ichs mir einfach angewöhnt. Und es sieht auch sauberer aus wenn man den query nicht tausendmal unterbrechen muss (ab 20 Einträgen macht das auch schon wieder eine beachtliche Menge an '. und .' aus *g*).
    ZitatZitat geschrieben von loW

    Ja ich habs gesehen und wenn ichs kostenlos bekomm dann zahl ich doch nix dafür oder?
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    XxMaTzExX Mitglied
    Registriert seit
    28.05.2008
    Beiträge
    1.039
    Beitragswertungen
    14 Beitragspunkte
    boah super ^^ danke...
    und nochmal danke für eure tipps *hrhr*
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    XxMaTzExX Mitglied
    Registriert seit
    28.05.2008
    Beiträge
    1.039
    Beitragswertungen
    14 Beitragspunkte
    son mist es geht nicht mehr O.o einfach so!

    <?php
     
    $liste = $_POST['liste'] ;
     
          $sql = "SELECT `kunde` FROM `kunden` WHERE `id` >'$liste'";
    
    $erg = mysql_query($sql);
    while ($row = mysql_fetch_object($erg))
    {
        echo $row->kunde;
        }
     
    ?>
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Ithron Hall Of Fame
    Registriert seit
    21.01.2006
    Beiträge
    2.659
    Beitragswertungen
    24 Beitragspunkte
    Zeile 3.. Leerzeichen vor ;

    Ansonsten... sicher das was in der Datenbank eingetragen ist?
    ZitatZitat geschrieben von loW

    Ja ich habs gesehen und wenn ichs kostenlos bekomm dann zahl ich doch nix dafür oder?
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    XxMaTzExX Mitglied
    Registriert seit
    28.05.2008
    Beiträge
    1.039
    Beitragswertungen
    14 Beitragspunkte
    ja bin zu 100% sicher ^^die leerzeile hat auch nichts gebracht
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    GeCk0 Hall Of Fame
    Registriert seit
    01.05.2009
    Beiträge
    2.989
    Beitragswertungen
    96 Beitragspunkte
    <?php
     
    $liste = $_POST['liste'] ;
     
          $erg= db_query("SELECT `kunde` FROM `kunden` WHERE `id` > '".$liste."'");
     
    while ($row = mysql_fetch_object($erg))
    {
        echo $row->kunde;
        }
     
    ?>


    ansonsten probier mal statt $row->kunde einfach $row['kunde']

    ist die variable liste (list) evtl von php reserviert und geht deshalb nicht ? kA


    Zuletzt modifiziert von GeCk0 am 01.09.2009 - 21:09:02
    Alle Module von mir sind nun unter php-gecko.de erreichbar
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    Ithron Hall Of Fame
    Registriert seit
    21.01.2006
    Beiträge
    2.659
    Beitragswertungen
    24 Beitragspunkte
    Tabellenname geändert oder so?

    mach mal vor ?> ein echo mysql_error();
    ZitatZitat geschrieben von loW

    Ja ich habs gesehen und wenn ichs kostenlos bekomm dann zahl ich doch nix dafür oder?
    0 Mitglieder finden den Beitrag gut.
  13. #13
    User Pic
    XxMaTzExX Mitglied
    Registriert seit
    28.05.2008
    Beiträge
    1.039
    Beitragswertungen
    14 Beitragspunkte
    gibt kein error... das komische ich wähle das 1. von 4 aus dann zeigt er das erste nich an aber 2-4 ?.?
    0 Mitglieder finden den Beitrag gut.
  14. #14
    User Pic
    annemarie gelöschter User
    ZitatZitat geschrieben von Ithron
    Btw: Wenn du " für einen String benutzt kannst du Variablen direkt einfügen ohne vorher den String zu unterbrechen, das ist nur bei ' nötig.


    ZitatZitat geschrieben von Dazzel
    Aber die " sind beim PHP-Parser aufwendiger zu parsen und das heißt es geht auf die Performence...


    es hat nicht nur performance gründe, auch die wartbarkeit sielt hier eine rolle, syntaxhighlighter haben unter umständen probleme variablen so hervorzuheben was unter umständen zu einigen gesuche führen kann.

    man sollte sich angewöhnen variablen per konkentation ( "bla: ".$var; ) anzuhängen.
    dies ist ein guter standard mit dem man nichts falsch machen kann.

    das schlimmste negativbeispiel was ich dazu sah war ( "id$bla" ), dies ist unglaublich unlesbar und erschwert die arbeit ungemein.

    darüber hinaus ist es sinnvoll PHP dateien nicht mit "?>" abzuschließen, dies ist NICHT notwendig und beugt whitedpacezeichen nach dem schließenden PHP tag vor die dazu führen würden das Header informationen gesendet werden.

    dies währe fatal für session_start() oder das senden eines eigenen headers z.b. beim generieren und anzeigen einer grafik per GDLibrary.

    so nu zu deinen 2 pastes

    <?php
    
    /**
     * Erstellung derSelect options
     */
    $sql ="SELECT `vorname`, `nachname`, `kunde`, `id` FROM `kunden` ORDER BY `kunde`" ;
    $erg = mysql_query($sql);
    
    $output_list = ''; // Erstinitialisierung
    while($row = mysql_fetch_object($erg))
    {
      $output_list .= '<option value="'.$row->id.'">'.$row->vorname.' '.$row->nachname.' , '.$row->kunde.'</option>';
    }
    
    /**
     * Zusammenstellung der ausgabe
     */
    $output  = '<form action="index.php?changekunde" method="POST">';
    $output .= 'Kunden auswählen: <select name="liste">' . $output_list . '</select>';
    $output .= '<input type="submit" style="margin-left:5px;" value="weiter..">';
    $output .= '</form>';


    <?php
    
    $output = '';
    
    // überprüfung ob das argument überhaupt valide ist um fehler entsprechend zu behandeln
    if (is_numeric($_POST['liste']) {
      $liste = $_POST['liste'];
      
      $sql = "SELECT `kunde`, `id` FROM `kunden` WHERE `id` = " . $liste;
      $erg = mysql_query($sql);
      $row = mysql_fetch_object($erg)
      $output = $row->kunde;
    } else {
      $output = 'Das übergebene argument ist keine gültige Datensatz ID';
    }


    willst du nun ilch datenbankfunktionen benutzen oder standard php funktionen? konsistent bleiben.

    ZitatZitat geschrieben von GeCk0
    ist die variable liste (list) evtl von php reserviert und geht deshalb nicht ? kA


    nein ist sie nicht, es gibt list() womit du z.b. ein array in key und value paare aufteilen könntest. aber das hat nix mit dem problem hier zu tuen.

    ZitatZitat geschrieben von GeCk0
    "SELECT `kunde` FROM `kunden` WHERE `id` > '".$liste."'"


    soweit ich das verstanden habe erzeugt jeder kundendatensatz genau 1 select feld! deshalb verstehe ich den sinn des querys nicht indem etwas gesucht wird wo das feld id größer ist als das übergebene argument!

    in dem von mir gepasteten code habe ich dies umgeändert zu "`id` = $liste" da ich denke hier soll ein bestimmter datensatz geholt werden.
    wenn numerische werte abgefragt werden ist es ausserdem nicht notwendig den wert im query in anführungszeichen einzuschließen, dies ist jedoch zwingend bei strings erforderlich!

    ZitatZitat geschrieben von Ithron
    mach mal vor ?> ein echo mysql_error();


    schreib lieber "mysql_query OR die(mysql_error()); machen, dies macht mehr sinn da er dann auch beim ausführen des fehlerhaften querys stirbt und dir die informationen gibt. sollte jedoch in einer produktivumgebung entfernt werden.

    es ist jetzt 3:00 uhr morgens ich hab den ganzen tag kopfschmerzen gehabt und mir war kotzübel, sollten deshalb inhaltliche fehler in diesen beitrag seien bitte ich dies zu entschuldigen oder mir einen pflock durchs herz zu treiben damit es doch bitte endlich vorbei ist!


    Zuletzt modifiziert von annemarie am 02.09.2009 - 03:04:39
    0 Mitglieder finden den Beitrag gut.
  15. #15
    User Pic
    XxMaTzExX Mitglied
    Registriert seit
    28.05.2008
    Beiträge
    1.039
    Beitragswertungen
    14 Beitragspunkte
    Okay dann muss ich dir jetzt nen pflock durchs herz jagen ;-)...ne spaß waren paar fehler drin, hab ich aber ausgebügelt!

    Danke für die erklärung!
    0 Mitglieder finden den Beitrag gut.
  16. #16
    User Pic
    XxMaTzExX Mitglied
    Registriert seit
    28.05.2008
    Beiträge
    1.039
    Beitragswertungen
    14 Beitragspunkte
    Weil ich keinen neuen thread aufmachen will hier eine neue frage!

    ich schreib mir gerade zur übung ein formular zum newsletter eintragen...
    ich möchte die email bestätigen lassen der link sieht bzw soll so aussehen..

    auszug code

    	<?php		$timestamp = time();
    			$sec = date("s y H d i d",$timestamp);
    				
    //bestätigungslink
    	$linkcheck = '<a href="http://www.test.de/index.php?freischalten.php?email='.$email.'&id='.$sec.'> Newsletter freischalten</a>' ?>


    man sieht ja wie die ID definiert wird..meine frage ist nur wie soll ich das abspeichern so das wenn auf den link geklickt wird, es später abgeglichen werden kann? denn dann würde ja viel müll zusammen kommen von nicht bestätigten emails. oder ist das überflüsig und ich lasse es dann einfach direkt mit diesem link eintragen?


    Zuletzt modifiziert von XxMaTzExX am 02.09.2009 - 16:40:13
    0 Mitglieder finden den Beitrag gut.
  17. #17
    User Pic
    XxMaTzExX Mitglied
    Registriert seit
    28.05.2008
    Beiträge
    1.039
    Beitragswertungen
    14 Beitragspunkte
    hat sich erstmal erledigt Danke an "GeCk0"
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten